CentOS7下的Redis5.0版本(二)-主从复制实践

 

主从复制可以避免单点故障,配置主从复制后,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上,保证了数据实时同步。

 CentOS7下的Redis5.0版本(二)-主从复制实践_第1张图片

服务器规划

通过以下三台服务器来配置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  
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 

CentOS7下的Redis5.0版本(二)-主从复制实践_第2张图片

  • 测试哨兵机制是否正常

将107主机的Redis进程停掉

在从机108,109哨兵控制台输出内容可以看到108从机变为了主机Master

CentOS7下的Redis5.0版本(二)-主从复制实践_第3张图片

此时在108主机上连接Redis后写入一个值

CentOS7下的Redis5.0版本(二)-主从复制实践_第4张图片

在109从机连接Redis后查看该值

CentOS7下的Redis5.0版本(二)-主从复制实践_第5张图片

以上结果我们可以看到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

你可能感兴趣的:(Redis)