主从复制可以避免单点故障,配置主从复制后,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上,保证了数据实时同步。
服务器规划
通过以下三台服务器来配置Redis的主从复制:
主机名 |
OS |
IP |
用途 |
备注 |
CentOS 7_107 |
CentOS7 |
192.168.1.107 |
Master/写 |
Redis5 |
CentOS 7_108 |
CentOS7 |
192.168.1.108 |
Slave/读 |
Redis5 |
CentOS 7_109 |
CentOS7 |
192.168.1.109 |
Slave/读 |
Redis5 |
1.Redis主从复制配置步骤
三台服务器安装完Redis后,
107主机不用任何配置,在108,109从机上分别配置如下内容
修改从服务器上的redis.conf文件
# replicaof <masterip> <masterport>
replicaof 192.168.1.107 6379
注意:Redis从5.0以后主从配置属性发生了变化,在5.0之前配置的是slaveof
5.0以后变成了replicaof
上边的配置说明当前【从服务器】对应的【主服务器】的IP是192.168.1.107,端口是6379。
将三台redis服务都启动,在107主机上连接redis后
执行如下命令增加一条数据
set aa 123
在108,109分别连接上redis后执行 get aa 命令
可以看到结果为主机上写入的aa的值
表明我们的Redis主从复制实现。
127.0.0.1:6379> get aa
"123"
127.0.0.1:6379>
在从机108,109上写入数据时会报错,提示
(error) READONLY You can't write against a read only replica.
表明从机的Redis是只读模式,只有主机才能写入数据
2.Redis哨兵机制
Sentinel(哨兵)进程用于监控redis集群中Master主服务器的工作状态,在Master主服务器发生故障状态的时候,可以实现Master和Slave服务器的切换,保证系统的高可用。
实现步骤:
- 第一步:复制sentinel.conf
将/usr/local/app/redis-5.0.5目录下的sentinel.conf文件复制到/usr/local/redis//bin/目录下
cp sentinel.conf /usr/local/redis//bin/
- 第二步:修改sentinel.conf
vim sentinel.conf
修改:
sentinel monitor mymaster 192.168.1.107 6379 2
配置说明:监听107主机,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效。master-name只能包含英文字母,数字,和“.-_”这三个字符需要注意的是master-ip 要写真实的ip地址
- 第三步:启动哨兵(sentinel),分别在108,109从机的redis的bin目录下
执行命令 (前端启动)
./redis-sentinel sentinel.conf
- 测试哨兵机制是否正常
将107主机的Redis进程停掉
在从机108,109哨兵控制台输出内容可以看到108从机变为了主机Master
此时在108主机上连接Redis后写入一个值
在109从机连接Redis后查看该值
以上结果我们可以看到108变为了主机后可以写入数据,109从机可以查看到写入的值表明哨兵机制配置成功
综上得到结论:当107主机宕机后,108,109从机监听到107主机失去联系后,会选择从机108为主机,此时108可以写入操作,109还是从机所以还是只能读取数据。
注意:当107主机重新连接后,将变为从机。如下图所示:
后端启动sentinel(哨兵)
- 在sentinel的配置文件中修改以下内容
daemonize yes
logfile "/var/log/sentinel_log.log"
启动sentinel
redis-server sentinel.conf --sentinel