两台redis做主从+哨兵模式实现vip漂移

版权声明:本文为博主原创文章,转载请注明来源:https://blog.csdn.net/loame_zyq https://blog.csdn.net/loame_zyq/article/details/83182018

一、环境

地址 操作系统 redis端口 哨兵端口
10.24.43.6 centos6.x 6380 6381
10.24.43.7 centos6.x 6380 6381
VIP:10.24.43.8

二、部署前准备

   1.路径

redis部署路径:/data/UnicomSMS/Redis

   2.主机名(选做)

   master

[root@master ~]# cat /etc/sysconfig/network
HOSTNAME=master
[root@master ~]# cat /etc/hosts
127.0.0.1   master localhost
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

   slave

[root@slave ~]# cat /etc/sysconfig/network
HOSTNAME=slave
[root@slave ~]# cat /etc/hosts
127.0.0.1   slave localhost
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

 3.安装yum

请确保你的主机有网络并安装了wget
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup #备份
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo #下载阿里源
yum makecache #缓存
yum -y update #更新阿里源

4.准备安装包

  redis安装包

redis-4.0.10.tar.gz
下载地址:http://download.redis.io/releases/redis-4.0.10.tar.gz
linux下载:wget http://download.redis.io/releases/redis-4.0.10.tar.gz

依赖包安装

yum -y install gcc gcc-c++ tcl 

一般不需要安装tcl,但是make是有可能会报错tcl版本低,我一般都安上

三、安装redis

进入安装包路径
cd /data/UnicomSMS/Redis
解压
tar -zxvf redis-4.0.10.tar.gz
进入解压后的目录
cd /usr/local/redis/redis-4.0.10/
编译安装
make
make makeinstall
加入环境变量
echo 'PATH=$PATH':/data/UnicomSMS/Redis/redis-4.0.10/bin/ >> /etc/profile #路径别写错哦
source /etc/profile
开启并放入后台运行
cd /data/UnicomSMS/Redis/redis-4.0.10/src
nohup redis-server &>/dev/null &
检查端口是否运行
netstat -unltp | grep :6379
连接redis
redis-cli -p 6379
quit
停掉redis
killall redis

两台一样

四、redis主从部署

  配置master

修改端口
vi redis.conf
port 6380  #端口
daemonize yes #开启后台守护进程
bind 0.0.0.0 #绑定地址,默认是127.0.0.1,0.0.0.0表示绑定所有地址
pidfile "/var/run/redis-6380.pid"
logfile "/var/log/redis/redis-6380.log"
protected-mode no #关闭保护模式



杀掉之前的redis
ps -ef |grep redis
killall redis
启动master的redis
nohup bin/redis-server /data/UnicomSMS/redis/bin/redis.conf &> /tmp/redis.log &
netstat -unltp |grep redis
验证是否为master
src/redis-cli -p 6380 info | grep role

  配置slave

修改端口
vi redis.conf
port 6380
daemonize yes
bind 0.0.0.0
protected-mode no
pidfile "/var/run/redis-6380.pid"
logfile "/var/log/redis/redis-6380.log"
slaveof 10.24.43.6 6380 #指定主服务器ip和端口

永久为从
# slaveof <masterip> <masterport>
我们可以在配置文件中直接修改 slaveof 属性,我们直接配置主服务器的ip 地址,和端口号,如果这里主服务器有配置密码可以通过配置masterauth 来设置链接密码


启动master的redis
nohup bin/redis-server &> /tmp/redis.log &
netstat -unltp |grep redis
验证是否为master
src/redis-cli -p 6380 info | grep role

  临时做从的话

在启动后配置
nohup src/redis-server /redis.conf &> /tmp/three.log &
netstat -unltp |grep redis

查看是否为master
src/redis-cli -p 6380 info | grep role

命令行切换到从
src/redis-cli -p 6380
127.0.0.1:6380> slaveof 127.0.0.1 6380

特点
在当前slave掉线后,再启动会从服务器会读取自己本地的 rdb 回复数据,而不会去自动链接主服务

六、配置redis哨兵


vim sentinel.conf

#master6380为实例名称,监听主服务器(10.24.43.6)6380端口,
#这里的1表示,如果这台sentinel认为主redis挂了,才算挂

sentinel monitor master6380 10.10.10.63 6380 1  

#如果5秒内master6380没有响应,就认为SDOWN

sentinel down-after-milliseconds master6380 5000  
sentinel failover-timeout master6380 15000

#自动切换后,执行脚本,实现vip自动漂移

sentinel client-reconfig-script master6381 /opt/notify_master6381.sh

  添加/opt/notify_master6381.sh,实现vip自动漂移(主从服务器都要配置)

  root@wyq63 ~]# cat /opt/notify_master6381.sh 

#!/bin/bash

MASTER_IP=$6  #第六个参数是新主redis的ip地址

LOCAL_IP='10.24.43.6'  #这里记得要改,每台服务器写自己的本地ip即可

VIP='10.24.43.8'

NETMASK='24' #子网掩码位数

INTERFACE='eth0'#网卡接口设备名称

if [ ${MASTER_IP} = ${LOCAL_IP} ];then   

    /usr/sbin/ip  addr  add ${VIP}/${NETMASK}  dev ${INTERFACE}  #将VIP绑定到该服务器上

    /usr/sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}

    exit 0

else

   /usr/sbin/ip  addr del  ${VIP}/${NETMASK}  dev ${INTERFACE}   #将VIP从该服务器上删除

   exit 0

fi

exit 1

  启动redis-sentinel(主从服务器全部启动)

  redis-sentinel /etc/redis-sentinel.conf #指定redis-sentinel配置文件

  查看主(从)服务器sentinel状态

  [root@wyq63 ~]# redis-cli -h 10.10.10.63 -p 6381 info sentinel

# Sentinel

sentinel_masters:1

sentinel_tilt:0

sentinel_running_scripts:0

sentinel_scripts_queue_length:0

sentinel_simulate_failure_flags:0

master0:name=master6380,status=ok,address=10.24.43.6:6380,slaves=2,sentinels=3

  绑定VIP到redis主服务器(第一次需要手动绑定,后面故障切换就不需要)

  从服务器的sentinel状态可以看出,当前主redis服务器ip是10.24.43.6

  ip addr add 10.24.43.8/24 dev eth0 #绑定vip到网卡上

  arping -q -c 3 -A 10.24.43.8 -I eth0 #arp抑制

  ip a #查看当前网卡ip状态

  通过VIP(10.25.43.8)测试连接redis-server和redis-sentinel

  [root@wyq64 ~]# redis-cli -h 10.25.43.8 -p 6380 info replication #连接redis-server

# Replication

role:master

connected_slaves:2

slave:ip=10.24.43.7,port=6379,state=online,offset=174706,lag=1

master_repl_offset:174706

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:174705

七、附加项(哨兵使用)


连接哨兵:
src/redis-cli -p 26379

命令:
sentinel的基本状态信息
INFO

列出所有被监视的主服务器,以及这些主服务器的当前状态
SENTINEL masters

列出给定主服务器的所有从服务器,以及这些从服务器的当前状态
SENTINEL slaves

返回给定名字的主服务器的 IP 地址和端口号
SENTINEL get-master-addr-by-name

重置所有名字和给定模式 pattern 相匹配的主服务器。重置操作清除主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。
SENTINEL reset

当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移,但是它会给其他sentinel发送一个最新的配置,其他sentinel会根据这个配置进行更新
SENTINEL failover

  [root@wyq64 ~]# redis-cli -h 10.24.43.8 -p 6381 info sentinel #连接redis-sentinel

# Sentinel

sentinel_masters:1

sentinel_tilt:0

sentinel_running_scripts:0

sentinel_scripts_queue_length:0

sentinel_simulate_failure_flags:0

master0:name=master6380,status=ok,address=10.24.43.6:6380,slaves=1,sentinels=2

故障测试

[root@wyq63 ~]# redis-cli -h 10.24.43.6 -p 6380 shutdown #关闭主redis

[root@wyq63 ~]#  redis-cli -h 10.24.43.8 -p 6381 info sentinel #通过vip查看sentinel状态
 

# Sentinel

sentinel_masters:1

sentinel_tilt:0

sentinel_running_scripts:0

sentinel_scripts_queue_length:0

sentinel_simulate_failure_flags:0

#发现主redis已经切换到10.24.43.7这台从服务器上了

master:name=master6380,status=ok,address=10.24.43.7:6380,slaves=1,sentinels=2

  ip a查看现在vip情况

参考1

参考2

猜你喜欢

转载自blog.csdn.net/loame_zyq/article/details/83182018
今日推荐