redis---哨兵模式

步骤

搭建redis哨兵模式的大致步骤为

  1. 安装依赖 yum install gcc 
  2. 安装redis
  3. 修改redis.conf配置文件
  4. 修改sentinel.conf配置文件

哨兵模式主要做了两件事

  1. 监控主数据库和从数据库是否正常运行。
  2. 主数据库出现故障时自动将从数据库转换为主数据库。

1. 安装redis

下载地址:https://redis.io/download

解压: tar zxvf redis-4.0.10.tar.gz 

编译安装

# 1. 进入到解压后的文件夹
cd /usr/redis-4.0.10

# 2. 执行make命令
make 
# 如果执行make命令报错,error: jemalloc/jemalloc.h: No such file or directory,则需要指定内存管理方式 
make MALLOC=libc

# 3. 进入
cd /usr/redis-4.0.10/src
make install

启动服务端测试

cd /usr/redis-4.0.10/src
./redis-server  ../redis.conf

启动客户端测试

cd /usr/redis-4.0.10/src
./redis-cli

成功进入下一步

配置redis.conf

配置master

 1 # NETWORK 设置
 2 # 关闭保护模式
 3 # 注意:redis3.0.x版本没有该参数, 声明会报错
 4 protected-mode no 
 5 # 绑定IP地址,可以通过ifconfig 获取Ip地址
 6 # bind 172.168.3.166
 7 # 保持默认值,也可以修改
 8 port 6381
 9 # Client 端空闲断开连接的时间,0表示不断开
10 # timeout 30 
11 # GENERAL 设置
12 # 默认值是no,把值修改为yes,以后台模式运行
13 daemonize yes 
14 # 日志文件的位置
15 logfile /usr/redis/log/redis-server_sentinel.log
16 # SNAPSHOTTING 设置
17 # SNAPSHOTTING文件的路径
18 # dir /usr/redis/redisdb
19 # 设置密码
20 masterauth root
21 requirepass root
22 # APPEND ONLY MODE 设置
23 # 默认值是No,意思是使用RDB全量持久化的方式。Yes是使用AOF增量持久化的方式
24 # appendonly yes  
25 # appendfsync always 
26 # 关闭集群模式
27 # cluster-enabled no 

配置slave

# NETWORK 设置
protected-mode no
# bind 172.168.3.167
port 6381
# timeout 30
# GENERAL 设置
daemonize yes
logfile /usr/redis/log/redis-server_sentinel.log 
# SNAPSHOTTING 设置
# dir /usr/redis/redisdb 
# 设置密码
masterauth root
requirepass root
# REPLICATION 设置
# 主服务器的Ip地址和Port端口号
slaveof 172.168.3.166 6381
# 如果slave 无法与master 同步,设置成slave不可读,方便监控脚本发现问题
# slave-serve-stale-data no
# APPEND ONLY MODE 设置
# appendonly yes 
# appendfsync always
# 关闭集群模式
# cluster-enabled no 

配置sentinel.conf

# 关闭保护模式,需要将redis.conf中的属性也设置为no
protected-mode no
# 开启守护线程
daemonize yes
# sentinel默认监听26379端口,所以运行前必须确定该端口没有被别的进程占用
bind 127.0.0.1 172.168.3.166 # 对应服务器相应的ip, 也可直接注掉
port 26379
# 工作路径
# dir /usr/redis/sentinel-work
# 指明日志文件名
logfile /usr/redis/sentinellog/sentinel.log
# 配置监听的IP和port,以及将主服务器判断为失效并下线至少需要几个sentinel的同意
sentinel monitor mymaster1 192.168.3.166 6379 2
# 配置验证密码
sentinel auth-pass mymaster root
# 多长时间(默认30秒)不能使用后标记为sdown状态(单位毫秒)
# sentinel down-after-milliseconds mymaster 30000
# 指定了最多可以有多少个slave同时对新的master进行同步
# sentinel parallel-syncs mymaster 1
# 指定故障转移超时时间(单位毫秒)
# sentinel failover-timeout mymaster 180000

开启防火墙

## 查看防火墙状态,若显示running则为开启防火墙状态
firewall-cmd –state
## 开启防火墙
systemctl start firewalld.service
## 查看已开放端口号
firewall-cmd --list-ports
## 开放指定端口号,下方示例端口号为6379
firewall-cmd --zone=public --add-port=6379/tcp –permanent
## 重启防火墙,如此,端口号才算开放成功
firewall-cmd --reload
# centos防火墙更多配置参考:https://blog.csdn.net/qq_36850813/article/details/91353864

 配置完成,接下来开始启动

启动

启动redis

# 指定redis配置文件启动
cd /usr/redis-4.0.10/src
./redis-server  ../redis.conf 

启动哨兵

# 第一种
cd /usr/redis/redis-4.0.10/src 
./redis-sentinel  ../sentinel.conf
# 第二种
./redis-server   ../sentinel.conf --sentinel
# 以上两种方式,都必须指定一个配置文件sentinel.conf;
# 如果不指定,将无法启动sentinel

查看集群状态

# 查看集群状态,必须使用ip 和port进行连接, 否者查询不了
./redis-cli -h 172.168.3.166 -p 6381 -a root
172.168.3.166:6381> info Replication

检查是否安装成功(步骤)

  1. 只能master写,slave只读
  2. master写之后,slave可以读取到
  3. kill掉master,会在slave中重新 分配master

扩展

主从复制的流程

  1. Slave端在配置文件中添加了slave of指令,于是Slave启动时读取配置文件,初始状态为REDIS_REPL_CONNECT。
  2. Slave端在定时任务serverCron(Redis内部的定时器触发事件)中连接Master,发送sync命令,然后阻塞等待master发送回其内存快照文件(最新版的Redis已经不需要让Slave阻塞)。
  3. Master端收到sync命令简单判断是否有正在进行的内存快照子进程,没有则立即开始内存快照,有则等待其结束,当快照完成后会将该文件发送给Slave端。
  4. Slave端接收Master发来的内存快照文件,保存到本地,待接收完成后,清空内存表,重新读取Master发来的内存快照文件,重建整个内存表数据结构,并最终状态置位为 REDIS_REPL_CONNECTED状态,Slave状态机流转完成。
  5. Master端在发送快照文件过程中,接收的任何会改变数据集的命令都会暂时先保存在Slave网络连接的发送缓存队列里(list数据结构),待快照完成后,依次发给Slave,之后收到的命令相同处理,并将状态置位为 REDIS_REPL_ONLINE。

参考流程图

产考连接:https://zhangweisep.github.io/2018/09/26/Redis%E5%93%A8%E5%85%B5%E6%A8%A1%E5%BC%8F%E5%92%8C%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA/

 

 

原文地址:https://www.cnblogs.com/musl/p/13343298.html