码迷,mamicode.com
首页 > 其他好文 > 详细

Redis-哨兵机制,实现高可用

时间:2017-12-11 15:08:11      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:redis-哨兵机制实现高可用

概述

Redis哨兵为Redis提供了高可用性。实际上这意味着你可以使用哨兵模式创建一个可以不用人为干预而应对各种故障的Redis部署。

哨兵模式还提供了其他的附加功能,如监控,通知,为客户端提供配置。

下面是在宏观层面上哨兵模式的功能列表:

  • :哨兵不断的检查master和slave是否正常的运行。

  • 通知:当监控的某台Redis实例发生问题时,可以通过API通知系统管理员和其他的应用程序。

  • 自动故障转移:如果一个master不正常运行了,哨兵可以启动一个故障转移进程,将一个slave升级成为master,其他的slave被重新配置使用新的master,并且应用程序使用Redis服务端通知的新地址。

  • 配置提供者:哨兵作为Redis客户端发现的权威来源:客户端连接到哨兵请求当前可靠的master的地址。如果发生故障,哨兵将报告新地址。


IP划分:

10.0.0.140 redis-Master

10.0.0.141 redis-Slave1

10.0.0.142 redis-Slave2


拓扑图:

技术分享图片



操作过程:

三台安装配置过程一样

1.安装依赖包

[root@redis-Master?~]#?yum?install?gcc?gcc-c++?-y


2.下载安装包,解压

[root@redis-Master?~]#?cd?/usr/local/src/
[root@redis-Master?src]#?wget?http://download.redis.io/releases/redis-4.0.1.tar.gz
[root@redis-Master?src]#?tar?-zxvf?redis-4.0.1.tar.gz


3创建redis用户和目录

[root@redis-Master?~]#?useradd?redis
[root@redis-Master?~]#?mkdir?/usr/local/redis


4.将解压的redis移动到刚创建的目录,并赋予权限

[root@redis-Master?~]#?cd?/usr/local/src/
[root@redis-Master?src]#?mv?redis-4.0.1/*?/usr/local/redis
[root@redis-Master?src]#?chown?-R?redis:redis?/usr/local/redis


5.编译

[root@redis-Master?~]#?cd?/usr/local/redis/
[root@redis-Master?redis]#?make?MALLOC=libc
[root@redis-Master?redis]#?make?&&?make?install


6.编辑配置文件

[root@redis-Master ~]# vim /usr/local/redis/redis.conf?


daemonize?yes????#默认no,该参数用于定制redis服务是否以守护模式进行
protected-mode?no???#保护模式是否开启
bind?10.0.0.140?#本机ip
logfile?"/var/log/redis/redis.log"???#日志存放位置
dir?/usr/local/redis/rdb???#数据存放位置
supervised?systemd????#systemd?是一个类似?supervise?的守护进程,用于管理需要后台运行的服务。



7.创建配置文件所需的目录,并重新赋权

[root@redis-Master?~]#?mkdir?/usr/local/redis/rdb
[root@redis-Master?~]#?chown?-R?redis:redis?/usr/local/redis/
[root@redis-Master?~]#?mkdir?/var/log/redis
[root@redis-Master?~]#?chown?-R?redis:redis?/var/log/redis


8.创建启动脚本,跟脚本执行权限

[root@redis-Master ~]# cat /usr/lib/systemd/system/redis.service

[Unit]
Description=Redis?persistent?key-value?database
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/redis/src/redis-server?/usr/local/redis/redis.conf?--daemonize?no
ExecStop=/usr/local/redis/src/redis-cli?-h?10.0.0.140?-p?6379?shutdown
Restart=always
[Install]
WantedBy=multi-user.target

[root@redis-Master ~]# chmod 750 /usr/lib/systemd/system/redis.service


9.启动测试

[root@redis-Master ~]#?systemctl enable redis.service

[root@redis-Master ~]# systemctl start redis.service

[root@redis-Master ~]# systemctl status redis.service

●?redis.service?-?Redis?persistent?key-value?database
???Loaded:?loaded?(/usr/lib/systemd/system/redis.service;?enabled;?vendor?preset:?disabled)
???Active:?active?(running)?since?一?2017-12-11?13:10:01?CST;?5s?ago
?Main?PID:?4514?(redis-server)
???CGroup:?/system.slice/redis.service
???????????└─4514?/usr/local/redis/src/redis-server?10.0.0.140:6379
12月?11?13:10:01?redis-Master?systemd[1]:?Started?Redis?persistent?key-value?database.
12月?11?13:10:01?redis-Master?systemd[1]:?Starting?Redis?persistent?key-value?database...


三台都要配置哨兵

1.先配置主从(10.0.0.140是Master),另外两台为Slave,

Slave配置如下

[root@redis-Slave1?~]#?vim?/usr/local/redis/redis.conf?
slaveof?10.0.0.140?6379
[root@redis-Slave2?~]#?vim?/usr/local/redis/redis.conf?
slaveof?10.0.0.140?6379


2.配置哨兵(只改IP)

[root@redis-Master~]# vim /usr/local/redis/sentinel.conf?

sentinel?monitor?mymaster?10.0.0.140?6379?2?#(只改IP)
protected-mode?no


配置完Redis和Sentinel之后,按顺序启动各个角色。启动顺序如下:

Master->Slave->Sentinel,要确保按照这个顺序依次启动。

Sentinel的启动命令和Redis类似。


测试:

[root@redis-Master ~]# cd /usr/local/redis/

[root@redis-Master redis]# redis-sentinel sentinel.conf?

4559:X?11?Dec?13:26:34.859?#?oO0OoO0OoO0Oo?Redis?is?starting?oO0OoO0OoO0Oo
4559:X?11?Dec?13:26:34.859?#?Redis?version=4.0.1,?bits=64,?commit=00000000,?modified=0,?pid=4559,?just?started
4559:X?11?Dec?13:26:34.859?#?Configuration?loaded
4559:X?11?Dec?13:26:34.860?*?Increased?maximum?number?of?open?files?to?10032?(it?was?originally?set?to?1024).
????????????????_._??????????????????????????????????????????????????
???????????_.-``__?‘‘-._?????????????????????????????????????????????
??????_.-``????`.??`_.??‘‘-._???????????Redis?4.0.1?(00000000/0)?64?bit
??.-``?.-```.??```\/????_.,_?‘‘-._???????????????????????????????????
?(????‘??????,???????.-`??|?`,????)?????Running?in?sentinel?mode
?|`-._`-...-`?__...-.``-._|‘`?_.-‘|?????Port:?26379
?|????`-._???`._????/?????_.-‘????|?????PID:?4559
??`-._????`-._??`-./??_.-‘????_.-‘???????????????????????????????????
?|`-._`-._????`-.__.-‘????_.-‘_.-‘|??????????????????????????????????
?|????`-._`-._????????_.-‘_.-‘????|???????????http://redis.io????????
??`-._????`-._`-.__.-‘_.-‘????_.-‘???????????????????????????????????
?|`-._`-._????`-.__.-‘????_.-‘_.-‘|??????????????????????????????????
?|????`-._`-._????????_.-‘_.-‘????|??????????????????????????????????
??`-._????`-._`-.__.-‘_.-‘????_.-‘???????????????????????????????????
??????`-._????`-.__.-‘????_.-‘???????????????????????????????????????
??????????`-._????????_.-‘???????????????????????????????????????????
??????????????`-.__.-‘???????????????????????????????????????????????
4559:X?11?Dec?13:26:34.862?#?WARNING:?The?TCP?backlog?setting?of?511?cannot?be?enforced?because?/proc/sys/net/core/somaxconn?is?set?to?the?lower?value?of?128.
4559:X?11?Dec?13:26:34.863?#?Sentinel?ID?is?33890665f4d321bbf024646efdd169a16713e953
4559:X?11?Dec?13:26:34.863?#?+monitor?master?mymaster?10.0.0.140?6379?quorum?2
4559:X?11?Dec?13:26:34.864?*?+slave?slave?10.0.0.141:6379?10.0.0.141?6379?@?mymaster?10.0.0.140?6379
4559:X?11?Dec?13:26:34.865?*?+slave?slave?10.0.0.142:6379?10.0.0.142?6379?@?mymaster?10.0.0.140?6379
4559:X?11?Dec?13:27:01.069?*?+sentinel?sentinel?8583cec1a7634843d0141f9a7e00e5ee5f0b4293?10.0.0.141?26379?@?mymaster?10.0.0.140?6379
4559:X?11?Dec?13:27:12.489?*?+sentinel?sentinel?715f518a156837119ddf282b86b4fae992b4602c?10.0.0.142?26379?@?mymaster?10.0.0.140?6379


以客户端方式查看主从

[root@redis-Slave2?~]#?cd?/usr/local/redis/
[root@redis-Slave2?redis]#?src/redis-cli?-h?10.0.0.140?-p?26379?INFO?Sentinel
#?Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.0.0.140:6379,slaves=2,sentinels=3


模拟故障将Master,down

技术分享图片


哨兵模式会自动切换Master

[root@redis-Slave1 redis]# src/redis-sentinel sentinel.conf?

14157:X?11?Dec?13:26:59.038?#?oO0OoO0OoO0Oo?Redis?is?starting?oO0OoO0OoO0Oo
14157:X?11?Dec?13:26:59.038?#?Redis?version=4.0.1,?bits=64,?commit=00000000,?modified=0,?pid=14157,?just?started
14157:X?11?Dec?13:26:59.038?#?Configuration?loaded
14157:X?11?Dec?13:26:59.039?*?Increased?maximum?number?of?open?files?to?10032?(it?was?originally?set?to?1024).
????????????????_._??????????????????????????????????????????????????
???????????_.-``__?‘‘-._?????????????????????????????????????????????
??????_.-``????`.??`_.??‘‘-._???????????Redis?4.0.1?(00000000/0)?64?bit
??.-``?.-```.??```\/????_.,_?‘‘-._???????????????????????????????????
?(????‘??????,???????.-`??|?`,????)?????Running?in?sentinel?mode
?|`-._`-...-`?__...-.``-._|‘`?_.-‘|?????Port:?26379
?|????`-._???`._????/?????_.-‘????|?????PID:?14157
??`-._????`-._??`-./??_.-‘????_.-‘???????????????????????????????????
?|`-._`-._????`-.__.-‘????_.-‘_.-‘|??????????????????????????????????
?|????`-._`-._????????_.-‘_.-‘????|???????????http://redis.io????????
??`-._????`-._`-.__.-‘_.-‘????_.-‘???????????????????????????????????
?|`-._`-._????`-.__.-‘????_.-‘_.-‘|??????????????????????????????????
?|????`-._`-._????????_.-‘_.-‘????|??????????????????????????????????
??`-._????`-._`-.__.-‘_.-‘????_.-‘???????????????????????????????????
??????`-._????`-.__.-‘????_.-‘???????????????????????????????????????
??????????`-._????????_.-‘???????????????????????????????????????????
??????????????`-.__.-‘???????????????????????????????????????????????
14157:X?11?Dec?13:26:59.041?#?WARNING:?The?TCP?backlog?setting?of?511?cannot?be?enforced?because?/proc/sys/net/core/somaxconn?is?set?to?the?lower?value?of?128.
14157:X?11?Dec?13:26:59.042?#?Sentinel?ID?is?8583cec1a7634843d0141f9a7e00e5ee5f0b4293
14157:X?11?Dec?13:26:59.042?#?+monitor?master?mymaster?10.0.0.140?6379?quorum?2
14157:X?11?Dec?13:26:59.043?*?+slave?slave?10.0.0.141:6379?10.0.0.141?6379?@?mymaster?10.0.0.140?6379
14157:X?11?Dec?13:26:59.044?*?+slave?slave?10.0.0.142:6379?10.0.0.142?6379?@?mymaster?10.0.0.140?6379
14157:X?11?Dec?13:26:59.359?*?+sentinel?sentinel?33890665f4d321bbf024646efdd169a16713e953?10.0.0.140?26379?@?mymaster?10.0.0.140?6379
14157:X?11?Dec?13:27:12.474?*?+sentinel?sentinel?715f518a156837119ddf282b86b4fae992b4602c?10.0.0.142?26379?@?mymaster?10.0.0.140?6379
14157:X?11?Dec?13:31:43.607?#?+sdown?master?mymaster?10.0.0.140?6379
14157:X?11?Dec?13:31:43.607?#?+sdown?sentinel?33890665f4d321bbf024646efdd169a16713e953?10.0.0.140?26379?@?mymaster?10.0.0.140?6379
14157:X?11?Dec?13:31:48.835?#?+new-epoch?1
14157:X?11?Dec?13:31:50.877?#?+vote-for-leader?715f518a156837119ddf282b86b4fae992b4602c?1
14157:X?11?Dec?13:31:50.877?#?+tilt?#tilt?mode?entered
14157:X?11?Dec?13:32:20.887?#?-tilt?#tilt?mode?exited
14157:X?11?Dec?13:32:20.887?#?+odown?master?mymaster?10.0.0.140?6379?#quorum?2/2
14157:X?11?Dec?13:32:20.887?#?Next?failover?delay:?I?will?not?start?a?failover?before?Mon?Dec?11?13:37:51?2017
14157:X?11?Dec?13:32:21.759?#?+config-update-from?sentinel?715f518a156837119ddf282b86b4fae992b4602c?10.0.0.142?26379?@?mymaster?10.0.0.140?6379
14157:X?11?Dec?13:32:21.759?#?+switch-master?mymaster?10.0.0.140?6379?10.0.0.142?6379
14157:X?11?Dec?13:32:21.760?*?+slave?slave?10.0.0.141:6379?10.0.0.141?6379?@?mymaster?10.0.0.142?6379
14157:X?11?Dec?13:32:21.760?*?+slave?slave?10.0.0.140:6379?10.0.0.140?6379?@?mymaster?10.0.0.142?6379


以客户端方式查看主从,实现了Master的自动切换

[root@redis-Slave2?redis]#?src/redis-cli?-h?10.0.0.142?-p?26379?INFO?Sentinel
#?Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.0.0.142:6379,slaves=2,sentinels=3



Redis-哨兵机制,实现高可用

标签:redis-哨兵机制实现高可用

原文地址:http://blog.51cto.com/1767340368/2049341

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!