redis 主从复制

tech2022-09-05  112

redis主从

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

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

主节点:11.2.3.63 从节点:11.2.2.228

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

bind 0.0.0.0

2)配置从节点

slaveof <masterip> <masterport>:当前节点属于哪个主节点masterauth <master-password>:主节点认证,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上面进行数据同步

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角色。

最新回复(0)