您的位置:首页 > 数据库 > Redis

redis应用之使用sentinel实现主从复制高可用

2016-11-02 21:44 961 查看
一、redis的高可用管理工具sentinel介绍sentinel是一个管理redis实例的工具,它可以实现对redis的监控、通知、自动故障转移。sentinel不断的检测redis实例是否可以正常工作,通过API向其他程序报告redis的状态,如果redis master不能工作,则会自动启动故障转移进程,将其中的一个slave提升(通过选举)为master,其他的slave重新设置新的master服务器。而故障的master再次启动后会被sentinel自动降级为slave服务器加入到集群中。redis主从的特点:1、redis使用异步复制,从服务器会以每秒一次的频率向主服务器报告复制流的处理进度2、一个主服务器可以有多个从服务器,从服务器也可以有自己的从服务器(级联复制)3、复制功能不会阻塞主服务器,即使一个或多个从服务器正在进行初次同步,主服务器也可以继续处理命令请求4、复制功能可以用于数据冗余,也可以通过让多个从服务器处理只读命令请求来提升扩展性5、Redis从节点默认为只读,无须手动配置redis的主从集群可以实现分担压力的效果,但是无法做到高可用,如果master宕掉,服务就不可用了,所以使用redis的sentinel可以实现HA的功能:sentinel作用如下:1、监控:sentinel会不断的检查你的主服务器和从服务器是否运行正常2、当被监控的某个redis服务器出现问题时,sentinel可以通过API向管理员或者其他应用程序发送通知3、自动故障转移:当一个主服务器不能正常工作时,sentinel会开始一次自动故障转移操作,他会将其中一个从服务器升级为新的主服务器,并将其他从服务器改为复制新的主服务器;当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器。redis sentinel在监控redis实例时有两种redis宕机状态S_DOWN和O_DOWN:S_DOWN:当sentinel在指定的超时时间内没有收到一个正确的ping回复值,则认为是S_DOWNO_DOWN:O_DOWN的条件是有足够多的sentinel认为该redis实例是S_DOWN。注意:O_DOWN只能是发生在主服务器,sentinel和其他从服务器不会发生O_DOWN二、开始安装配置主从高可用1、环境架构:rhel6 or centos 6 ip:10.48.194.252 (若在不同机器上部署的话,都需要在机器上安装sentinel)master_port:6379slave_port:6380slave_port:6381sentinel_port:26379sentinel_port:26479本人是在一台机器上开多个实例,在不同机器中也可以。原理一样,这里不在复述
架构说明:a、如果主节点修复后再上线,就会变成从节点。b、客户端程序连接时,应该连接sentinel节点2、在三台redis上配置sentinel
先介绍一下sentinel.conf配置文件中常用的参数,如下:sentinel :port 26379 配置文件如下:
cat sentinel_26379.conf
port 26379
daemonize yes
logfile "/var/log/redis/sentinel_26379.log"
protected-mode no (这是redis-3.2版本的新特性,改为no即可)
#master-1
sentinel monitor master-1 10.48.194.252 6379 2 (指向master服务器或端口)
sentinel auth-pass master-1 passwd
sentinel parallel-syncs master-1 1
sentinel down-after-milliseconds master-1 5000
sentinel failover-timeout master-1 18000
sentinel :port 26479 配置文件如下:cat sentinel_26479.conf
port 26479
daemonize yes
logfile "/var/log/redis/sentinel_26479.log"
protected-mode no
#master-1
sentinel monitor master-1 10.48.194.252 6379 2
sentinel auth-pass master-1 passwd

sentinel down-after-milliseconds master-1 5000
sentinel failover-timeout master-1 18000
sentinel parallel-syncs master-1 1

redis_master_6379.conf 配置主要参数如下:
bind 10.48.194.252 127.0.0.1
protected-mode no
port 6379
requirepass passwd
masterauth passwd
redis_slave_6380.conf 配置主要参数如下:
protected-mode no
port 6380
daemonize yes
requirepass "passwd"
masterauth "passwd"
slaveof 10.48.194.252 6379

redis_slave_6381.conf 配置主要参数如下:

protected-mode noport 6381daemonize yesrequirepass "passwd"masterauth "passwd"slaveof 10.48.194.252 6379
按如下顺序依次启动服务:
redis-server redis_master_6379.conf
redis-server redis_slave_6380.conf
redis-server redis_slave_6381.conf
redis-sentinel sentinel_26379.conf
redis-sentinel sentinel_26479.conf

查看进程是否都已经启动:
ps aux | grep redis | grep -v grep
root 5485 0.0 0.4 135480 9712 ? Ssl Nov01 0:51 redis-server *:6380
root 5491 0.0 0.3 133432 7644 ? Ssl Nov01 0:52 redis-server *:6381
root 6084 0.0 0.3 133432 7668 ? Ssl 01:25 0:08 redis-sentinel *:26379 [sentinel]
root 6088 0.0 0.3 133432 7664 ? Ssl 01:25 0:08 redis-sentinel *:26479 [sentinel]
root 6376 0.3 0.3 133432 7648 ? Ssl 04:44 0:00 redis-server 10.48.194.252:6379
查看master的状态
redis-cli -h 127.0.0.1 -p 6379 -a passwd



查看slave的状态:
redis-cli -h 127.0.0.1 -p 6380 -a passwd




查看sentinel状态:
redis-cli -h 127.0.0.1 -p 26379 -a passwd



验证redis sentinel 主从切换
1、首先关闭 master 服务(6379)


查看哨兵,发现端口号为6380的从服务变成了主服务,sentinel自动完成了故障切换。



再次启动redis-server redis_master_6379.conf
启动刚才被shutdown的6379服务并查看,发现它变成了从服务



80又变成了主



若想手动把从边成主,需要在6379里的配置文件中把slaveof 指向 6380的删除
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis sentinel 主从+ H