redis 主从复制

redis主从


redis既然有读有写,为了更好的分担压力,就需要配置主从来分压。 从服务器可以从主服务器上获取数据,从级联服务器可以根从服务器相关联。

当有从节点进来的时候,主服务器会执行bgsave命令,生成一份儿快照,发给从服务器上。从服务器为了与主服务器保持一致,会丢弃之前有的数据,载入主服务器上的快照,并开始接收主服务器没有写入快照当中的命令。用来保证主从数据一致

redis 主从复制_第1张图片
主节点:11.2.3.63
从节点:11.2.2.228

1)由于从节点需要连接到主节点,所以需要修改两个节点的bind,监听到所有地址上

bind 0.0.0.0

2)配置从节点

  • slaveof :当前节点属于哪个主节点
  • masterauth :主节点认证,requirepass设置的
slaveof 11.2.3.63 6379
masterauth centos
slave-serve-stale-data yes  是否使用过期的数据响应给客户
slave-read-only yes  从服务器是否是只读的

repl-diskless-sync no  
如果主从服务器有一段时间失去联系,那么数据肯定存在差异,这时从服务器需要做一次完全同步,有两种方式
Disk-backend:主节点创建新快照文件于磁盘中,而后将其发送给从节点
Diskless: 主节点新创建快照后直接通过网络套接字发送给从节点,

repl-diskless-sync-delay 5  当使用套接字发送的时候,延迟多久发送
repl-ping-slave-period 10  从节点多久发送一次ping给主节点 
repl-timeout 60 主从复制超时时长
min-slaves-to-write 3  当从节点大于3的时候,才允许写操作
min-slaves-max-lag 10    从节点延迟时长超出此处指定的时长时,主节点会拒绝写入操作;

设置完成后,重启,在主服务器上使用INFO可以看到slave0:ip=11.2.2.228,port=6379,state=online,offset=1,lag=1,证明从节点已经连上。

测试主从的key是否一致

11.2.3.63:6379> LRANGE colors 0 3   主节点
1) "blue"
2) "yellow"
3) "red"
4) "green"

11.2.2.228:6379> LRANGE colors 0 3
1) "blue"
2) "yellow"
3) "red"
4) "green"

仅仅只有主从还不够,如果主节点挂掉,那么从是无法接替主节点继续为用户提供写操作。所以我们还需要对其实现高可用性。 redis提供了叫sentinel的工具。

sentinel工作机制:

  • 至少有三个哨兵,三个哨兵的作用类似于少数服从多数。 1个哨兵认为主节点挂掉,并不能说明问题。两个以上都认为才是真正的挂掉
  • 在从节点中选举出来新的master,并告知剩下的从节点现在谁是真正的master。剩下的从节点会从新的masters上面进行数据同步

redis 主从复制_第2张图片
sentinel监听在每个节点上

主节点:11.2.3.63 sentinel
从节点:11.2.2.228 sentinel
从节点:11.2.3.25 sentinel

1)首先需要修改两个从节点的优先级,主节点挂掉之后,优先级高的优先上位

slave-priority 80   此处只更改25节点

2)开始配置三个节点上的redis-sentinel.conf

bind 0.0.0.0  绑定地址
  
protected-mode no

port 26379   端口

sentinel announce-ip 1.2.3.4  对外发现的地址,如果不指定的话,sentinel会自动探测地址

sentinel monitor mymaster 11.2.3.63 6379 2      monitor表示监听,mymaster 自定义名称   master的ip地址 port 2表示至少有多少个sentinel检测到问题之后,才进行故障转移

sentinel auth-pass mymaster centos   主节点名称和redis中requirepass设置的密码

sentinel down-after-milliseconds mymaster 30000  监听到主节点故障多少毫秒才判定为故障

sentinel parallel-syncs mymaster 1   在故障转移时,允许sentinel配置的从节点有几个

sentinel failover-timeout mymaster 180000   在故障转移时,180000毫秒内必须完成转移操作,如果失败,


   
 

设置完成之后,优先启动主节点

主动down掉主节点,观察/var/log/redis/sentinel日志,会发现类似9286:X 03 Sep 23:05:41.107 # +switch-master mymaster 192.168.199.182 6379 192.168.199.155 6379(此处由于换了网络,所以地址与上述不同)。
这样就完成了故障转移,并且155主机也变成了master角色。

你可能感兴趣的:(redis)