linux (centos7) 安装redis,主从+哨兵模式搭建

本文介绍如何搭建Redis主从模式,并通过三个Sentinel实现故障转移。具体步骤包括启动主从服务、配置Sentinel、模拟主节点故障及观察自动切换过程。实验验证了在主节点故障时,Sentinel能够及时进行主从切换,确保服务高可用。

--先搭建主从模式,1主2从

启动三个redis服务
/home/redis-5.0.7/src/redis-server /home/redis-5.0.7/config/master-6379.conf 
/home/redis-5.0.7/src/redis-server /home/redis-5.0.7/config/slave-6380.conf 
/home/redis-5.0.7/src/redis-server /home/redis-5.0.7/config/slave-6381.conf


--配置三个sentinel.conf文件

vi sentinel26379.conf

#保护模式  
protected-mode no    
#端口  
port 26379
#守护进程  
daemonize yes    
#设置pid文件路径  
pidfile /var/run/sentinel26379.pid      
#工作路径,不用改  
dir /tmp        
#设置日志文件路径  
logfile /home/redis-5.0.7/logs/sentinel26379.log    
# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown  
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。  
# slaves是自动发现,不用指定slaves。  
sentinel monitor mymaster 192.168.3.5 6379 2  
  
# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。  
sentinel down-after-milliseconds mymaster 30000  
  
#选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。  
sentinel parallel-syncs mymaster 1  
  
#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。  
sentinel failover-timeout mymaster 180000  
  
#设置master和slaves的密码  
sentinel auth-pass mymaster redis123  


vi sentinel26380.conf

#保护模式  
protected-mode no    
#端口  
port 26380
#守护进程  
daemonize yes    
#设置pid文件路径  
pidfile /var/run/sentinel26380.pid      
#工作路径,不用改  
dir /tmp        
#设置日志文件路径  
logfile /home/redis-5.0.7/logs/sentinel26380.log    
# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown  
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。  
# slaves是自动发现,不用指定slaves。  
sentinel monitor mymaster 192.168.3.5 6379 2  
  
# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。  
sentinel down-after-milliseconds mymaster 30000  
  
#选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。  
sentinel parallel-syncs mymaster 1  
  
#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。  
sentinel failover-timeout mymaster 180000  
  
#设置master和slaves的密码  
sentinel auth-pass mymaster redis123  

vi sentinel26381.conf

#保护模式  
protected-mode no    
#端口  
port 26381
#守护进程  
daemonize yes    
#设置pid文件路径  
pidfile /var/run/sentinel26381.pid      
#工作路径,不用改  
dir /tmp        
#设置日志文件路径  
logfile /home/redis-5.0.7/logs/sentinel26381.log    
# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown  
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。  
# slaves是自动发现,不用指定slaves。  
sentinel monitor mymaster 192.168.3.5 6379 2  
  
# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。  
sentinel down-after-milliseconds mymaster 30000  
  
#选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。  
sentinel parallel-syncs mymaster 1  
  
#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。  
sentinel failover-timeout mymaster 180000  
  
#设置master和slaves的密码  
sentinel auth-pass mymaster redis123  

--启动sentinel
redis-sentinel  /home/redis-5.0.7/config/sentinel26379.conf
redis-sentinel  /home/redis-5.0.7/config/sentinel26380.conf
redis-sentinel  /home/redis-5.0.7/config/sentinel26381.conf


--模拟主节点6379 down机
kill -9 44862


--观察6380的日志,发现主节点切换到6380
44975:X 02 Jan 2020 16:04:08.829 # +new-epoch 1
44975:X 02 Jan 2020 16:04:08.830 # +vote-for-leader 761a9eb056794c6d65e3858b1deac9a4ee24903a 1
44975:X 02 Jan 2020 16:04:08.832 # +sdown master mymaster 192.168.3.5 6379
44975:X 02 Jan 2020 16:04:08.909 # +odown master mymaster 192.168.3.5 6379 #quorum 3/2
44975:X 02 Jan 2020 16:04:08.909 # Next failover delay: I will not start a failover before Thu Jan  2 16:10:09 2020
44975:X 02 Jan 2020 16:04:09.128 # +config-update-from sentinel 761a9eb056794c6d65e3858b1deac9a4ee24903a 192.168.3.5 26381 @ mymaster 192.168.3.5 6379
44975:X 02 Jan 2020 16:04:09.128 # +switch-master mymaster 192.168.3.5 6379 192.168.3.5 6380
44975:X 02 Jan 2020 16:04:09.128 * +slave slave 192.168.3.5:6381 192.168.3.5 6381 @ mymaster 192.168.3.5 6380
44975:X 02 Jan 2020 16:04:09.128 * +slave slave 192.168.3.5:6379 192.168.3.5 6379 @ mymaster 192.168.3.5 6380
44975:X 02 Jan 2020 16:04:39.154 # +sdown slave 192.168.3.5:6379 192.168.3.5 6379 @ mymaster 192.168.3.5 6380

--登陆redis验证
# redis-cli -p 6380
127.0.0.1:6380> info

# Replication
role:master
connected_slaves:1
slave0:ip=192.168.3.5,port=6381,state=online,offset=323618,lag=1
master_replid:4619c7a69d5828a94169e4bf5c4037e20c68da94
master_replid2:1add70bc388d5c1626aec411e9f1288a69243334
master_repl_offset:323892
second_repl_offset:284559
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:323892

--重启6379节点后,观察6379节点日志,恢复成6380的slave节点
44955:X 02 Jan 2020 16:09:15.073 # -sdown slave 192.168.3.5:6379 192.168.3.5 6379 @ mymaster 192.168.3.5 6380
44955:X 02 Jan 2020 16:09:25.014 * +convert-to-slave slave 192.168.3.5:6379 192.168.3.5 6379 @ mymaster 192.168.3.5 6380


 

### 环境准备 - 配置yum源,确保系统能够正常下载软件包。 - 修改SELinux,为Redis的正常运行提供合适的安全环境。 - 安装Redis,可使用`yum install`命令进行安装,或者下载源码包进行编译安装,如使用`redis-3.2.8.tar.gz`版本,下载地址为`http://download.redis.io/releases/` [^2][^3]。 ### 主从服务配置启动 #### 主库redis.conf配置 编辑主库的`redis.conf`文件,主要配置项如下: ```plaintext bind 0.0.0.0 # 允许所有IP访问 port 6379 # 监听端口 daemonize yes # 以守护进程方式运行 ``` #### 从库redis.conf配置 从库需要在主库配置基础上,添加主库的连接信息,两台从库配置相同: ```plaintext bind 0.0.0.0 port 6379 daemonize yes slaveof <主库IP> <主库端口> # 指定主库的IP和端口 ``` #### 启动主从服务 分别启动主库和从库的Redis服务: ```bash ./src/redis-server redis.conf ``` 连接到Redis主库,查看主从信息: ```bash redis-cli -h <主库IP> -p <主库端口> info replication ``` ### 哨兵配置启动 #### 三台哨兵配置 编辑三台哨兵的`redis-sentinel.conf`文件,配置如下: ```plaintext port 26379 # 哨兵监听端口 daemonize yes sentinel monitor mymaster <主库IP> <主库端口> 2 # 监控主库,2表示至少需要2个哨兵同意才能进行故障转移 sentinel down-after-milliseconds mymaster 30000 # 主库多长时间无响应判定为下线 sentinel failover-timeout mymaster 180000 # 故障转移超时时间 ``` #### 启动哨兵 分别启动三台哨兵进程: ```bash ./src/redis-sentinel sentinel.conf ``` #### 测试哨兵 模拟主库故障,查看哨兵是否能自动进行故障转移,将新的从库提升为主库。 ### 开放防火墙端口 开放Redis主从服务端口(默认6379)和哨兵端口(默认26379),确保网络通信正常。 ```bash firewall-cmd --zone=public --add-port=6379/tcp --permanent firewall-cmd --zone=public --add-port=26379/tcp --permanent firewall-cmd --reload ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值