【Redis主从复制的配置】

Redis主从复制

原理

Redis 一般是使用一个 Master 节点来进行写操作,而若干个 Slave 节点进行读操作,Master 和 Slave 分别代表了一个个不同的 Redis Server 实例。
另外定期的数据备份操作也是单独选择一个 Slave 去完成,这样可以最大程度发挥 Redis 的性能,为的 是保证数据的弱一致性和最终一致性。
另外,Master 和 Slave 的数据不是一定要即时同步的,但是在一段时间后 Master 和 Slave 的数据是趋 于同步的,这就是最终一致性。

全同步过程如下
Slave 发送 Sync 命令到 Master。
Master 启动一个后台进程,将 Redis 中的数据快照保存到文件中。
Master 将保存数据快照期间接收到的写命令缓存起来。
Master 完成写文件操作后,将该文件发送给 Slave。
使用新的 RDB 或 AOF 文件替换掉旧的 RDB 或 AOF 文件。
Master 将这期间收集的增量写命令发送给 Slave 端。

增量同步过程如下
Master 接收到用户的操作指令,判断是否需要传播到 Slave。
将操作记录追加到 AOF 文件。
将操作传播到其他 Slave:对齐主从库;往响应缓存写入指令。
将缓存中的数据发送给 Slave。

配置

一台虚拟机上配置

#修改/etc/redis.conf
dir /rediscluster

#创建目录
[root@localhost ~]# mkdir /rediscluster

#复制配置文件
[root@localhost ~]# cp /etc/redis.conf /rediscluster/

[root@localhost rediscluster]# cp redis.conf redis-6379.conf 
[root@localhost rediscluster]# cp redis.conf redis-6380.conf 
[root@localhost rediscluster]# cp redis.conf redis-6381.conf

#修改6379.conf文件,其余两个对应修改
[root@localhost rediscluster]# vim redis-6379.conf
bind 192.168.40.128
#允许后台启动
daemonize yes
#修改端口号
port 6379
#修改pid文件名
pidfile /var/run/redis_6379.pid
#修改持久化文件名
dbfilename dump_6379.rdb
dir /rediscluster

#由于是一个虚拟机,不能用systemctl
[root@localhost rediscluster]# redis-server redis-6379.conf
[root@localhost rediscluster]# redis-server redis-6380.conf
[root@localhost rediscluster]# redis-server redis-6381.conf

#可以看到三个角色全是master
[root@localhost ~]# redis-cli -h 192.168.40.128 -p 6379
192.168.40.128:6379> info replication
# Replication
role:master
connected_slaves:0

[root@localhost ~]# redis-cli -h 192.168.40.128 -p 6380
192.168.40.128:6380> info replication
# Replication
role:master
connected_slaves:0

[root@localhost ~]# redis-cli -h 192.168.40.128 -p 6381
192.168.40.128:6381> info replication
# Replication
role:master
connected_slaves:0

关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# vim /etc/selinux/config
SELINUX=permissive

#希望6379是主服务器,在6380和6381上写slaveof
#在 redis-cli 客户端中执行 slaveof 命令只会对当前环境生效,重启后失效。要想永久生效,
#需要在 redis.conf 配置文件中添加 slaveof <masterip> <masterport> 配置。
192.168.40.128:6380> slaveof 192.168.40.128 6379
OK
192.168.40.128:6381> slaveof 192.168.40.128 6379
OK
#通过info replication命令发现角色变为slave
192.168.40.128:6380> info replication
# Replication
role:slave
192.168.40.128:6381> info replication
# Replication
role:slave

#测试
192.168.40.128:6379> set key1 v1
OK
192.168.40.128:6380> get key1
"v1"
192.168.40.128:6381> get key1
"v1"
#从服务器只能读,不可写,重启后会变成主服务器,需重新执行slaveof命令

#当一个 master 宕机后,后面的 slave 可以立刻升为 master,其后面的 slave 不用做任何修改。
#用 slaveof no one 将从机变为主机。
#假设主机 6379 宕机了,我们可以在 6380 上执行如下命令来切换为主机:
192.168.40.128:6379> shutdown
not connected> 
192.168.40.128:6380> slaveof no one
OK
#6380变为主机
192.168.40.128:6380> info replication
# Replication
role:master
#6381上发现6379down了
192.168.40.128:6381> info replication
# Replication
role:slave
master_host:192.168.40.128
master_port:6379
master_link_status:down
#改为6380
192.168.40.128:6381> slaveof 192.168.40.128 6380
OK
#6379修好了以后,如果还想当主,需要先将数据进行同步

猜你喜欢

转载自blog.csdn.net/HealerCCX/article/details/131763961