四、Redis+Keepalived主従ホットスペア配置方案

8150 ワード

目次
 
一、バックアップ方式
二、インストール配置keepalived
三、インストール配置redis

一、バックアップ方式


Redis配置方式は主従方式を採用し、keepalivedを通じて外部に虚IPを提供し、主従自動切替機能を実現する.マスタインスタンスA(master):188.102.2.96スペアインスタンスB(slave):188.102.2.97ダミーIP(VIP):188.102.2.98
正常動作時:ダミーIPはメインインスタンスA上で、データ同期バックアップ:A→BメインインスタンスAダウンタイム:メインインスタンスBは自動的にIPを引き継ぎ、redisをメインモードに変換し、元のメインインスタンスAが回復した後、Aは自動的にバックアップモードに変換し、データ同期バックアップ:A←B、メインスタンバイロール交換、災害対応を実現する.

二、インストール配置keepalived


1、keepalivedを取り付ける
#     
yum install -y curl gcc openssl-devel popt-devel libnl3-devel net-snmp-devel
#   
wget https://www.keepalived.org/software/keepalived-2.0.17.tar.gz
#      
tar zxvf keepalived-2.0.17.tar.gz
cd keepalived-2.0.17
./configure –prefix=/data/keepalived  #     /data/keepalived   
make
make install

2、keepalived(1)を構成するには、まずmasterで次の構成を作成します.
#  keepalived.conf
vim /data/keepalived/keepalived.conf

#         
vrrp_script chk_redis {
    script "/data/keepalived/scripts/redis_check.sh"   ###     
    interval 2                                         ###    
}
vrrp_instance VI_1 {
        state MASTER                            ###   MASTER
        interface ens160                        ###    
        virtual_router_id 51
        priority 101                            ###   , slave  
        authentication {
            auth_type PASS         ###  
            auth_pass redis        ###     slave   
			}
        track_script {
            chk_redis                  ###       chk_redis
        }
        virtual_ipaddress {
             188.102.2.98              ###VIP
        }
        notify_master /data/keepalived/scripts/redis_master.sh
        notify_backup /data/keepalived/scripts/redis_backup.sh
        notify_fault  /data/keepalived/scripts/redis_fault.sh
        notify_stop   /data/keepalived/scripts/redis_stop.sh
}
#   redis_master.sh
vim /data/keepalived/scripts/redis_master.sh

#!/bin/bash
 
REDISCLI="/data/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"
REDISPORT=7001
REDIS_MASTER=188.102.2.96
REDIS_SLAVE=188.102.2.97
 
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
 
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -a redis -h $REDIS_MASTER -p $REDISPORT SLAVEOF $REDIS_SLAVE $REDISPORT >> $LOGFILE  2>&1
sleep 10 #10̬ͬ 
 
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI -a redis -h $REDIS_MASTER -p $REDISPORT SLAVEOF NO ONE >> $LOGFILE 2>&1
#  redis_backup.sh
vim /data/keepalived/scripts/redis_backup.sh

#!/bin/bash
 
REDISCLI="/data/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"
REDISPORT=7001
REDIS_MASTER=188.102.2.96
REDIS_SLAVE=188.102.2.97
 
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
 
sleep 15 #15

             echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -a redis -p $REDISPORT SLAVEOF $REDIS_SLAVE $REDISPORT >> $LOGFILE  2>&1

(2)slaveで次の構成を作成します.
#  keepalived.conf
vim /data/keepalived/keepalived.conf

vrrp_script chk_redis {
                script "/data/keepalived/scripts/redis_check.sh"   ###    
                interval 2                                        ###    
}
vrrp_instance VI_1 {
        state BACKUP                                ###   BACKUP
        interface ens160                            ###    
        virtual_router_id 51
        priority 100                                ###  , ASTRE  
        authentication {
                     auth_type PASS                 ###  
                     auth_pass redis                ###   MASTRE  
        }
        track_script {
                chk_redis                          ###        chk_redis
        }
        virtual_ipaddress {
             188.102.2.98                         ###VIP
        }
        notify_master /data/keepalived/scripts/redis_master.sh
        notify_backup /data/keepalived/scripts/redis_backup.sh
        notify_fault  /data/keepalived/scripts/redis_fault.sh
        notify_stop   /data/keepalived/scripts/redis_stop.sh
}

#  redis_master.sh
vim /data/keepalived/scripts/redis_master.sh

#!/bin/bash
 
REDISCLI="/data/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"
REDISPORT=7001
REDIS_MASTER=188.102.2.96
REDIS_SLAVE=188.102.2.97
 
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
 
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -a redis -h $REDIS_SLAVE -p $REDISPORT SLAVEOF $REDIS_MASTER $REDISPORT >> $LOGFILE  2>&1
sleep 10 #  10                  
 
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI -a redis -h $REDIS_SLAVE -p $REDISPORT SLAVEOF NO ONE >> $LOGFILE 2>&1
#  redis_backup.sh 
vim /data/keepalived/scripts/redis_backup.sh

#!/bin/bash
 
REDISCLI="/data/redis/bin/redis-cli"
LOGFILE="/var/log/keepalived-redis-state.log"
REDISPORT=7001
REDIS_MASTER=188.102.2.96
REDIS_SLAVE=188.102.2.97
 
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
 
sleep 15 #  15                    
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -a redis -p $REDISPORT SLAVEOF $REDIS_MASTER $REDISPORT >> $LOGFILE  2>&1

(3)masterとslaveで次の構成を作成します.
#  redis_check.sh
vim /data/keepalived/scripts/redis_check.sh
 
#!/bin/bash

REDISPORT=7001 
ALIVE=`/data/redis/bin/redis-cli -a redis -p $REDISPORT PING`
if [ "$ALIVE" == "PONG" ]; then
  echo $ALIVE
  exit 0
else
  echo $ALIVE
  exit 1
fi

3、実行権限の追加
chmod +x /data/keepalived/scripts/*.sh

4、keepalivedを起動する
Service keepalived start

 

三、インストール配置redis


1、redisをインストールし、アドレスをダウンロードする:https://redis.io/download
#      (      )
tar zxvf redis-5.0.5.tar.gz
cd redis-5.0.5
./configure
make
make install

注意:システム時間は正しく設定する必要があります
2.redisを配置する.config
#  redis.conf 
vim /data/redis/etc/7001.conf 

daemonize no
pidfile /var/run/redis.pid
port 7001
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile "/data/redis/redis.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
requirepass redis
masterauth redis

3、redisを起動する
#   redis.conf  redis  
/data/redis-7001/bin/redis-server /data/redis-7001/etc/7001.conf


#  start_redis.sh     
#!/bin/bash
/data/redis-7001/bin/redis-server /data/redis-7001/etc/7001.conf   2>&1 &