Redis哨兵

启用三个redis服务

--默认6379

redis-server

redis-server --port 6380 --slaveof 127.0.0.1 6379

redis-server --port 6381 --slaveof 127.0.0.1 6379

 

redisc-cli -p 6379

info replication

 

redisc-cli -p 6380

info replication

 

redisc-cli -p 6381

info replication

 

创建哨兵配制

mkdir /usr/local/sentinel

vi sentinel.conf

sentinel monitor mymaster 127.0.0.1 6379 1

 

启用哨兵

redis-sentinel  /usr/local/sentinel/sentinel.conf

 

查看进程:

 ps axu|grep redis

kill -QUIT 24000

 

redis-cli -p 26371

SENTINEL masters

SENTINEL get-master-addr-by-name TestMaster 

SENTINEL slaves TestMaster

 

 

 

配制哨兵

三哨兵架构

[root@rocket sentinel]# tree

.

├── redis-cli

├── redis-sentinel

├── redis-server

├── sentinel1

│  ├── sentinel1.conf

│  └── sentinel1.log

├── sentinel2

│  ├── sentinel2.conf

│  └── sentinel2.log

└── sentinel3

    ├── sentinel3.conf

└── sentinel3.log

哨兵一配置sentinel1.conf
 
# Example sentinel.conf

# port <sentinel-port>
port 26371

# 守护进程模式
daemonize yes

# 指明日志文件名
logfile "./sentinel1.log"

# 工作路径,sentinel一般指定/tmp比较简单
dir ./

# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
# slaves是自动发现,所以你没必要明确指定slaves。
sentinel monitor TestMaster 127.0.0.1 7003 1

# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds TestMaster 1500

# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout TestMaster 10000

# 设置master和slaves验证密码
sentinel auth-pass TestMaster 0234kz9*l

sentinel config-epoch TestMaster 15
sentinel leader-epoch TestMaster 8394

# #除了当前哨兵, 还有哪些在监控这个master的哨兵
sentinel known-sentinel TestMaster 127.0.0.1 26372 0aca3a57038e2907c8a07be2b3c0d15171e44da5
sentinel known-sentinel TestMaster 127.0.0.1 26373 ac1ef015411583d4b9f3d81cee830060b2f29862

sentinel current-epoch 8394
 
哨兵二配置sentinel2.conf
 
# Example sentinel.conf

# port <sentinel-port>
port 26372

# 守护进程模式
daemonize yes

# 指明日志文件名
logfile "./sentinel2.log"

# 工作路径,sentinel一般指定/tmp比较简单
dir ./

# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
# slaves是自动发现,所以你没必要明确指定slaves。
sentinel monitor TestMaster 127.0.0.1 7003 1

# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds TestMaster 1500

# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout TestMaster 10000

# 设置master和slaves验证密码
sentinel auth-pass TestMaster 0234kz9*l

sentinel config-epoch TestMaster 15
sentinel leader-epoch TestMaster 8394

# #除了当前哨兵, 还有哪些在监控这个master的哨兵
sentinel known-sentinel TestMaster 127.0.0.1 26371 b780bbc20fdea6d3789637053600c5fc58dd0690
sentinel known-sentinel TestMaster 127.0.0.1 26373 ac1ef015411583d4b9f3d81cee830060b2f29862

sentinel current-epoch 8394
 
哨兵三配置sentinel3.conf
 
# Example sentinel.conf

# port <sentinel-port>
port 26373

# 守护进程模式
daemonize yes

# 指明日志文件名
logfile "./sentinel3.log"

# 工作路径,sentinel一般指定/tmp比较简单
dir ./

# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
# slaves是自动发现,所以你没必要明确指定slaves。
sentinel monitor TestMaster 127.0.0.1 7003 1

# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds TestMaster 1500

# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout TestMaster 10000

# 设置master和slaves验证密码
sentinel auth-pass TestMaster 0234kz9*l

sentinel config-epoch TestMaster 15
sentinel leader-epoch TestMaster 8394

# #除了当前哨兵, 还有哪些在监控这个master的哨兵
sentinel known-sentinel TestMaster 127.0.0.1 26371 b780bbc20fdea6d3789637053600c5fc58dd0690
sentinel known-sentinel TestMaster 127.0.0.1 26372 0aca3a57038e2907c8a07be2b3c0d15171e44da5

sentinel current-epoch 8394
 
在sentinel中查看所监控的master和slave

[root@rocket sentinel]# ./redis-cli -p 26371

127.0.0.1:26371> SENTINEL masters

1)  1) "name"

    2) "TestMaster"

    3) "ip"

    4) "127.0.0.1"

    5) "port"

    6) "7003"

    7) "runid"

    8) "de0896e3799706bda49cb92048776e233841e25d"

    9) "flags"

  10) "master"

127.0.0.1:26371> SENTINEL slaves TestMaster

1)  1) "name"

    2) "127.0.0.1:8003"

    3) "ip"

    4) "127.0.0.1"

    5) "port"

    6) "8003"

    7) "runid"

    8) "9b2a75596c828d6d605cc8529e96edcf951de25d"

    9) "flags"

  10) "slave"

查看当前的master

127.0.0.1:26371> SENTINEL get-master-addr-by-name TestMaster

1) "127.0.0.1"

2) "7003"

停掉master,查看容灾切换情况

[root@rocket master]# ps axu|grep redis

root      24000  0.2  0.9 137356  9556 ?        Ssl  Jan12  0:30 ./redis-server *:7003     

root      24240  0.2  0.7 137356  7504 ?        Ssl  Jan12  0:26 ./redis-server *:8003           

root      24873  0.3  0.7 137356  7524 ?        Ssl  01:31  0:25 ../redis-sentinel *:26371       

root      24971  0.3  0.7 137356  7524 ?        Ssl  01:33  0:25 ../redis-sentinel *:26372       

root      24981  0.3  0.7 137356  7520 ?        Ssl  01:33  0:25 ../redis-sentinel *:26373       

root      24995  0.0  0.5  19404  5080 pts/2    S+  01:34  0:00 ./redis-cli -p 26371

root      25969  0.0  0.0 103252  844 pts/0    S+  03:33  0:00 grep redis

[root@rocket master]# kill -QUIT 24000

再查看master,发现已经master已经切换为原来的slave

127.0.0.1:26371> SENTINEL get-master-addr-by-name TestMaster

1) "127.0.0.1"

2) "8003"

查看sentinel日志

启动原来的master,发现变成了slave

[root@rocket master]# ./redis-server ./redis.conf

127.0.0.1:26371> SENTINEL slaves TestMaster

1)  1) "name"

    2) "127.0.0.1:7003"

    3) "ip"

    4) "127.0.0.1"

    5) "port"

6) "7003"

发现主从发生了对调。

sentinel自动发现

每个Sentinel 都订阅了被它监视的所有主服务器和从服务器的__sentinel__:hello 频道,查找之前未出现过的sentinel(looking for unknown sentinels)。当一个Sentinel 发现一个新的Sentinel 时,它会将新的Sentinel 添加到一个列表中,这个列表保存了Sentinel 已知的,监视同一个主服务器的所有其他Sentinel。

127.0.0.1:7003[1]> SUBSCRIBE __sentinel__:hello

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "__sentinel__:hello"

3) (integer) 1

1) "message"

2) "__sentinel__:hello"

3) "127.0.0.1,26373,7d919ccfb5752caf6812da2d0dba4ed0a528ceda,8436,TestMaster,127.0.0.1,7003,8436"

1) "message"

2) "__sentinel__:hello"

3) "127.0.0.1,26372,9eda79e93e6d1aa4541564ac28e3dc899d39e43b,8436,TestMaster,127.0.0.1,7003,8436"

1) "message"

2) "__sentinel__:hello"

3) "127.0.0.1,26371,8d63bebfbca9e1205a43bc13b52079de6015758e,8436,TestMaster,127.0.0.1,7003,8436"

 

posted on 2016-05-23 14:06  Hudan  阅读(205)  评论(0)    收藏  举报

导航