Redis集群哨兵模式搭建

(1)前言

在日常开发中,保证redis的高可用的稳定性是非常必要的,工作中最常见的redis集群模式就是M-S-S一主两从模式,使之满足主从复制、读写分离。通常M-S-S模式的集群大致可分为一主二仆、薪火相传、反客为主、哨兵等,其中哨兵模式可靠性和稳定性最好,所以在大多公司的redis集群都采取哨兵模式。

(2)简介

哨兵模式(Redis-Sentinel)是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案时,假如master宕机了,redis本身(以及其很多客户端)都没有实现自动进行主备切换,而redis-sentinel本身也是独立运行的进程,可以部署在其他与redis集群可通讯的机器中监控redis集群。

(3)特点

1、不时地监控redis是否按照预期良好地运行;
2、如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
3、能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。
4、哨兵为客户端提供服务发现,客户端链接哨兵,哨兵提供当前master的地址然后提供服务,如果出现切换,也就是master挂了,哨兵会提供客户端一个新地址。

(4)伪集群搭建

LZ电脑配置受限,不能一次开三个虚拟机,所以只能在一台机器上模拟,伪集群实在就是其多个redis进程,保证其端口不互相冲突即可,这里我们就以端口7001、8001、9001为例

先看一看LZ的redis安装目录(/usr/local/redis)


2017-11-03_162535.png
4.1 redis安装

4.2 创建配置文件

我们在/user/local/redis下创建一个集群配置相关的目录lvfangRedis,并复制redis.conf配置文件7001.conf、8001.conf、9001.conf

2017-11-03_165108.png
4.3 修改配置

分别修改7001.conf、8001.conf、9001.conf配置中的

7001.conf

bind 0.0.0.0
daemonize yes
pidfile /var/run/redis_7001.pid
logfile "7001.log"
dbfilename 7001dump.rdb
其他默认... ...

8001.conf

bind 0.0.0.0
daemonize yes
pidfile /var/run/redis_8001.pid
logfile "8001.log"
dbfilename 8001dump.rdb
其他默认... ...

9001.conf

bind 0.0.0.0
daemonize yes
pidfile /var/run/redis_9001.pid
logfile "9001.log"
dbfilename 9001dump.rdb
其他默认... ...
4.4 添加哨兵配置

创建文件 sentinel.conf ,并添加内容: sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 7001 1

#创建哨兵配置文件
touch sentinel.conf

#写入内容
sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 7001 1
2017-11-03_180451.png
4.5 启动各个节点redis进程
#启动redis后台进程
[root@hadoop bin]# ./redis-server ../lvfangRedis/7001.conf
[root@hadoop bin]# ./redis-server ../lvfangRedis/8001.conf
[root@hadoop bin]# ./redis-server ../lvfangRedis/9001.conf

#启动redis终端进程
[root@hadoop bin]# ./redis-cli -p 7001
[root@hadoop bin]# ./redis-cli -p 8001
[root@hadoop bin]# ./redis-cli -p 9001

#查看各个终端集群角色信息
info  replication
1.png
2.png
3.png
4.png

我们可以发现,现在每一个节点的redis进程的角色的是master角色,接下来我们应该执行哨兵配置调整角色

4.6 启动各个节点redis进程

启动哨兵配置

./redis-sentinel ../lvfangRedis/sentinel.conf
2017-11-03_184606.png
4.7 分配角色

将8001和9001节点的redis均设置为7001的子节点

#设置8001
127.0.0.1:8001> slaveof 127.0.0.1 7001
OK
127.0.0.1:8001>


#设置9001
127.0.0.1:9001> slaveof 127.0.0.1 7001
OK
127.0.0.1:9001>

设置完成后 ,我们会发现在启动sentinel哨兵配置文件的终端窗口分别打印节点入队信息

2782:X 03 Nov 19:39:43.305 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2782:X 03 Nov 19:39:43.314 # Sentinel ID is f59f5f574aee944c983ce19b8b2d0162d2c476e4
2782:X 03 Nov 19:39:43.314 # +monitor master ARF 127.0.0.1 7001 quorum 1
2782:X 03 Nov 19:44:04.274 * +slave slave 127.0.0.1:8001 127.0.0.1 8001 @ ARF 127.0.0.1 7001
2782:X 03 Nov 19:44:24.373 * +slave slave 127.0.0.1:9001 127.0.0.1 9001 @ ARF 127.0.0.1 7001
2017-11-03_185011.png
4.8 查看角色

在三个终端分别键入 info replication查看对应节点所在集群的角色,这时候我们发现8001和9001的角色已经变味slave,而master则还是7001.

7001日志信息

127.0.0.1:7001> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=8001,state=online,offset=33031,lag=0
slave1:ip=127.0.0.1,port=9001,state=online,offset=33031,lag=1
master_repl_offset:33031
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:33030
127.0.0.1:7001>

8001日志信息

127.0.0.1:8001> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:7001
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:28055
slave_priority:100
slave_read_only:1
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
127.0.0.1:8001>

9001日志信息

127.0.0.1:9001> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:7001
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:28979
slave_priority:100
slave_read_only:1
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
127.0.0.1:9001>
2017-11-03_185733.png
4.9 测试主从复制 读写分离

在7001主节点上写,看看是否可以在8001和9001上读取

分别在8001和9001上写,看看有没有写的权限

2017-11-03_190121.png

测试ok,过

4.10 测试高可用

模拟master节点突然down机,看看是否会选举出新的master节点进行集群工作

shutdown 7001看看哨兵日志,并查看8001和9001的角色


2017-11-03_190440.png

哨兵日志

2782:X 03 Nov 19:39:43.305 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2782:X 03 Nov 19:39:43.314 # Sentinel ID is f59f5f574aee944c983ce19b8b2d0162d2c476e4
2782:X 03 Nov 19:39:43.314 # +monitor master ARF 127.0.0.1 7001 quorum 1
2782:X 03 Nov 19:44:04.274 * +slave slave 127.0.0.1:8001 127.0.0.1 8001 @ ARF 127.0.0.1 7001
2782:X 03 Nov 19:44:24.373 * +slave slave 127.0.0.1:9001 127.0.0.1 9001 @ ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:16.408 # +sdown master ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:16.409 # +odown master ARF 127.0.0.1 7001 #quorum 1/1
2782:X 03 Nov 20:03:16.409 # +new-epoch 1
2782:X 03 Nov 20:03:16.409 # +try-failover master ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:16.411 # +vote-for-leader f59f5f574aee944c983ce19b8b2d0162d2c476e4 1
2782:X 03 Nov 20:03:16.411 # +elected-leader master ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:16.411 # +failover-state-select-slave master ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:16.511 # +selected-slave slave 127.0.0.1:9001 127.0.0.1 9001 @ ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:16.511 * +failover-state-send-slaveof-noone slave 127.0.0.1:9001 127.0.0.1 9001 @ ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:16.569 * +failover-state-wait-promotion slave 127.0.0.1:9001 127.0.0.1 9001 @ ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:17.137 # +promoted-slave slave 127.0.0.1:9001 127.0.0.1 9001 @ ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:17.137 # +failover-state-reconf-slaves master ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:17.199 * +slave-reconf-sent slave 127.0.0.1:8001 127.0.0.1 8001 @ ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:17.663 * +slave-reconf-inprog slave 127.0.0.1:8001 127.0.0.1 8001 @ ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:17.663 * +slave-reconf-done slave 127.0.0.1:8001 127.0.0.1 8001 @ ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:17.734 # +failover-end master ARF 127.0.0.1 7001
2782:X 03 Nov 20:03:17.734 # +switch-master ARF 127.0.0.1 7001 127.0.0.1 9001
2782:X 03 Nov 20:03:17.734 * +slave slave 127.0.0.1:8001 127.0.0.1 8001 @ ARF 127.0.0.1 9001
2782:X 03 Nov 20:03:17.734 * +slave slave 127.0.0.1:7001 127.0.0.1 7001 @ ARF 127.0.0.1 9001
2782:X 03 Nov 20:03:47.799 # +sdown slave 127.0.0.1:7001 127.0.0.1 7001 @ ARF 127.0.0.1 9001
2017-11-03_190624.png

8001角色 9001角色

######8001#######
127.0.0.1:8001> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:9001
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:13630
slave_priority:100
slave_read_only:1
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
127.0.0.1:8001>

######9001#######
127.0.0.1:9001> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=8001,state=online,offset=14540,lag=0
master_repl_offset:14540
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:14539
127.0.0.1:9001>
2017-11-03_190956.png

我们可以看到当前集群的节点只剩8001和9001,而且9001充当的master角色,并且主从复制 读写分离正常。

4.11 测试down机节点再次进入

我们此时在此加入7001节点,再看主从角色会不会有所改变

7001日志

[root@hadoop bin]# ./redis-server ../lvfangRedis/7001.conf
[root@hadoop bin]# ./redis-cli -p 7001
127.0.0.1:7001> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:9001
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:35278
slave_priority:100
slave_read_only:1
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
127.0.0.1:7001>

此时我们发现7001再次加入后扮演slave角色,而9001确定了master角色,并且在哨兵日志中也有加入日志

2017-11-03_191452.png

以上就是我们redis集群的哨兵模式环境搭建

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容