十八、Redis进阶-实战Redis哨兵模式配置的实现

作者: 温新

分类: 【Redis】

阅读: 3030

时间: 2020-09-05 16:28:28

实现的实现是基于主从复制的,因此要实现哨兵就先实现主从复制。关于主从复制已有记录文章,本篇文章实现哨兵是基于十六、Redis进阶-Redis主从复制一主多从一步一步实现,因此还没有实现主从复制,就先赶紧对着主从复制的文章来实现吧。

哨兵建议配置为奇数。

步骤一:配置并开启主从复制

此步骤省略,详情请参考十六、Redis进阶-Redis主从复制一主多从一步一步实现

步骤二:使用配置文件配置哨兵

1)准备工作

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 切换到redis解压好的redis目录</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">[root@192 redis_sentinel_conf]<span style="box-sizing: border-box;color: rgb(103, 110, 149)"># cd /usr/local/src/redis-6.0.6</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 创建配置文件哨兵目录</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">[root@192 redis-6.0.6]<span style="box-sizing: border-box;color: rgb(103, 110, 149)"># mkdir /usr/local/bin/redis_sentinel_conf</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 复制默认的哨兵文件到目录</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">[root@192 redis-6.0.6]<span style="box-sizing: border-box;color: rgb(103, 110, 149)"># cp ./sentinel.conf /usr/local/bin/redis_sentinel_conf/sentinel_6379.conf</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">[root@192 redis-6.0.6]<span style="box-sizing: border-box;color: rgb(103, 110, 149)"># cd /usr/local/bin/redis_sentinel_conf/</span></span>

2)编辑26379哨兵配置文件

<span style="box-sizing: border-box;padding-right: 0.1px">[root@192 redis_sentinel_conf]<span style="box-sizing: border-box;color: rgb(103, 110, 149)"># pwd</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">/usr/local/bin/redis_sentinel_conf</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">[root@192 redis_sentinel_conf]<span style="box-sizing: border-box;color: rgb(103, 110, 149)"># vim sentinel_6379.conf</span></span>

26379配置文件

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 端口</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">port <span style="box-sizing: border-box;color: rgb(255, 83, 112)">26379</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 是否守护进程启动</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">daemonize no</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 工作目录</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">dir /tmp</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 声明该哨兵的主库是mymaster,主库的ip和端口分别是127.0.0.1 和 6379</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 最后一个2的含义是:当哨兵发生领导选举时,需要2个哨兵通过才行</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">sentinel monitor mymaster <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">6379</span> <span style="box-sizing: border-box;color: rgb(255, 83, 112)">2</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 在mymaster宕机30秒后进行主观下线</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">sentinel down-after-milliseconds mymaster <span style="box-sizing: border-box;color: rgb(255, 83, 112)">30000</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 指定在发生failover故障转移时最多可以有1个slave同时对新的master进行同步</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">sentinel parallel-syncs mymaster <span style="box-sizing: border-box;color: rgb(255, 83, 112)">1</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 设置故障转移超时时间为180秒</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">sentinel failover-timeout mymaster <span style="box-sizing: border-box;color: rgb(255, 83, 112)">180000</span></span>

3)复制entinel_6379.conf配置文件为 entinel_6380.conf、entinel_6381.conf并修改对应的端口为26380、26381

<span style="box-sizing: border-box;padding-right: 0.1px">[root@192 redis_sentinel_conf]<span style="box-sizing: border-box;color: rgb(103, 110, 149)"># cp sentinel_6379.conf ./sentinel_6380.conf  </span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">[root@192 redis_sentinel_conf]<span style="box-sizing: border-box;color: rgb(103, 110, 149)"># cp sentinel_6379.conf ./sentinel_6381.conf </span></span>

步骤三:启动配置好的三个哨兵服务

1)启动26379服务并连接





此处省略些信息

客户端使用26379端口连接哨兵服务器







此处省略些信息






此处省略些信息

查看26379配置文件

<span style="box-sizing: border-box;padding-right: 0.1px">此处省略些信息</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">sentinel config-epoch mymaster <span style="box-sizing: border-box;color: rgb(255, 83, 112)">0</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># Generated by CONFIG REWRITE</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">protected-mode no</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">user default on nopass ~* <span style="box-sizing: border-box;color: rgb(137, 221, 255)">+</span>@all</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">sentinel leader-epoch mymaster <span style="box-sizing: border-box;color: rgb(255, 83, 112)">0</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">sentinel known-replica mymaster <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">6381</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">sentinel known-replica mymaster <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">6380</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">sentinel current-epoch <span style="box-sizing: border-box;color: rgb(255, 83, 112)">0</span></span>

可以看到配置文件已经发生改变

2)启动26380哨兵







此处省略些信息

查看26379服务,已经多了2个配置

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">1560</span>:X <span style="box-sizing: border-box;color: rgb(255, 83, 112)">06</span> Sep <span style="box-sizing: border-box;color: rgb(255, 83, 112)">2020</span> <span style="box-sizing: border-box;color: rgb(255, 83, 112)">07</span>:55:58.876 * <span style="box-sizing: border-box;color: rgb(137, 221, 255)">+</span>slave slave <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6380 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">6380</span> @ mymaster <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">6379</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">1560</span>:X <span style="box-sizing: border-box;color: rgb(255, 83, 112)">06</span> Sep <span style="box-sizing: border-box;color: rgb(255, 83, 112)">2020</span> <span style="box-sizing: border-box;color: rgb(255, 83, 112)">07</span>:55:58.877 * <span style="box-sizing: border-box;color: rgb(137, 221, 255)">+</span>slave slave <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6381 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">6381</span> @ mymaster <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">6379</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">1560</span>:X <span style="box-sizing: border-box;color: rgb(255, 83, 112)">06</span> Sep <span style="box-sizing: border-box;color: rgb(255, 83, 112)">2020</span> <span style="box-sizing: border-box;color: rgb(255, 83, 112)">07</span>:58:59.633 * <span style="box-sizing: border-box;color: rgb(137, 221, 255)">+</span>fix-slave-config slave <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6380 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">6380</span> @ mymaster <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">6379</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">1560</span>:X <span style="box-sizing: border-box;color: rgb(255, 83, 112)">06</span> Sep <span style="box-sizing: border-box;color: rgb(255, 83, 112)">2020</span> <span style="box-sizing: border-box;color: rgb(255, 83, 112)">07</span>:58:59.633 * <span style="box-sizing: border-box;color: rgb(137, 221, 255)">+</span>fix-slave-config slave <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6381 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">6381</span> @ mymaster <span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1 <span style="box-sizing: border-box;color: rgb(255, 83, 112)">6379</span></span>

3)启动26381哨兵服务






此处省略些信息

步骤四:实战测试

1)6379主服务器中写入一条数据

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6379> <span style="box-sizing: border-box;color: rgb(199, 146, 234)">set</span> ziruchu hello</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">OK</span>

2)6380、6381从服务器中读取

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6380> <span style="box-sizing: border-box;color: rgb(255, 203, 107)">get</span> ziruchu</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(195, 232, 141)">"hello"</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6381> <span style="box-sizing: border-box;color: rgb(255, 203, 107)">get</span> ziruchu</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(195, 232, 141)">"hello"</span></span>

3)宕机6379主服务器

由于6379主服务并没有使用守护进程启动,因此直接使用Ctrl+c断开服务

4)查看随意一个哨兵

此处省略些信息

5)6381服务器中设置一个值,然后从服务器查看

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(103, 110, 149)"># 主</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6381> <span style="box-sizing: border-box;color: rgb(199, 146, 234)">set</span> name6381 ziruchu</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">OK</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6380> <span style="box-sizing: border-box;color: rgb(255, 203, 107)">get</span> name6381</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(195, 232, 141)">"ziruchu"</span></span>

6)重新启动6379服务并使用客户端连接

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 83, 112)">127</span>.0.0.1:6379> <span style="box-sizing: border-box;color: rgb(255, 203, 107)">get</span> name6381</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(195, 232, 141)">"ziruchu"</span></span>

到这里,哨兵配置完成,下一篇将对哨兵原理进行记录。

我是夕阳何处寻,期待和优秀的你一起同行!

小白

2020年09月06日

请登录后再评论