redis 集群主从复制

1. redis主从复制(master/slave)

通过持久化功能,redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,但是由于数据是存储在一台服务器上的,如果这台服务器出现故障,比如硬盘损坏,也会导致数据丢失。

为了避免单点故障,需要将数据复制多份部署在多台不同的服务器上,即使有一台服务器出现故障,其他服务器依然可以继续提供服务。

redis提供了复制(replication)功能来自动实现多台redis服务器的数据同步。

可通过部署多台redis,并在配置文件中指定这几台redis之间的主从关系,主负责写入数据,同时把写入的数据实时同步到从机器,这种模式叫做主从复制。并且redis默认master用于读写,slave只能用于读。

一个master可以有多个slave。

当slave宕掉后,读请求的处理性能下降。

当master宕掉后,写请求无法执行。

当master发生故障,需手动将其中一台slave使用slaveof no one命令提升为master,其他slave执行slaveof命令指向这个新的master,从新的master处同步数据。

主从复制模式的故障转移需要手动操作,要实现自动化处理,需要sentine哨兵,实现故障自动转移。

1.1 主从复制实例

名称IP
master(主服务器)192.168.146.102/24
slave1(从服务器1)192.168.146.111/24
slave2(从服务器2)192.168.146.112/24

首先,修改redis对应的redis.conf配置文件。master和slave均需修改。

# master主服务器配置文件修改以下几项
[root@CentOS7 src]# vim ../redis.conf 
bind 192.168.146.102
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile ""
dbfilename dump.rdb
# slave1从服务器1配置文件修改以下几项
[root@server1 src]# vim ../redis.conf 
bind 192.168.146.111
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile ""
dbfilename dump.rdb
#将当前服务器转变为master主服务器的从服务器
slaveof 192.168.146.102 6379

# slave2从服务器2配置文件修改以下几项
[root@server2 src]# vim ../redis.conf 
bind 192.168.146.112
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile ""
dbfilename dump.rdb
#将当前服务器转变为master主服务器的从服务器
slaveof 192.168.146.102 6379

然后在所有设备上重启redis服务。

[root@CentOS7 src]# ./redis-cli shutdown
[root@CentOS7 src]# nohup ./redis-server ../redis.conf 

使用info replication命令查看master主服务器的角色

在master主服务器上写入数据,然后去slave从服务器上去查看。

192.168.146.102:6379> set k1 v1
OK
192.168.146.102:6379> set k2 v2
OK
192.168.146.111:6379> mget k1 k2
1) "v1"
2) "v2"
# slave从服务器可以获取值,但是无法写入数据
192.168.146.111:6379> set k3 v3
(error) READONLY You can't write against a read only replica.

192.168.146.112:6379> mget k1 k2
1) "v1"
2) "v2"

1.2 容灾处理

当master主服务器出现故障,需手动将slave中的一个提升为master,剩下的slave挂至新的master上(冷处理)。

slaveof no one:将一台slave服务器提升至master

slaveof 192.168.146.111 6379:将slave挂至新的master

# 将slave1从服务器1提升至新的master主服务器
192.168.146.111:6379> slaveof no one
OK
# 将slave2从服务器2挂至新的master主服务器
192.168.146.112:6379> slaveof 192.168.146.111 6379
OK

然后将原来的master主服务器重新启动,挂到新的master主服务器下,成为slave服务器,然后查看新的master主服务器的角色

1.3 高可用sentinel哨兵

sentinel哨兵是redis官方提供的高可用解决方案,可以用它来监控多个redis服务实例的运行情况。

sentinel会不断检查master和slave是否正常。

如果sentinel挂了,就无法监控,所有需要多个sentinel,组成sentinel网络.

监控同一个master的sentinel会自动连接,组成一个分布式的sentinel网络,互相通信并交换彼此关于被监控服务器的信息。

当一个sentinel认为被监控的服务器已经下线时,它会像网络中的其他sentinel进行确认,判断该服务器是否真的已经下线。

如果下线的服务器为master,那么sentinel网络将对下线主服务器进行自动故障转移,通过将下线主服务器的某个从服务器提升为新的主服务器,并让其他从服务器转移到新的主服务器,以此来让系统重新回到正常状态。

下线的旧主服务器重新上线,sentinel会让它成为从服务器,挂到新的主服务器下。

sentinel会在master下线后自动执行故障转移操作,提升一台slave为master,并让其它slave成为新master的slave。

1. sentinel配置

由于在上述实验之上做的,所以master/slave发生变化。

名称IP
master(主服务器)192.168.146.111/24
slave1(从服务器1)192.168.146.102/24
slave2(从服务器2)192.168.146.112/24

修改所有服务器的sentinel.conf配置文件

# master主服务器的sentinel.conf文件配置
[root@server1 src]# vim ../sentinel.conf
bind 192.168.146.111
port 26379
daemonize yes
logfile "/var/log/sentinel.log"
sentinel monitor mymaster 192.168.146.111 6379 2
# slave1从服务器1的sentinel.conf文件配置
[root@CentOS7 src]# vim ../sentinel.conf
bind 192.168.146.102
port 26379
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
logfile "/var/log/sentinel.log"
dir "/tmp"
sentinel monitor mymaster 192.168.146.111 6379 2

# slave2从服务器2的sentinel.conf文件配置
[root@server2 src]# vim ../sentinel.conf
bind 192.168.146.112
port 26379
daemonize yes
logfile "/var/log/sentinel.log"
sentinel monitor mymaster 192.168.146.111 6379 2

所有服务器上均启动sentinel

[root@server1 src]# ./redis-sentinel ../sentinel.conf

当把master(192.168.146.111)关闭后,再重新打开,查看master(192.168.146.111)日志。

[root@server1 ~]# tailf /var/log/sentinel.log
9384:X 07 Sep 2019 03:50:31.604 * +slave slave 192.168.146.112:6379 192.168.146.112 6379 @ mymaster 192.168.146.111 6379
9384:X 07 Sep 2019 03:50:31.604 * +slave slave 192.168.146.102:6379 192.168.146.102 6379 @ mymaster 192.168.146.111 6379
9412:X 07 Sep 2019 03:52:42.426 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
9412:X 07 Sep 2019 03:52:42.426 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=9412, just started
9412:X 07 Sep 2019 03:52:42.426 # Configuration loaded
9413:X 07 Sep 2019 03:52:42.429 * Increased maximum number of open files to 10032 (it was originally set to 1024).
9413:X 07 Sep 2019 03:52:42.430 * Running mode=sentinel, port=26379.
9413:X 07 Sep 2019 03:52:42.431 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
9413:X 07 Sep 2019 03:52:42.431 # Sentinel ID is fc778fd4228b6fdbf8d61ec1d6c8fb0ccf938794
9413:X 07 Sep 2019 03:52:42.431 # +monitor master mymaster 192.168.146.111 6379 quorum 2
9413:X 07 Sep 2019 03:55:35.232 # +sdown master mymaster 192.168.146.111 6379
9413:X 07 Sep 2019 03:55:35.337 # +new-epoch 5
9413:X 07 Sep 2019 03:55:35.339 # +vote-for-leader af085d0b19173d717da2910283fc07f42dd0947e 5
9413:X 07 Sep 2019 03:55:35.343 # +odown master mymaster 192.168.146.111 6379 #quorum 2/2
9413:X 07 Sep 2019 03:55:35.343 # Next failover delay: I will not start a failover before Sat Sep  7 04:01:35 2019
9413:X 07 Sep 2019 03:55:36.205 # +config-update-from sentinel af085d0b19173d717da2910283fc07f42dd0947e 192.168.146.112 26379 @ mymaster 192.168.146.111 6379
9413:X 07 Sep 2019 03:55:36.206 # +switch-master mymaster 192.168.146.111 6379 192.168.146.102 6379
9413:X 07 Sep 2019 03:55:36.206 * +slave slave 192.168.146.112:6379 192.168.146.112 6379 @ mymaster 192.168.146.102 6379
9413:X 07 Sep 2019 03:55:36.207 * +slave slave 192.168.146.111:6379 192.168.146.111 6379 @ mymaster 192.168.146.102 6379

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值