一、環境說明
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
臨時關閉:
[[email protected] ~]# getenforce
Enforcing
[[email protected] ~]# setenforce 0
[[email protected] ~]# getenforce
Permissive
永久關閉:
[[email protected] ~]# 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主備模式。