一、概念:
-
什么是哨兵服务:
监视主从复制结构中主服务器,发现主服务器无法连接后,会把对应的从升级为主数据库服务器,继续监视新的主数据库服务器,坏掉的主数据库服务器恢复后,会自动做当前主服务器的从主机。 -
哨兵服务+redis主从服务(一主一从、一主多从、主从从):
能够实现redis服务高可用和数据的自动备份,但远比Redis集群的资金成本和运维成本要低。
二、环境准备:
主机名 | IP地址 | 端口 | 角色 |
---|---|---|---|
Host54 | 192.168.88.54 | 6379 | 主服务器 |
Host55 | 192.168.88.55 | 6379 | 从服务器 |
Host57 | 192.168.88.57 | 6379 | 管理(哨兵) 服务器 |
三、实现步骤:
- 配置Redis主从结构
- 配置哨兵服务
- 测试配置
四、实操:
第一步:配置Redis主从结构:
- 配置主服务器host54
[root@host54 ~]# yum -y install gcc
[root@host54 ~]# tar -xf redis-4.0.8.tar.gz
[root@host54 ~]# cd redis-4.0.8/
[root@host54 ~]# make && make install
[root@host54 ~]# ./utils/install_server.sh 遇到提示就回车
[root@host54 ~]# /etc/init.d/redis_6379 stop
[root@host54 ~]# vim /etc/redis/6379.conf
bind 192.168.88.54
[root@host54 ~]# /etc/init.d/redis_6379 start
- 配置从服务器host55
[root@host55 ~]# yum -y install gcc
[root@host55 ~]# tar -xf redis-4.0.8.tar.gz
[root@host55 ~]# cd redis-4.0.8/
[root@host55 ~]# make && make install
[root@host55 ~]# ./utils/install_server.sh 遇到提示就回车
[root@host55 ~]# /etc/init.d/redis_6379 stop
[root@host55 ~]# vim /etc/redis/6379.conf
bind 192.168.88.55
[root@host55 ~]# /etc/init.d/redis_6379 start
[root@host55 ~]# redis-cli -h 192.168.88.55
192.168.88.55:6379> slaveof 192.168.88.54 6379
OK
192.168.88.55:6379> config rewrite
OK
第二步:配置哨兵服务(192.168.88.57):
- 安装源码软件redis (无需做初始化配置,如果做了初始化把redis服务停止即可)
[root@redis57 ~ ]# yum -y install gcc
[root@redis57 ~ ]# tar -zxf redis-4.0.8.tar.gz
[root@redis57 redis]# cd redis-4.0.8/
[root@redis1 redis-4.0.8]# make
[root@redis1 redis-4.0.8]# make install
- 创建并编辑主配置文件
# 源码包里有哨兵服务配置文件的模板sentinel.conf
# sentinel.conf主要是定义哨兵服务的运行参数
[root@host57 ~]# vim /etc/sentinel.conf
bind 192.168.88.57 # 指定哨兵服务的ip地址
port 26379 # 哨兵服务器的端口
sentinel monitor redis_server 192.168.88.54 6379 1
# sentinel monitor:指的是哨兵服务器监视各项参数
# redis_server:监视的主服务器名称(可以随便起,一般是redis_server)
# 192.168.88.54 6379:监视的主服务器的ip地址和端口号
# 1:指的是哨兵监视服务器台数(有几台就写几)
# 如果主服务器有连接密码 还要指定主服务器密码 (写法如下)
# # sentinel auth-pass redis_server 123456
- 启动哨兵服务 (会占用当前终端显示启动信息)
[root@mgm57 ~]# nohup redis-sentinel /etc/sentinel.conf &
[root@mgm57 ~]# nohup: 忽略输入并把输出追加到"nohup.out" 回车即可
# 查看端口
[root@mgm57 ~]# netstat –utnlp | grep 26379
第三步:测试配置:
- 当主服务器宕机,由从来接替主服务器,能够接替视为成功
- 停止主服务器54的redis服务
[root@host54 ~]# redis-cli -h 192.168.88.54 shutdown
- 在服务器55主机,查看复制信息, 角色为 master
[root@host55 ~]# redis-cli -h 192.168.88.55
192.168.88.55:6379> info replication
# Replication
role:master
connected_slaves:0
192.168.88.55:6379> mset v1 101 v2 102 存储数据
OK
- 查看哨兵服务主配置文件 监视的主服务器 自动修改为 从服务器的ip
[root@host57 ~]# cat /etc/sentinel.conf
.....
sentinel monitor redis_server 192.168.88.55 6379 1
.....
sentinel known-slave redis_server 192.168.88.54 6379
- 把宕机54主机的redis服务启动
[root@host54 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host54 ~]# redis-cli -h 192.168.88.54
192.168.88.54:6379> info replication
# Replication
role:slave
master_host:192.168.88.55
master_port:6379
master_link_status:up
- 在host55主机查看复制信息
- 54自动做当前主服务器55的从主机
192.168.88.55:6379> info replication
# Replication
role:master
connected_slaves:1 有1个从服务器
slave0:ip=192.168.88.55,port=6379,state=online,offset=231667,lag=0