一、环境说明
1、操作系统内核版本:Centos7
2、Keepalived软件版本:keepalived-1.3.5
二、环境配置
1、主Keepalived服务器IP地址 192.168.2.104
2、备Keepalived服务器IP地址 192.168.2.105
3、Keepalived虚拟IP地址 192.168.2.201
三、安装
1)关闭Selinux
临时关闭:
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
永久关闭:
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled
重启服务reboot
2)安装redis
wget http://download.redis.io/releases/redis-3.0.0.tar.gz
tar -zxvf redis-3.0.0.tar.gz -C .
cd /opt/redis-3.0.0
make PREFIX=/opt/redis install
cp /opt/redis-3.0.0/redis.conf /opt/redis/bin
cd /usr/local/redis/bin
./redis-server ./redis.conf
3)安装keepalived
yum -y install keepalived
4)配置
vim /etc/keepalived/keepalived.conf
#192.168.2.104配置
global_defs {
router_id Node104
}
vrrp_script check_server {
script "/opt/redis/redis-check.sh"
interval 1
weight -10
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface bond0
virtual_router_id 51
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.201
}
track_script {
check_server
}
notify_master "/opt/redis/redis-to-master.sh"
notify_backup "/opt/redis/redis-to-slave.sh"
}
#192.168.2.105配置
global_defs {
router_id Node105
}
vrrp_script check_server {
script "/opt/redis/redis-check.sh"
interval 1
weight -10
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface bond0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.201
}
track_script {
check_server
}
notify_master "/opt/redis/redis-to-master.sh"
notify_backup "/opt/redis/redis-to-slave.sh"
}
备注:同一局域网中非同个keepalived集群,不能使用相同的 virtual_router_id 值
vim /opt/redis/redis-check.sh
###### 192.168.2.104 192.168.2.105 配置
#!/bin/bash
# redis-check.sh
MANUAL_DOWN_FILE="/opt/redis/down"
if [ -e $MANUAL_DOWN_FILE ];then
echo "down file exist,exit 1"
exit 1
fi
REDIS_COUNT=`ps -C redis-server --no-headers | wc -l`
if [ "$REDIS_COUNT" -eq "0" ];then
echo "redis-server is down"
exit 1
fi
exit 0
vim /opt/redis/redis-to-master.sh
# 192.168.2.104 192.168.2.105 共同配置
#!/bin/sh
# redis-to-master.sh
REDIS_HOME="/opt/redis"
REDIS_LOG_HOME="/data2/redis-logs"
PASSWD="gzdata"
${REDIS_HOME}/bin/redis-cli -a ${PASSWD} slaveof no one
perl -pi -e 's/^slaveof.*/slaveof no one/' ${REDIS_HOME}/bin/redis.conf
mkdir -p ${REDIS_LOG_HOME}
echo $(date "+%Y-%m-%d %H:%M:%S") "the redis is to be the master." >> ${REDIS_LOG_HOME}/redis-keepalived.log
vim /opt/redis/redis-to-slave.sh
# 192.168.2.104 配置 (192.168.2.105配置只需更改下面IP即可)
#!/bin/sh
# redis-to-slave.sh
REDIS_HOME="/opt/redis"
REDIS_LOG_HOME="/data2/redis-logs"
PASSWD="gzdata"
PEER_HOST="192.168.2.104"
PEER_PORT=6379
${REDIS_HOME}/bin/redis-cli -a ${PASSWD} slaveof $PEER_HOST $PEER_PORT
perl -pi -e "s/^slaveof.*/slaveof $PEER_HOST $PEER_PORT/" ${REDIS_HOME}/bin/redis.conf
mkdir -p ${REDIS_LOG_HOME}
echo $(date "+%Y-%m-%d %H:%M:%S") "the redis is to be the slave." >> ${REDIS_LOG_HOME}/redis-keepalived.log
5)启动
启动redis: redis-server redis.conf
设置开机自启:
# vim /usr/lib/systemd/system/redis.service
[Unit]
Description=redis service
After=network.target
[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/opt/redis/bin/redis-server /opt/redis/bin/redis.conf
ExecReload=/opt/redis/bin/redis-cli -a gzdata shutdown; /opt/redis/bin/redis-server /opt/redis/bin/redis.conf
ExecStop=/opt/redis/bin/redis-cli -a gzdata shutdown;
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 设置权限
chmod 0644 /usr/lib/systemd/system/redis.service
# redis启动
systemctl start redis
# redis停止
systemctl stop redis
# redis开机自启
systemctl enable redis
# 查看服务
systemctl list-units --type=service | grep redis
# 查看是否开机自启
systemctl list-unit-files | grep redis
启动keepalived: systemctl start keepalived
设置开机自启: systemctl enable keepalived
6)原理
只要存在 /opt/redis/down 这个文件 或者 redis 服务宕机, 就会自动切换VIP至备机,同时切换redis主备模式。