Redis主从复制
**Tips:**准备三台虚拟机,配置好主机名、IP地址和redis环境。为了演示方便,利用多个实列的方式在一台主机上运行。
环境准备
配置多个实列
cp /opt/software/redis-7.0.4/redis.conf /etc/redis.conf
cp /opt/software/redis-7.0.4/redis.conf /etc/redis2.conf
vim /etc/redis.conf
#添加以下端口
port 6380
vim /etc/redis.conf
port 6381
#根据不同的配置文件启动redis-server
启动服务
redis-server /etc/redis.conf
redis-server /etc/redis2.conf
查看服务进程
ps -ef | grep redis
#出现7379、6380、6381三个进程即配置成功
主从复制步骤
1、创建目录
mkdir /rediscluster
2、复制配置文件
cp /etc/redis.conf /rediscluster/redis.conf
Tips: 为了演示方便,把redis.conf中的appendonly no,即关闭AOF
3、创建三个文件
[root@serverb rediscluster]# vim redis-6379.conf
include /rediscluster/redis.conf
# 修改端口号
port 6379
# 修改pid文件名
pidfile "/var/run/redis_6379.pid"
# 修改持久化文件名
dbfilename "dump_6379.rdb"
dir "/rediscluster"
[root@serverb rediscluster]# vim redis-6380.conf
include /rediscluster/redis.conf
# 修改端口号
port 6380
# 修改pid文件名
pidfile "/var/run/redis_6380.pid"
# 修改持久化文件名
dbfilename "dump_6380.rdb"
dir "/rediscluster"
[root@serverb rediscluster]# vim redis-6381.conf
include /rediscluster/redis.conf
# 修改端口号
port 6381
# 修改pid文件名
pidfile "/var/run/redis_6381.pid"
# 修改持久化文件名
dbfilename "dump_6381.rdb"
dir "/rediscluster"
4、启动服务
[root@serverb rediscluster]# redis-server redis-6379.conf
[root@serverb rediscluster]# redis-server redis-6380.conf
[root@serverb rediscluster]# redis-server redis-6381.conf
5、连接服务
[root@serverb rediscluster]# redis-cli -p 6379
[root@serverb rediscluster]# redis-cli -p 6380
[root@serverb rediscluster]# redis-cli -p 6381
6、进行复制
127.0.0.1:6379> info replication
127.0.0.1:6380> info replication
127.0.0.1:6381> info replication
这时你会发现,三台都是master,也就是都是服务器。
7、配置主从
假设我们希望 6379 是主服务器,而 6380 和 6381 是从服务器,则需要做如下配置。
命令格式:replicaof
注意:此命令代表我要做谁的从服务器
我们分别在 6380 和 6381 客户端中执行如下命令:
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
127.0.0.1:6381> slaveof 127.0.0.1 6379
OK
注意:
- 在 redis-cli 客户端中执行 replicaof 命令只会对当前环境生效,重启后失效。要想永 久生效,需要在 redis.conf 配置文件中添加 replicaof 配置。
- 在 Redis 5.0 后,新增了 replicaof 命令,作用与 slaveof命令效果一致。
8、集群测试
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
测试
127.0.0.1:6380> get k1
1) "v1"
127.0.0.1:6381> get k1
1) "v1"
注意:
- 如果我们在从服务器中添加数据,则会报错。因为从服务器只能读。
- 如果从机宕机了,重启后会变为主服务器,需要重新执行 slaveof 命令。
主从切换
当一个 master 宕机后,后面的 slave 可以立刻升为 master,其后面的 slave 不用做任何修 改。
用 slaveof no one 将从机变为主机。
假设主机 6379 宕机了,我们可以在 6380 上执行如下命令来切换为主机:
127.0.0.1:6380> slaveof no one
查看6380,已经变为主机了。
哨兵模式
什么是哨兵模式
哨兵也叫 sentinel,它的作用是能够在后台监控主机是否故障,如果故障了根据投票数自动将 从库转换为主库。
哨兵模式配置
首先停止三台redis服务
redis-cli shutdown
然后再重新启动三台 Redis 服务器,并实现一主双从。
最后在 /rediscluster 目录下新建 sentinel.conf 文件,文件名称不能写错,必须叫这个名 称。
[root@serverb rediscluster]# vim sentinel.conf
sentinel monitor redismaster 127.0.0.1 6379 1
参数说明:
monitor:监控
redismaster:为监控对象起的服务名称
1:代表至少有多个哨兵同意迁移的数量
启动哨兵
[root@serverb rediscluster]# redis-sentinel sentinel.conf
验证哨兵
[root@serverb rediscluster]# redis-cli -p 6379
127.0.0.1:6379> shutdown
这时,哨兵就会介入,并进行选举,然后把选举成功的从面切换为主机。
如果我们把 6379 重新启动,则它会变为从机。
[root@serverb rediscluster]# redis-server /rediscluster/redis-6739.conf
[root@serverb rediscluster]# redis-cli -p 6379
127.0.0.1:6379> info replication