Redis 哨兵安装-Centos

Redis官网
Redis中文网
Redis 命令参考

由于机器有限,所以接下来的教程都是在一台虚拟机中进行部署安装.

Redis哨兵高可用架构

sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点,当redis的主节点发生变化,哨兵会第一时间感知到,并且将新的redis主节点通知给client端(这里面redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息)

搭建主从

参考上篇 Redis 主从安装-Centos文章,先搭建Redis主从

搭建哨兵

因为电脑配置有限,我这里使用一台服务器,分三个端口进行演示,由于是演示就不配置额外的参数。

其中6379 端口作为默认主节点,6380和6381端口作为slave节点。

创建Sentinel 端口号26379

  1. 创建目录和配置文件
$ mkdir -p /usr/local/sentinel/26379
$ vim /usr/local/sentinel/26379/sentinel.conf
  1. 编辑sentinel.conf内容如下
# 端口
port 26379
# 是否后台运行
daemonize yes
# 禁止保护模式
protected-mode no
pidfile /usr/local/sentinel/26379/sentinel.pid
# 配置目录
dir "/usr/local/sentinel/26379"
# 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,host代表监控的主服务器(需要使用真实ip,不然客户端在连接时会连接本地),6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 192.168.0.138 6379 2
# sentinel author-pass 定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
sentinel auth-pass mymaster soft01

创建Sentinel 端口号26380

  1. 创建目录和配置文件
$ mkdir -p /usr/local/sentinel/26380
$ vim /usr/local/sentinel/26380/sentinel.conf
  1. 编辑sentinel.conf内容如下
# 端口
port 26380
# 是否后台运行
daemonize yes
# 禁止保护模式
protected-mode no
pidfile /usr/local/sentinel/26380/sentinel.pid
# 配置目录
dir "/usr/local/sentinel/26380"
# 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,host代表监控的主服务器(需要使用真实ip,不然客户端在连接时会连接本地),6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 192.168.0.138 6379 2
# sentinel author-pass 定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
sentinel auth-pass mymaster soft01

创建Sentinel 端口号26381

  1. 创建目录和配置文件
$ mkdir -p /usr/local/sentinel/26381
$ vim /usr/local/sentinel/26381/sentinel.conf
  1. 编辑sentinel.conf内容如下
# 端口
port 26381
# 是否后台运行
daemonize yes
# 禁止保护模式
protected-mode no
pidfile /usr/local/sentinel/26381/sentinel.pid
# 配置目录
dir "/usr/local/sentinel/26381"
# 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,host代表监控的主服务器(需要使用真实ip,不然客户端在连接时会连接本地),6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 192.168.0.138 6379 2
# sentinel author-pass 定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
sentinel auth-pass mymaster soft01

启动Sentinel

  1. 先启动redis主从(下面是我搭建的主从)
# 启动主服务
$ /usr/local/redis/bin/redis-server /usr/local/master-slave/6379/redis.conf
# 启动从服务
$ /usr/local/redis/bin/redis-server /usr/local/master-slave/6380/redis.conf
$ /usr/local/redis/bin/redis-server /usr/local/master-slave/6381/redis.conf$ ps -ef | grep redis
root       9673      1  0 00:23 ?        00:00:06 /usr/local/redis/bin/redis-server *:6379
root      30195      1  0 10月18 ?      00:00:08 /usr/local/redis/bin/redis-server *:6380
root     130775      1  0 00:21 ?        00:00:06 /usr/local/redis/bin/redis-server *:6381
  1. 分别启动哨兵
$ /usr/local/redis/bin/redis-sentinel /usr/local/sentinel/26379/sentinel.conf
$ /usr/local/redis/bin/redis-sentinel /usr/local/sentinel/26380/sentinel.conf
$ /usr/local/redis/bin/redis-sentinel /usr/local/sentinel/26381/sentinel.conf$ ps -ef | grep sentinel
root     116864      1  0 01:30 ?        00:00:00 /usr/local/redis/bin/redis-sentinel *:26379 [sentinel]
root     119538      1  0 01:30 ?        00:00:00 /usr/local/redis/bin/redis-sentinel *:26380 [sentinel]
root     119765      1  0 01:31 ?        00:00:00 /usr/local/redis/bin/redis-sentinel *:26381 [sentinel]

启动sentinel的方式:

# 方式一
$ ./redis-sentinel sentinel.conf
# 方式二
$ ./redis-server sentinel.conf --sentinel

查看Redis信息

  1. 查看redis服务的信息:
$ /usr/local/redis/bin/redis-cli -p 6379 -a soft01
127.0.0.1:6379> info
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.0.138,port=6380,state=online,offset=219732,lag=1
slave1:ip=192.168.0.138,port=6381,state=online,offset=219873,lag=0
master_replid:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:219873
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:219873$ /usr/local/redis/bin/redis-cli -p 6380 -a soft01
127.0.0.1:6380> info
# Replication
role:slave
master_host:192.168.0.138
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:227684
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:227684
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:227684$ /usr/local/redis/bin/redis-cli -p 6381 -a soft01
127.0.0.1:6381> info
# Replication
role:slave
master_host:192.168.0.138
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:236482
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:236482
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:236482
  1. 查看哨兵配置文件变更信息:
$ less /usr/local/sentinel/26379/sentinel.conf
sentinel myid 511958e1eac946e44dfb00a4a97764137839d8b2 #唯一标识
sentinel deny-scripts-reconfig yes
# Generated by CONFIG REWRITE
sentinel monitor mymaster 192.168.0.138 6379 2
sentinel auth-pass mymaster soft01
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 192.168.0.138 6381 # 监控到的从节点
sentinel known-replica mymaster 192.168.0.138 6380 # 监控到的从节点
sentinel known-sentinel mymaster 192.168.0.138 26380 e2dbf2594ddbef6088001be07f4a9651c18260a6 # 感知到的sentinel节点
sentinel known-sentinel mymaster 192.168.0.138 26381 8dd9dfd6d1a4234ee3d25a250f61cfd1fece419e # 感知到的sentinel节点
sentinel current-epoch 0$ less /usr/local/sentinel/26380/sentinel.conf
sentinel myid e2dbf2594ddbef6088001be07f4a9651c18260a6
sentinel deny-scripts-reconfig yes
# Generated by CONFIG REWRITE
sentinel monitor mymaster 192.168.0.138 6379 2
sentinel auth-pass mymaster soft01
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 192.168.0.138 6381
sentinel known-replica mymaster 192.168.0.138 6380
sentinel known-sentinel mymaster 192.168.0.138 26381 8dd9dfd6d1a4234ee3d25a250f61cfd1fece419e
sentinel known-sentinel mymaster 192.168.0.138 26379 511958e1eac946e44dfb00a4a97764137839d8b2
sentinel current-epoch 0$ less /usr/local/sentinel/26381/sentinel.conf
sentinel myid 8dd9dfd6d1a4234ee3d25a250f61cfd1fece419e
sentinel deny-scripts-reconfig yes
# Generated by CONFIG REWRITE
sentinel monitor mymaster 192.168.0.138 6379 2
sentinel auth-pass mymaster soft01
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 192.168.0.138 6380
sentinel known-replica mymaster 192.168.0.138 6381
sentinel known-sentinel mymaster 192.168.0.138 26380 e2dbf2594ddbef6088001be07f4a9651c18260a6
sentinel known-sentinel mymaster 192.168.0.138 26379 511958e1eac946e44dfb00a4a97764137839d8b2
sentinel current-epoch 0

由此可知,6379是Redis的主节点,6380和6381是从节点。

主节点故障测试

kill主节点

# 9673 是主节点的pid
$ kill -9 9673

正常启动主从和哨兵后,根据配置文件我们知道,6379端口号对应的redis是主节点,我们现在将主节点杀掉。

查看redis服务信息

首先查看sentinel(26379、26380、26381)配置文件,发现它们都修改了监控主节点的配置信息:

# 改之前
sentinel monitor mymaster 192.168.0.138 6379 2
# 改之后
sentinel monitor mymaster 192.168.0.138 6380 2

等sentinel选举完成后,查看redis服务信息,发现6380变为了新的主节点,6381变为6380的从节点。

$ /usr/local/redis/bin/redis-cli -p 6380 -a soft01
127.0.0.1:6380> info
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.0.138,port=6381,state=online,offset=319536,lag=1
master_replid:723a15ea136602f4205288882d403e3734405fa0
master_replid2:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_repl_offset:319677
second_repl_offset:277075
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:319677$ /usr/local/redis/bin/redis-cli -p 6381 -a soft01
127.0.0.1:6381> info
# Replication
role:slave
master_host:192.168.0.138
master_port:6380
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:323935
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:723a15ea136602f4205288882d403e3734405fa0
master_replid2:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_repl_offset:323935
second_repl_offset:277075
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:323935

最后查看各个redis.conf的变化

  • /usr/local/master-slave/6379/redis.conf未变化,因为服务停止了
  • /usr/local/master-slave/6380/redis.conf 去掉了 replicaof 配置,因为它已经成为新的主节点了。
  • /usr/local/master-slave/6381/redis.conf内将replicaof 192.168.0.138 6379修改成replicaof 192.168.0.138 6380,指向了新的主节点。

恢复6379服务

  1. 启动6379
$ /usr/local/redis/bin/redis-server /usr/local/master-slave/6379/redis.conf
  1. 查看/usr/local/master-slave/6379/redis.conf文件新增了replicaof 192.168.0.138 6380,自动转为6380的从节点。
  2. 查看redis服务信息,6380主节点,6379和6381都是它的从节点
$ /usr/local/redis/bin/redis-cli -p 6379 -a soft01
127.0.0.1:6379> info
# Replication
role:slave
master_host:192.168.0.138
master_port:6380
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:568652
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:723a15ea136602f4205288882d403e3734405fa0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:568652
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:544774
repl_backlog_histlen:23879$ /usr/local/redis/bin/redis-cli -p 6380 -a soft01
127.0.0.1:6380> info
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.0.138,port=6381,state=online,offset=580566,lag=1
slave1:ip=192.168.0.138,port=6379,state=online,offset=580566,lag=1
master_replid:723a15ea136602f4205288882d403e3734405fa0
master_replid2:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_repl_offset:580989
second_repl_offset:277075
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:580989$ /usr/local/redis/bin/redis-cli -p 6381 -a soft01
127.0.0.1:6381> info
# Replication
role:slave
master_host:192.168.0.138
master_port:6380
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:587094
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:723a15ea136602f4205288882d403e3734405fa0
master_replid2:25a1a32168e72f2f5f6f5fc449c2f9b89f9eae66
master_repl_offset:587094
second_repl_offset:277075
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:587094

这样就完成了故障转移。

总结

当主节点宕机后,sentinel会在slave中选举一个变成新的master,将其他节点指向新的主节点(解决了主从模式不能自动恢复的问题)。
但是在主节点异常,哨兵进行选举时,会出现Redis短暂的不可以用。

Redis 哨兵安装-Centos相关推荐

  1. Redis 主从安装-Centos

    Redis 主从安装-Centos 由于机器有限,所以接下来的教程都是在一台虚拟机中进行部署安装. Redis主从工作原理 如果你为master配置了一个slave,不管这个slave是否是第一次连接 ...

  2. linux redis哨兵 sh,Linux下redis的持久化、主从同步与哨兵详解

    1.0 redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. 1| ...

  3. redis学习笔记(6)之redis哨兵

    redis哨兵 redis哨兵初识 基础概念 主从复制的问题 redis 哨兵的高可用性 redis哨兵安装和部署 部署结构 内容来源为六星教育,这里仅作为学习笔记 redis哨兵初识 redis的主 ...

  4. CentOS下Redis的安装

    CentOS下Redis的安装 前言 安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么redis版本就不能低于3.2版本,由于这个特性是3 ...

  5. Linux下redis的安装(适用centos)

    转自:https://www.cnblogs.com/_popc/p/3684835.html 第一部分:安装redis  希望将redis安装到此目录 1 /usr/local/redis 希望将安 ...

  6. 小白踩坑记-Redis的安装与使用

    Redis的安装与使用 文章目录 Redis的安装与使用 1 Window安装redis 1.1 下载redis源码压缩包 1.2 配置环境变量 1.3 开启命令行服务 1.4 将redis服务添加到 ...

  7. Redis哨兵模式及集群

    一.redis哨兵模式 哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移 1.哨兵模式的原理 哨兵(sentinel):是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现 ...

  8. Redis 的安装及企业级应用

    01_初识 Reids 1. 认识 NoSQL (非关系型数据库) 关系型数据库与非关系型数据库对比 SQL NoSQL 数据结构 结构化 非结构化 数据关联 关联 无关联 查询方式 SQL 查询 非 ...

  9. 【带你重拾Redis】Redis 哨兵集群实现高可用

    Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 Redis 集群架构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 Redis master 和 sla ...

  10. Redis、Redis+sentinel安装(Ubuntu 14.04下Redis安装及简单测试)

    Ubuntu下Redis安装两种安装方式: 1.apt-get方式 步骤: 以root权限登录,切换到/usr目录下. 接下来输入命令,apt-get install redis-server,如图: ...

最新文章

  1. java线程——join
  2. bzoj2154: Crash的数字表格
  3. 一张图搞定OAuth2.0
  4. idea 注释中 类 跳转_javaSE第一部分 数据类型、idea快捷键
  5. 为了异常安全(swap,share_ptr)——Effecive C++
  6. Jedis与Redisson对比有什么优缺点?
  7. Spring 入门程序
  8. 【python笔记】:字典类型详解
  9. imageranger for Mac如何自定义过滤器选项
  10. ping,python实现批量ping包工具--小案例
  11. ZStack实践汇 | 快照和备份的区别
  12. 数据恢复系列(4)~开源恢复工具
  13. (2022.9)raspberry 4安装HP 1020 plus打印机,利用树莓派4制作无线打印服务器
  14. 计算机管理员权限win8,怎样获取win8.1超级管理员权限
  15. 支付宝小程序的开发笔记
  16. vue router 嵌套、父子、多个路由跳转传值获取不到参数undefined
  17. 【短信验证】短信验证 短信API使用方法含code【亲测可用】【实用】【超详细】
  18. DFB激光器电流温度与波长的关系
  19. css3怎么做多边形,CSS | 实现有趣的多边形
  20. python儿童编程培训班-重庆少儿Python编程培训班

热门文章

  1. ppt 计算机图标不见了,显示桌面图标不见了如何恢复.ppt
  2. Android so 文件全部报错:Duplicate resources
  3. 电脑故障维修判断指导大全(联想内部文件)[网络转载]
  4. 摄影欣赏:30幅五光十色的精美秋天风景摄影作品
  5. jflash添加芯片_工欲善其事,必先利其器:动手给JLink添加官方不支持的芯片
  6. 在html中怎样加圆点,css伪类-小圆点
  7. 设计模式学习 — 代理模式
  8. oracle的权限授予,oracle权限命令
  9. 【一牛鸣】大盘将持续震荡9.13
  10. Windows下定时运行程序