redis集群

129 阅读5分钟

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服务在接收到数据库文件后,将其存盘并加载到内存。

全量复制流程:

image.png

增量复制:master继续将所有收集到的修改命令一次传给slave,完成同步,但是只要重新连接master,一定执行一次完全同步(全量复制)将被自动执行。

简言之:第一次连接到主机全量复制给你,之后有添加数据再增量复制给你。

2.主从复制-哨兵模式

层层链路,薪火相传:有些情况是自己既当从机又当主机,79<-80<-81(通过命令:slaveof 127.0.0.1 6379 找主机) 此时80依旧是个从节点,依旧无法写。

传统模式在主节点挂了之后,只能自己指定主节点:slaveof no one,就可以使当前节点变为主节点。

哨兵模式:当主服务器宕机后,需要把一台服务器切换为主服务器,这时需要一个哨兵进行监控,自动选举一台主机作为主节点。

哨兵模式是一种特殊的模式,redis提供哨兵的命令,哨兵是一个独立的进程,原理:哨兵通过发送命令,等待redis服务器响应,从而监控多个redis实例。

image.png

如图所示,假如主服务器挂了,哨兵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.实现哨兵模式麻烦。保证高可用可能会配置哨兵集群。