Centos 6.9 Redis ---Keepalived 高可用主从切换

来源:互联网 发布:追风打印软件 编辑:程序博客网 时间:2024/05/22 03:08
当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;
当 Master 挂掉,Slave 正常时, Slave接管服务,同时关闭主从复制功能;
当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Slave等待Master同步数据完成之后,恢复Slave身份。
然后依次循环。
----------------------------------------------------------------------------------------------------------------------------------------------
服务器配置
172.16.19.12 Master
172.16.19.13 Slave
172.16.19.199 虚拟地址
----------------------------------------------------------------------------------------------------------------------------------------------

主从配置主机名称
vi /etc/hosts
172.16.19.12 redis12
172.16.19.13 redis13

主从安装环境依赖
yum install gcc gcc-c++ make zlib-devel wget tclkernel-devel openssl-devel popt-devel ipvsadm  install libnl libnl-devel libnfnetlink-devel wget vim -y

主从配置下载redis
wget http://download.redis.io/releases/redis-4.0.1.tar.gz

主从解压redis
tar -zxvf redis-4.0.1.tar.gz

主从拷贝到目录
mv redis-4.0.1 /usr/local/redis

编译redis
cd /usr/local/redis
make && make install

主从创建一个redis实力
/usr/local/redis/utils
sh ./install_server.sh
6379 端口

修改主配置(Master)redis IP
vi /etc/redis/6379.conf
# line 70: change to own IP or 0.0.0.0
bind 0.0.0.0

# line 377: add follows if you need
# min-slaves-to-write : if number of slave Hosts are online, Master Host accepts write requests
# min-slaves-max-lag : decision time(sec) for online if Slave Hosts return answer within specified time
min-slaves-to-write 2
min-slaves-max-lag 10

修改从配置(Slave)redis IP
vi /etc/redis/6379.conf
# line 70: change to own IP or 0.0.0.0
bind 0.0.0.0

# line 206: add Master server's IP and port
slaveof 172.16.19.12 6379

# line 213: add connection password set on Master Host
masterauth password

# line 241: verify parameter (set Slave Hosts read-only)
slave-read-only yes

主从下载keepalived
wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
解压
tar zxvf keepalived-1.3.5.tar.gz

主从配置编译并安装
cd keepalived-1.3.5
./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-696.el6.x86_64/
make && make install

主从查看keepalived目录结构
find / -name keepalived

主从拷贝配置
cp /root/keepalived-1.3.5/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/keepalived
cp /root/keepalived-1.3.5/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
cp /root/keepalived-1.3.5/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
mkdir /etc/keepalived
cp /root/keepalived-1.3.5/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
======================================================================================================================================================
主服务配置keepalived
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    router_id redis12
}
vrrp_script chk_redis
{
    script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379"
    interval 2
    timeout 2
    fall 3
}
vrrp_instance redis {
    state MASTER # master set to SLAVE also
    interface eth0
    virtual_router_id 50
    priority  150
    nopreempt # no seize,must add
    advert_int 1
    authentication {   #all node must same
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.19.199/24
    }
    track_script {
        chk_redis
    }
    notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 172.16.19.13 6379"
    notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 172.16.19.13 6379"
    notify_fault /etc/keepalived/scripts/redis_fault.sh
    notify_stop /etc/keepalived/scripts/redis_stop.sh
}
======================================================================================================================================================
从服务配置keepalived
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id redis13
}
vrrp_script chk_redis
{
     script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379"
     interval 2
     timeout 2
     fall 3
}

vrrp_instance redis {
    state BACKUP
    interface eth0
    virtual_router_id 50
    priority  100
    advert_int 1
    authentication {   #all node must same
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    172.16.19.199/24
    }
    track_script {
         chk_redis
    }
    notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 172.16.19.12 6379"
    notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 172.16.19.12 6379"
    notify_fault /etc/keepalived/scripts/redis_fault.sh
    notify_stop /etc/keepalived/scripts/redis_stop.sh
}
======================================================================================================================================================
主从服务器创建监控Redis的脚本
mkdir /etc/keepalived/scripts
vi /etc/keepalived/scripts/redis_check.sh
#!/bin/bash
ALIVE=`/usr/local/bin/redis-cli -h $1 -p $2 PING`
LOGFILE="/var/log/keepalived-redis-check.log"
echo "[CHECK]" >> $LOGFILE
date >> $LOGFILE
if [ $ALIVE == "PONG" ]; then :
   echo "Success: redis-cli -h $1 -p $2 PING $ALIVE" >> $LOGFILE 2>&1
   exit 0
else
   echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " >> $LOGFILE 2>&1
   exit 1
fi

主服务器创建redis_master脚本
vi /etc/keepalived/scripts/redis_master.sh

#!/bin/bash
REDISCLI="/usr/local/bin/redis-cli -h $1 -p $3"
LOGFILE="/var/log/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ... " >> $LOGFILE
$REDISCLI SLAVEOF $2 $3 >> $LOGFILE  2>&1
#echo "SLAVEOF $2 cmd can't excute ... " >> $LOGFILE
sleep 10 ##delay 15 s wait data sync exchange role
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
~                                           
主服务器创建redis_backup脚本
vi/etc/keepalived/scripts/redis_backup.sh
#!/bin/bash
REDISCLI="/usr/local/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"
echo "[BACKUP]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE 2>&1
$REDISCLI SLAVEOF $2 $3 >> $LOGFILE
sleep 100 #delay 10 s wait data async cancel sync
exit(0)

主服务器创建redis_fault脚本
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE

主服务器创建redis_stop脚本
vi /etc/keepalived/scripts/redis_stop.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE


=====================================================================================
在从服务器创建redis_master脚本
vi /etc/keepalived/scripts/redis_master.sh
#!/bin/bash
REDISCLI="/usr/local/bin/redis-cli -h $1 -p $3"
LOGFILE="/var/log/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ... " >> $LOGFILE
$REDISCLI SLAVEOF $2 $3 >> $LOGFILE  2>&1
#echo "SLAVEOF $2 cmd can't excute ... " >> $LOGFILE
sleep 10 ##delay 15 s wait data sync exchange role
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1

在从服务器创建redis_backup脚本
vi /etc/keepalived/scripts/redis_fault.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE

在从服务器创建redis_fault脚本
vi /etc/keepalived/scripts/redis_fault.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE

在从服务器上创建redis_stop脚本
vi /etc/keepalived/scripts/redis_stop.sh
#!/bin/bash
LOGFILE=/var/log/keepalived-redis-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE

主从赋予权限
chmod +x /etc/keepalived/scripts/*.sh

主从启动服务
service keepalived start
service redis_6379 start

主从配置开机启动
chkconfig --add redis_6379
chkconfig redis_6379 on

chkconfig --add keepalived
chkconfig keepalived  on


主测试
关闭redis 服务或者杀死进程
service redis_6379 stop
killall -9 redis-server

service keepalived stop
killall -9 keepalived


查看主从Keepalived日志
tailf /var/log/keepalived-redis-state.log

从服务器查看
redis-cli -h 172.16.19.13 INFO 或者 redis-cli info Replication

从服务器测试虚拟IP是否正常
redis-cli -h 172.16.19.199 INFO

阅读全文
0 0