Redis 3.2 主从复制及sentinel自动切换

redis 主从复制及高可用


redis编译安装:
wget http://download.redis.io/releases/redis-3.2.1.tar.gz
tar zxvf redis-3.2.1.tar.gz
cd /soft/redis-3.2.1
make  && make install
[root@node1 src]# which redis-cli


创建目录
master:
mkdir -p /opt/redis/node6000/data 
mkdir -p /opt/redis/node6000/log


cp /soft/redis-3.2.1/redis.conf /opt/redis/node6000/
grep -v '#' redis.conf  |grep -v '^$'

主要修改4个参数:
1.port;
2.logfile;
3.slaveof;
4.pidfile;
5.daemonize(配置以daemon方式运行)

配置Slave
只需要将redis-slave.conf中REPLICATION段中的slaveof <masterip> <masterport>行的注释去掉,并修改为:
slaveof 127.0.0.1 6379
即完成该Slave的配置,并指向本地端口为6379的Master端。


masterauth
如果Master端通过requirepass设置了密码,Slave需要对应的通过masterauth <password>设置密码;


slave-serve-stale-data
当Slave和Master断开连接时,Slave是直接返回错误提示还是利用历史数据响应客户端(或是直接返回空数据,当全量复制进行时)。yes是缺省值,即利用历史数据响应。

slave-read-only
缺省模式下,Slave服务器是只读的。
repl-ping-slave-peroid
即心跳检测间隔时间,缺省值为10秒。
repl-timeout 60
复制超时




?修改master文件:redis.conf:


配置文件的其他部分不要改动,修改如下内容:
1.port 63792.pidfile /var/run/redis_6379.pid
3.# slaveof <masterip> <masterport>
4.logfile "/data/logs/redis.master.log"
5.daemonize yes

redis master 非持久化,备持久化


vi redis_master_59.conf


bind 192.168.2.59
port 6000
daemonize yes
pidfile /opt/redis/node6000/redis_6000.pid
loglevel notice
logfile "/opt/redis/node6000/log/redis_master.log"
dir /opt/redis/node6000/data/
save ""
#save 900 1
#save 300 10
#save 60 10000
# slaveof <masterip> <masterport>
slave-serve-stale-data yes 
repl-ping-slave-period 10
requirepass 123456
maxclients 1024
maxmemory  50mb
maxmemory-policy allkeys-lru
slowlog-log-slower-than 10000
appendonly yes
appendfilename "appendonly.aof"




redis-server redis_master_59.conf 




vi redis_slave_59.conf


bind 192.168.2.61
port 6000
daemonize yes
pidfile /opt/redis/node6000/redis_6000.pid
loglevel notice
logfile "/opt/redis/node6000/log/redis_slave.log"
dir /opt/redis/node6000/data/
slaveof 192.168.2.59 6000 
slave-serve-stale-data yes 
repl-ping-slave-period 10
masterauth 123456 
requirepass 123456
maxclients 1024
maxmemory  50mb
maxmemory-policy allkeys-lru
slowlog-log-slower-than 10000
appendonly yes
appendfilename "appendonly.aof"




redis-server redis_slave_59.conf


验证下 主从复制。
master:
redis-cli -h 192.168.2.59 -p 6000
auth 123456 
set name chen


 
slave1:
redis-cli -h 192.168.2.61 -p 6000
auth 123456 
get name




查看主从复制信息
redis-cli -h 192.168.2.59 -p 6000 -a 123456 info Replication 

[root@virtdb54 soft]# more rc_set.py 
import redis 
import time
rc = redis.Redis(host='192.168.2.59',port=6000,db=0,password=123456)


start = time.clock()
for i in range(10000,30000):
    key = str(i)
    value = 'id' + str(i)
    rc.set(key,value)
    result = rc.get(key)
    print result


end = time.clock()
print "read: %f s" % (end - start)


运行了11s
read: 11.370000 s




配置sentinel监控
Redis Sentinel介绍


Redis Sentinel是Redis官方提供的集群管理工具,主要有三大功能: 
监控,能持续监控Redis的主从实例是否正常工作; 
通知,当被监控的Redis实例出问题时,能通过API通知系统管理员或其他程序; 
自动故障恢复,如果主实例无法正常工作,Sentinel将启动故障恢复机制把一个从实例提升为主实例,其他的从实例将会被重新配置到新的主实例,且应用程序会得到一个更换新地址的通知。 




cp sentinel.conf /opt/redis/node6000/


more sentinel.conf  |grep -v '#' |grep -v '^$'


vi sentinel.conf
port 26379
dir /tmp
daemonize yes
sentinel monitor mymaster 192.168.2.59 6000 1
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 18000
logfile "/opt/redis/node6000/log/sentinel1.log"




vi sentinel1.conf
port 26379
dir /tmp
daemonize yes
sentinel monitor mymaster 192.168.2.59 6000 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
logfile "/opt/redis/node6000/log/sentinel1.log"


redis-server sentinel1.conf --sentinel






vi sentinel2.conf
port 26380
dir /tmp
daemonize yes
sentinel monitor mymaster 192.168.2.59 6000 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
logfile "/opt/redis/node6000/log/sentinel2.log"


redis-server sentinel2.conf --sentinel




注:
down-after-milliseconds:sentinel会向master发送心跳PING来确认master是否存活,如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了(subjectively down, 也简称为SDOWN)。而这个down-after-milliseconds就是用来指定这个“一定时间范围”的,单位是毫秒。##默认为30秒 


sentinel parallel-syncs :在发生failover主备切换时,这个选项指定了最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave处于不能处理命令请求的状态。




sentinel failover-timeout mymaster:
##failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,  
##当前sentinel将会认为此次failoer失败。  


##当前sentinel实例是否允许实施“failover”(故障转移)  
##no表示当前sentinel为“观察者”(只参与"投票".不参与实施failover),  
##全局中至少有一个为yes  
sentinel can-failover def_master yes  




##当failover时,可以指定一个“通知”脚本用来告知系统管理员,当前集群的情况。  
##脚本被允许执行的最大时间为60秒,如果超时,脚本将会被终止(KILL)  
##脚本执行的结果:  
## 1    -> 稍后重试,最大重试次数为10;   
## 2    -> 执行结束,无需重试  
##sentinel notification-script mymaster /var/redis/notify.sh  








手动将从库切为主库
redis-cli -h 192.168.2.61 -p 6000 -a 123456  slaveof NO ONE




redis-cli -h 192.168.2.59 -p 26379 info Sentinel


关闭redis master,主从切换
[root@localhost ~]# redis-cli -h 192.168.2.61 -p 6000 -a 123456 info Replication 
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0


从库己自动切为主库

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/91975/viewspace-2125704/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/91975/viewspace-2125704/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值