redis的主从复制

2018-11-17  本文已影响9人  任总

一、配置slave节点:

1、格式:

redis-cli> SLAVEOF <MASTER_IP> <MASTER_PORT> 主机地址
redis-cli> CONFIG SET masterauth <PASSWORD> 授权密码

2、配置参数:

*slaveof
*masterauth

slave-serve-stale-data yes  当主节点下线,是否使用从节点数据
slave-read-only yes         从节点只读
*repl-diskless-sync no     复制同步策略
no, Disk-backed, Diskless
repl-diskless-sync-delay 5 无磁盘复制有效,主节点延迟5秒钟复制
repl-ping-slave-period 10 主节点每隔10秒钟探测从节点一次

*repl-timeout 60 探测超时60秒

repl-disable-tcp-nodelay no 产生数据不集合传输,有数据就传
repl-backlog-size 1mb  复制的后援队列长度

*slave-priority 100  从节点的优先级
复制集群中,主节点故障时,sentinel应用场景中的主节点选举时使用的优先级;数字越小优先级越高,但0表示不参与选举;

min-slaves-to-write 3:主节点仅允许其能够通信的从节点数量大于等于此处的值时接受写操作;
min-slaves-max-lag 10:从节点延迟时长超出此处指定的时长时,主节点会拒绝写入操作;

二、sentinel(哨兵)监控节点:

主要完成三个功能:监控、通知、自动故障转移
选举:sentinel节点必须最少有三个,流言协议、投票协议
1、配置项:
port 26379
sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel auth-pass <master-name> <password>

<quorum>表示sentinel集群的quorum机制,即至少有quorum个sentinel节点同时判定主节点故障时,才认为其真的故障;
s_down: subjectively down
o_down: objectively down

sentinel down-after-milliseconds <master-name> <milliseconds>
监控到指定的集群的主节点异常状态持续多久方才将标记为“故障”;

sentinel parallel-syncs <master-name> <numslaves>
指在failover过程中,能够被sentinel并行配置的从节点的数量;

sentinel failover-timeout <master-name> <milliseconds>
sentinel必须在此指定的时长内完成故障转移操作,否则,将视为故障转移操作失败;

sentinel notification-script <master-name> <script-path>
通知脚本,此脚本被自动传递多个参数;

2、使用格式:

redis-cli -h SENTINEL_HOST -p SENTINEL_PORT
redis-cli>
SENTINEL masters
SENTINEL slaves <MASTER_NAME>
SENTINEL failover <MASTER_NAME>
SENTINEL get-master-addr-by-name <MASTER_NAME>

三、主从复制示例

主节点
#安装epel源,redis
[root@redis-25 ~]# yum install epel-release
[root@redis-25 ~]# yum install redis

#配置redis配置文件监听地址
[root@redis-25 ~]# vim /etc/redis.conf 
bind 0.0.0.0
[root@redis-25 ~]# systemctl start redis

[root@redis-25 ~]# redis-cli
127.0.0.1:6379> INFO
NOAUTH Authentication required.
127.0.0.1:6379> AUTH 321
OK

#获取从节点信息
127.0.0.1:6379> INFO 
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.1.24,port=6379,state=online,offset=729,lag=1  #从节点一信息
slave1:ip=192.168.1.23,port=6379,state=online,offset=729,lag=1  #从节点二信息

#配置sentinel
[root@redis-25 ~]# vim /etc/redis-sentinel.conf 
port 26379 #端口  
bind 0.0.0.0  
sentinel monitor mymaster 192.168.1.25 6379 2 #集群名称mymaster,地址端口,2是最少有两个节点通过才行
 sentinel auth-pass mymaster 321 #认证主节点密码
sentinel down-after-milliseconds mymaster 5000#超出5秒钟就认为主节点下线
sentinel parallel-syncs mymaster 1 #并行级别,级别越高压力越大,同步时间越短
sentinel failover-timeout mymaster 180000 #故障转移超时时间3分钟,单位毫秒
# sentinel notification-script <master-name> <script-path>#通知脚本
logfile /var/log/redis/sentinel.log
#日志文件

#把日志文件拷贝到其他从节点
[root@redis-25 ~]# scp /etc/redis-sentinel.conf 192.168.1.24:/etc/redis-sentinel.conf 
[root@redis-25 ~]# scp /etc/redis-sentinel.conf 192.168.1.23:/etc/redis-sentinel.conf 

#启动sentinel
[root@redis-25 ~]# systemctl start redis-sentinel

#查询日志,sentinel是否启动
[root@redis-23 ~]# tail /var/log/redis/sentinel.log 
1555:X 06 Nov 23:36:02.842 * +slave slave 192.168.1.24:6379 192.168.1.24 6379 @ mymaster 192.168.1.25 6379
1555:X 06 Nov 23:36:02.845 * +slave slave 192.168.1.23:6379 192.168.1.23 6379 @ mymaster 192.168.1.25 6379
1555:X 06 Nov 23:36:03.664 * +sentinel sentinel aad81444e9286ef995728ee39b0c91fc50e4cae5 192.168.1.24 26379 @ mymaster 192.168.1.25 6379

#sentinel工具
[root@redis-25 ~]# redis-cli -h 192.168.1.25 -p 26379

#主节点信息
192.168.1.25:26379> sentinel masters  
1)  1) "name"
    2) "mymaster"
    3) "ip"
    4) "192.168.1.25"
    5) "port"
    6) "6379"
    7) "runid"
 ...............
#查询从节点信息
192.168.1.25:26379> sentinel slaves mymaster
1)  1) "name"
    2) "192.168.1.24:6379"
    3) "ip"
    4) "192.168.1.24"
    5) "port"
    6) "6379"
    7) "runid"
..............
2)  1) "name"
    2) "192.168.1.23:6379"
    3) "ip"
    4) "192.168.1.23"
    5) "port"
    6) "6379"
    7) "runid"
.................

#手动切换主节点
192.168.1.25:26379> SENTINEL failover mymaster

#查询切换后的主节点变成了192.168.1.23
192.168.1.25:26379> sentinel masters
1)  1) "name"
    2) "mymaster"
    3) "ip"
    4) "192.168.1.23"
    5) "port"
    6) "6379"

从节点一,默认只读
#安装epel源,redis
[root@redis-24 ~]# yum install epel-release
[root@redis-24 ~]# yum install redis

#配置redis配置文件监听地址
[root@redis-24 ~]# vim /etc/redis.conf 
bind 0.0.0.0
[root@redis-24 ~]# systemctl start redis

#登录redis
[root@redis-24 ~]# redis-cli

#设置主节点ip
127.0.0.1:6379> SLAVEOF 192.168.1.25 6379 #
OK
#设置授权密码
127.0.0.1:6379> CONFIG SET masterauth 321
OK
#写入到配置文件中
127.0.0.1:6379> CONFIG REWRITE
OK

#设置授权密码与主节点相同
127.0.0.1:6379> CONFIG SET requirepass 321
OK
127.0.0.1:6379> AUTH 321
OK
#写入到配置文件中
127.0.0.1:6379> CONFIG REWRITE
OK
[root@redis-24 ~]# systemctl restart redis

#查询sentinel复制过来的配置文件正确
#启动sentinel
[root@redis-23 ~]# systemctl start redis-sentinel
从节点二,默认只读
#安装epel源,redis
[root@redis-23 ~]# yum install epel-release
[root@redis-23 ~]# yum install redis

#配置redis配置文件监听地址
[root@redis-23 ~]# vim /etc/redis.conf 
.......
bind 0.0.0.0
# slaveof <masterip> <masterport>
slaveof 192.168.1.25 6379  #主节点地址
# masterauth <master-password>
masterauth "321"   #授权密码
........

[root@redis-23 ~]# systemctl start redis
#设置授权密码与主节点相同
127.0.0.1:6379> CONFIG SET requirepass 321
OK
127.0.0.1:6379> AUTH 321
OK
#写入到配置文件中
127.0.0.1:6379> CONFIG REWRITE
OK
[root@redis-24 ~]# systemctl restart redis

#查询sentinel复制过来的配置文件正确
#启动sentinel
[root@redis-23 ~]# systemctl start redis-sentinel
上一篇下一篇

猜你喜欢

热点阅读