天天看點

keepalived搭建主備redis高可用

一、環境說明

   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主備模式。

繼續閱讀