前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis哨兵模式搭建

Redis哨兵模式搭建

作者头像
Yuou
发布2022-09-26 15:25:27
7170
发布2022-09-26 15:25:27
举报
文章被收录于专栏:乱七八糟技术日常

哨兵模式简介

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

这里的哨兵有两个作用

  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。

用文字描述一下故障切换(failover)的过程。假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。

搭建Redis哨兵

配置3个哨兵和1主2从的Redis服务器

服务类型

是否是主服务器

IP地址

端口

Redis

172.16.87.10

6379

Redis

172.16.87.11

6379

Redis

172.16.87.12

6379

Sentinel

-

172.16.87.10

26379

Sentinel

-

172.16.87.11

26379

Sentinel

-

172.16.87.12

26379

部署Redis(三台全搞)

Redis6.x版本以上需要GCC4.9X

代码语言:javascript
复制
wget http://download.redis.io/releases/redis-6.0.8.tar.gz
yum -y install centos-release-scl  scl-utils-build
yum -y install devtoolset-7-gcc* gcc
scl enable devtoolset-7 bash
echo "511" > /proc/sys/net/core/somaxconn
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf && sysctl -p
mv redis-6.0.8 /usr/local/ && cd /usr/local/redis-6.0.8/ && make install
mkdir /usr/local/redis-6.0.8/logs

更改Redis 主配置文件172.16.87.10

  • 修复master认证密码
代码语言:javascript
复制
[root@localhost redis]# vim /usr/local/redis/redis.conf
bind 172.16.87.10  # 改为本机IP
port 6379   # 默认6379
daemonize yes  # 改为yes允许后台运行
pidfile /var/run/redis_6379.pid # pid文件位置
maxmemory 750mb # 设置最大内存 一般为3/4,生产建议
dbfilename redis-master.rdb # 改一下rdb文件名称
logfile "/usr/local/redis/logs/redis-master.log"
requirepass 123.com
masterauth 123.com

更改Redis从配置文件172.16.87.11`

代码语言:javascript
复制
[root@localhost redis]# vim /usr/local/redis/redis.conf
bind 172.16.87.11  # 改为本机IP
port 6379   # 默认6379
daemonize yes  # 改为yes允许后台运行
pidfile /var/run/redis_6379.pid # pid文件位置
maxmemory 750mb # 设置最大内存 一般为3/4,生产建议
dbfilename redis-slove.rdb # 改一下rdb文件名称
logfile "/usr/local/redis/logs/redis-slove1.log"
requirepass 123.com
# 指定主服务器,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置
slaveof 172.16.87.10 6379
# 主服务器密码
masterauth 123.com

更改Redis从配置文件172.16.87.12

代码语言:javascript
复制
[root@localhost redis]# vim /usr/local/redis/redis.conf
bind 172.16.87.12  # 改为本机IP
port 6379   # 默认6379
daemonize yes  # 改为yes允许后台运行
pidfile /var/run/redis_6379.pid # pid文件位置
maxmemory 750mb # 设置最大内存 一般为3/4,生产建议
dbfilename redis-slove.rdb # 改一下rdb文件名称
logfile "/usr/local/redis/logs/redis-slove2.log"
requirepass 123.com
slaveof 172.16.87.10 6379
# 主服务器密码
masterauth 123.com

上述内容主要是配置Redis服务器,从服务器比主服务器多一个slaveof的配置和密码。

配置哨兵文件

在Redis安装目录下有一个sentinel.conf文件

三台Redis都需要更改此配置文件 注意logfile的命名

代码语言:javascript
复制
cp sentinel.conf sentinel.conf.back # 先备份一个
vim sentinel.conf
protected-mode no
daemonize yes
logfile "/usr/local/redis-6.0.8/logs/redis-sentinel10.log"  # 记得创建logs目录
sentinel monitor mymaster 172.16.87.10 6379 2
sentinel auth-pass mymaster 123.com
  • protected-mode no 禁止保护模式
  • daemonize yes 后台运行
  • sentinel monitor mymaster 172.16.87.10 6379 2 配置监听的主服务器
    • 2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作.
  • sentinel auth-pass mymaster 123.com
    • mymaster为服务名 123.com为密码,与上述一样即可
  • logfile我相信大家都能看得懂…我是这样命名的
    • redis-sentinel10.log(172.16.87.10) redis-sentinel11.log(172.16.87.11)以此类推

上述都修改完成可以启动redis了

启动Redis和哨兵

注意启动的顺序:首先是主的Redis服务进程,然后启动从机的Redis服务进程,最后启动3个哨兵的服务进程。

代码语言:javascript
复制
redis-server  /usr/local/redis-6.0.8/redis.conf # 三台Redis服务都用这个命令启动
redis-sentinel /usr/local/redis-6.0.8/sentinel.conf # 三台Redis哨兵服务

检查Redis主从是否同步成功

查看Redis日志

代码语言:javascript
复制
tail -f /usr/local/redis-6.0.8/logs/redis-master.log
9040:M 03 Jan 2021 11:46:53.570 * Synchronization with replica 172.16.87.11:6379 succeeded
9040:M 03 Jan 2021 11:48:19.065 * Synchronization with replica 172.16.87.12:6379 succeeded

出现两个successed并且成功同步复制即成功.

检测哨兵的主从切换是否成功

你可以直接kill掉Redis的master

代码语言:javascript
复制
killall -9 redis-server
# 然后查看从上的哨兵日志.
+sdown master mymaster 172.16.87.10 6379 可以看出master已经宕机,然后更换新的master为11
代码语言:javascript
复制
13706:X 03 Jan 2021 21:54:34.755 # +sdown master mymaster 172.16.87.10 6379
13706:X 03 Jan 2021 21:54:34.816 # +new-epoch 1
13706:X 03 Jan 2021 21:54:34.818 # +vote-for-leader d8c5bbbb14158ccb0ff962c4b0ed2e7e6bb9067c 1
13706:X 03 Jan 2021 21:54:34.818 # +odown master mymaster 172.16.87.10 6379 #quorum 3/2
13706:X 03 Jan 2021 21:54:34.819 # Next failover delay: I will not start a failover before Sun Jan  3 22:00:35 2021
13706:X 03 Jan 2021 21:54:35.344 # +config-update-from sentinel d8c5bbbb14158ccb0ff962c4b0ed2e7e6bb9067c 172.16.87.12 26379 @ mymaster 172.16.87.10 6379
13706:X 03 Jan 2021 21:54:35.344 # +switch-master mymaster 172.16.87.10 6379 172.16.87.11 6379
13706:X 03 Jan 2021 21:54:35.344 * +slave slave 172.16.87.12:6379 172.16.87.12 6379 @ mymaster 172.16.87.11 6379
13706:X 03 Jan 2021 21:54:35.345 * +slave slave 172.16.87.10:6379 172.16.87.10 6379 @ mymaster 172.16.87.11 6379

连接到Redis172.16.87.11

代码语言:javascript
复制
[root@localhost redis-6.0.8]# redis-cli -h 172.16.87.11 -a 123.com
172.16.87.11:6379> info replication
# Replication
role:master # 角色已经变成了master
connected_slaves:1
slave0:ip=172.16.87.12,port=6379,state=online,offset=133347,lag=0
master_replid:dbee8e7470ab8f5fddadc8958659a39d75033521
master_replid2:bd20b8c1ab987db5bc6bfa6eaca6df5d6ffdfa53
master_repl_offset:133486
second_repl_offset:93027
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:197
repl_backlog_histlen:133290
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 哨兵模式简介
  • 搭建Redis哨兵
  • 部署Redis(三台全搞)
  • 配置哨兵文件
  • 启动Redis和哨兵
  • 检查Redis主从是否同步成功
  • 检测哨兵的主从切换是否成功
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档