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
从库己自动切为主库
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/