1.主从复制
主从复制:数据从主节点(master)复制到从节点(slave),master以写为主,slave以读为主。 默认情况下,每台redis服务器都是主节点,且一个主节点可以有多个从节点,一个从节点只能有一个主节点。
原理:从总体上来说,Redis主从复制的策略就是:当主从服务器刚建立连接的时候,进行全量同步;全量复制结束后,进行增量复制。当然,如果有需要,slave 在任何时候都可以发起全量同步。
一般来说,redis用于工程中,只使用一台redis服务器不够。理由如下:
1.从结构上来说,单个redis服务器会发生单点故障,并且一台服务器处理所有请求负载,压力过大。
2.单台redis的容量有限,一般来说redis内存不超过20G;
环境配置:
只配置从库,不用配置主库(默认每一台都是主库(没配置情况) Replication role:master)。
修改配置文件,修改端口模拟多台机器(实际生产可以不改)。
1.修改启动端口:port 6379
2.修改后台启动线程端口:pidfile /var/run/redis_6379.pid
2.修改日志文件:logfile "6379.log"
3.修改rdb文件:dbfilename dump6379.rdb
4.依次修改以上配置,改成对应的端口,修改完毕之后启动:redis-server conf/redis82.conf
5.连接:redis-cli -p 6380
redis默认为主节点,只需要配置从节点。一主(6379)三从(6380-6382)
6.分别去从机(6380-6382)输入命令:slaveof 127.0.0.1 6379,认6379作为老大,输入info replication
可以看到集群信息:从节点显示:
role:slave master_host:127.0.0.1 master_port:6379、
主节点显示:role:master connected_slaves:3
真实的主从配置应在配置文件配置,就会持久化。 replicaof <masterip> <masterport> 配置ip 和端口。
7.主机可以写,从机不能写,只能读。主机中的所有信息都会自动被从机保存。主机设置的数据从机能够读到。
在从机输入:set k1 v1 抛出:(error) READONLY You can't write against a read only replica.
8.假如主机挂了,从机依然能够工作,就是不能写了,需要手动选定主机。主机恢复,依旧能够同步数据,保证高可用。从机挂了,假如配置(文件配置一直生效,命令失效,变成主机)还是6379的从机,还是能够拿到之前的数据。
9.复制原理:slave启动成功连接master后会发送一个sync同步命令,master接到命令启动后台存盘进程,接受所有修改数据命令,master将整个数据文件到slave。完成一次完全同步。
全量复制:master服务在接收到数据库文件后,将其存盘并加载到内存。
全量复制流程:
增量复制:master继续将所有收集到的修改命令一次传给slave,完成同步,但是只要重新连接master,一定执行一次完全同步(全量复制)将被自动执行。
简言之:第一次连接到主机全量复制给你,之后有添加数据再增量复制给你。
2.主从复制-哨兵模式
层层链路,薪火相传:有些情况是自己既当从机又当主机,79<-80<-81(通过命令:slaveof 127.0.0.1 6379 找主机) 此时80依旧是个从节点,依旧无法写。
传统模式在主节点挂了之后,只能自己指定主节点:slaveof no one,就可以使当前节点变为主节点。
哨兵模式:当主服务器宕机后,需要把一台服务器切换为主服务器,这时需要一个哨兵进行监控,自动选举一台主机作为主节点。
哨兵模式是一种特殊的模式,redis提供哨兵的命令,哨兵是一个独立的进程,原理:哨兵通过发送命令,等待redis服务器响应,从而监控多个redis实例。
如图所示,假如主服务器挂了,哨兵1会主观认为主服务器不可用,这个现象称为主观下线,当后面的哨兵也检测到主服务器不可用,并且数量达到一定值之后,哨兵们会进行一次投票,投票的结果由一个哨兵发起,进行故障转移。切换成功后,通过分布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程是客观上线。
1.config目录下创建:sentinel.conf
2.sentinel monitor myredis 127.0.0.1 6379 1配置监听主机,1:代表主机挂了,投票谁来成为主机。slave投票看谁票数最多成为主机。
3.分别启动 79 80 81 redis,使79作为主节点(命令:slaveof 127.0.0.1 6379),80 81 作为从节点。
3.启动哨兵:bin目录下:redis-sentinel conf/sentinel.conf
启动结果:Running in sentinel mode Port: 26379 PID: 5101
4.使用shutdown 命令使主节点宕机,等一会sentinel就会输出内容,从新选举新的主节点。通过命令:info replication查看80机子显示:role:master connected_slaves:1
5.哨兵日志: +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ myredis 127.0.0.1 6380
6.此时从新启动6379服务器,此时已经变成master,脱离了集群,稍等一会儿sentinel会把它加入到集群,此时已经变成slave从节点了。
优点:
1.基于主从复制,拥有主从所有功能。
2.主从自动切换,故障可以转移。
3.哨兵就是主从的升级版,自动到手动.
缺点:
1.redis不好在线扩容了,集群容量一旦达到上限,扩容麻烦。
2.实现哨兵模式麻烦。保证高可用可能会配置哨兵集群。