Redis主従高可用性+主従関係の自動切り替え
17854 ワード
Redis主従高可用性+主従関係の自動切り替え
マシン
IP
db01
192.168.0.51(メイン)
db02
192.168.0.52(から) : keepalived MASTER BACKUP Redis
db01-keepalived
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script check_redis {
script "/etc/keepalived/redis-check.sh 127.0.0.1 password"
interval 2
weight -20
fall 3
rise 1
}
vrrp_instance VI_1 {
state BACKUP # BACKUP, MASTER , VIP
interface ens33
virtual_router_id 51
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.0.51
unicast_peer {
192.168.0.52
}
virtual_ipaddress {
192.168.0.55/24
}
track_script {
}
notify_master "/etc/keepalived/redis-master.sh 127.0.0.1 192.168.0.52 6379"
notify_backup "/etc/keepalived/redis-backup.sh 127.0.0.1 192.168.0.52 6379"
}
db02-keepalived
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_redis {
script "/etc/keepalived/redis-check.sh 127.0.0.1"
interval 2
weight -20
fall 3
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.0.52
unicast_peer {
192.168.0.51
}
virtual_ipaddress {
192.168.0.55/24
}
track_script {
check_redis
}
notify_master "/etc/keepalived/redis-master.sh 127.0.0.1 192.168.0.51 6379"
notify_backup "/etc/keepalived/redis-backup.sh 127.0.0.1 192.168.0.51 6379"
}
検出スクリプト
x
==========================
# db01&db02,redis-mster.sh
==========================
#!/bin/bash
# redis , , ,
LOG_FILE=/etc/keepalived/redis.log
RE_CLI="/opt/redis-6.2.1/src/redis-cli -h $1"
function check_redis(){
# redis
if [ $(ps -aux|grep redis-server|grep -v grep|wc -l) -eq 0 ]; then
echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis ") >> $LOG_FILE
/opt/redis-6.2.1/src/redis-server /opt/redis-6.2.1/redis.conf &>/dev/null
# redis
if [ $? -eq 0 ]; then
echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis ") >> $LOG_FILE
else
echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis , Keepalived") >> $LOG_FILE
systemctl stop keepalived.service
fi
else
echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis ") >> $LOG_FILE
fi
}
function erase_relation(){
# Redis
$RE_CLI slaveof NO ONE &> /dev/null
echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis ") >> $LOG_FILE
}
check_redis
erase_relation
====================================
# db01&db02,redis-backup.sh
=====================================
#!/bin/bash
#: Redis ,
LOG_FILE=/etc/keepalived/redis.log
RE_CLI="/opt/redis-6.2.1/src/redis-cli -h $1"
function check_redis(){
# redis
if [ $(ps -aux|grep redis-server|grep -v grep|wc -l) -eq 0 ]; then
echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis ") >> $LOG_FILE
/opt/redis-6.2.1/src/redis-server /opt/redis-6.2.1/redis.conf &>/dev/null
# redis
if [ $? -eq 0 ]; then
echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis ") >> $LOG_FILE
else
echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis , Keepalived") >> $LOG_FILE
systemctl stop keepalived.service
fi
else
echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis ") >> $LOG_FILE
fi
}
function slave_redis(){
#
$RE_CLI slaveof NO ONE &>/dev/null
$RE_CLI slaveof $2 $3 &>/dev/null
echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis $2 ") >> $LOG_FILE
}
check_redis
slave_redis $1 $2 $3 # ,
===========================
# redis-check.sh
===========================
#!/bin/bash
/opt/redis-6.2.1/src/redis-cli -h $1 PING &>/dev/null
if [ $? -ne 0 ]; then
systemctl stop keepalived
else
exit 0
fi
# db01
2021-05-01 08:18:53:BACKUP-Redis
2021-05-01 08:18:53:BACKUP-Redis
2021-05-01 08:18:53:BACKUP-Redis 192.168.0.52
2021-05-01 08:18:58:MASTER-Redis
2021-05-01 08:18:58:MASTER-Redis
2021-05-01 08:19:52:BACKUP-Redis
2021-05-01 08:19:52:BACKUP-Redis 192.168.0.52
# db02
2021-05-01 08:18:53:BACKUP-Redis
2021-05-01 08:18:53:BACKUP-Redis
2021-05-01 08:18:53:BACKUP-Redis 192.168.0.51
2021-05-01 08:19:28:MASTER-Redis
2021-05-01 08:19:28:MASTER-Redis
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script check_redis {
script "/etc/keepalived/redis-check.sh 127.0.0.1 password"
interval 2
weight -20
fall 3
rise 1
}
vrrp_instance VI_1 {
state BACKUP # BACKUP, MASTER , VIP
interface ens33
virtual_router_id 51
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.0.51
unicast_peer {
192.168.0.52
}
virtual_ipaddress {
192.168.0.55/24
}
track_script {
}
notify_master "/etc/keepalived/redis-master.sh 127.0.0.1 192.168.0.52 6379"
notify_backup "/etc/keepalived/redis-backup.sh 127.0.0.1 192.168.0.52 6379"
}
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_redis {
script "/etc/keepalived/redis-check.sh 127.0.0.1"
interval 2
weight -20
fall 3
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.0.52
unicast_peer {
192.168.0.51
}
virtual_ipaddress {
192.168.0.55/24
}
track_script {
check_redis
}
notify_master "/etc/keepalived/redis-master.sh 127.0.0.1 192.168.0.51 6379"
notify_backup "/etc/keepalived/redis-backup.sh 127.0.0.1 192.168.0.51 6379"
}
==========================
# db01&db02,redis-mster.sh
==========================
#!/bin/bash
# redis , , ,
LOG_FILE=/etc/keepalived/redis.log
RE_CLI="/opt/redis-6.2.1/src/redis-cli -h $1"
function check_redis(){
# redis
if [ $(ps -aux|grep redis-server|grep -v grep|wc -l) -eq 0 ]; then
echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis ") >> $LOG_FILE
/opt/redis-6.2.1/src/redis-server /opt/redis-6.2.1/redis.conf &>/dev/null
# redis
if [ $? -eq 0 ]; then
echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis ") >> $LOG_FILE
else
echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis , Keepalived") >> $LOG_FILE
systemctl stop keepalived.service
fi
else
echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis ") >> $LOG_FILE
fi
}
function erase_relation(){
# Redis
$RE_CLI slaveof NO ONE &> /dev/null
echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis ") >> $LOG_FILE
}
check_redis
erase_relation
====================================
# db01&db02,redis-backup.sh
=====================================
#!/bin/bash
#: Redis ,
LOG_FILE=/etc/keepalived/redis.log
RE_CLI="/opt/redis-6.2.1/src/redis-cli -h $1"
function check_redis(){
# redis
if [ $(ps -aux|grep redis-server|grep -v grep|wc -l) -eq 0 ]; then
echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis ") >> $LOG_FILE
/opt/redis-6.2.1/src/redis-server /opt/redis-6.2.1/redis.conf &>/dev/null
# redis
if [ $? -eq 0 ]; then
echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis ") >> $LOG_FILE
else
echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis , Keepalived") >> $LOG_FILE
systemctl stop keepalived.service
fi
else
echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis ") >> $LOG_FILE
fi
}
function slave_redis(){
#
$RE_CLI slaveof NO ONE &>/dev/null
$RE_CLI slaveof $2 $3 &>/dev/null
echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis $2 ") >> $LOG_FILE
}
check_redis
slave_redis $1 $2 $3 # ,
===========================
# redis-check.sh
===========================
#!/bin/bash
/opt/redis-6.2.1/src/redis-cli -h $1 PING &>/dev/null
if [ $? -ne 0 ]; then
systemctl stop keepalived
else
exit 0
fi
# db01
2021-05-01 08:18:53:BACKUP-Redis
2021-05-01 08:18:53:BACKUP-Redis
2021-05-01 08:18:53:BACKUP-Redis 192.168.0.52
2021-05-01 08:18:58:MASTER-Redis
2021-05-01 08:18:58:MASTER-Redis
2021-05-01 08:19:52:BACKUP-Redis
2021-05-01 08:19:52:BACKUP-Redis 192.168.0.52
# db02
2021-05-01 08:18:53:BACKUP-Redis
2021-05-01 08:18:53:BACKUP-Redis
2021-05-01 08:18:53:BACKUP-Redis 192.168.0.51
2021-05-01 08:19:28:MASTER-Redis
2021-05-01 08:19:28:MASTER-Redis