CentOS下Redis高可用安裝筆記

jopen 9年前發布 | 25K 次閱讀 Redis NoSQL數據庫

(WJW)Redis高可用安裝筆記

[x] 安裝環境介紹:

Master: T1

Slave: T2

VIP: 192.168.68.45

</blockquote>


[x] 安裝Redis(Master,Slave)

注意: 安裝redis前flushall的修改

查找src/redis.c文件,把

`{"flushdb",flushdbCommand,1,"w",0,NULL,0,0,0,0,0},`  
 `{"flushall",flushallCommand,1,"w",0,NULL,0,0,0,0,0},`

修改成:

`{"xflushdb",flushdbCommand,1,"w",0,NULL,0,0,0,0,0},`  
 `{"xflushall",flushallCommand,1,"w",0,NULL,0,0,0,0,0},`
</blockquote>

vi /etc/sysctl.conf
添加一行: vm.overcommit_memory=1

mkdir /opt/redis mkdir /opt/redis/log mkdir /opt/redis/db

tar zxvf ./redis-2.8.17.tar.gz cd redis-2.8.17 make PREFIX=/opt/redis install</pre>

[x] Redis啟動腳本(Master,Slave):/opt/redis/bin/startRedis.sh

#!/bin/bash

basedir=dirname $0 echo "Redis BASE DIR:$basedir" cd $basedir

nohup ./redis-server ./redis.conf > /dev/null 2>&1 &</pre>

[x] Redis停止腳本(Master,Slave):/opt/redis/bin/StopRedis.sh

#!/bin/sh

basedir=dirname $0 echo "Redis BASE DIR:$basedir" cd $basedir

./redis-cli -h localhost -a 123456 shutdown</pre>

[x] Redis配置文件(Master,Slave):/opt/redis/bin/redis.conf

#requirepass 123456

pidfile /opt/redis/bin/redis.pid logfile /opt/redis/log/redis.log dir /opt/redis/db/

daemonize yes port 6379 timeout 300 loglevel warning databases 16 maxmemory 1g

不要快照

save 900 1

save 300 10

save 60 10000

rdbcompression yes

dbfilename dump.rdb

使用AOF

appendonly yes appendfsync everysec</pre>

[x] 安裝Keepalived(Master,Slave):

#wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
tar zxvf keepalived-1.2.13.tar.gz
cd ./keepalived-1.2.13
./configure
make 
make install

cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ cp /usr/local/sbin/keepalived /usr/sbin/ mkdir /etc/keepalived cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ chkconfig --add keepalived

chkconfig --level 35 keepalived on

service keepalived start</pre>

[x] notify_*解釋

Keepalived在轉換狀態時會依照狀態來呼叫:
當進入Master狀態時會呼叫notify_master
當進入Backup狀態時會呼叫notify_backup
當發現異常情況時(track_script,track_interface失敗)進入Fault狀態呼叫notify_fault
當Keepalived程序終止時則呼叫notify_stop

[x] 在Master上創建如下配置文件:

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs { notification_email { root@localhost } notification_email_from root@localhost smtp_server localhost smtp_connect_timeout 30 router_id LVS_REDIS }

vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh" ###監控腳本 interval 2 ###監控時間 }

vrrp_instance VI_1 { nopreempt ###不搶占,防止腦裂 state MASTER #備的是BACKUP interface br0 virtual_router_id 51 priority 100 #備的是90 advert_int 1 authentication { auth_type PASS auth_pass redis } virtual_ipaddress { 192.168.68.45 }

track_script {
  chk_redis                       ###執行上面定義的chk_redis
}

notify_master /etc/keepalived/scripts/redis_master.sh
notify_backup /etc/keepalived/scripts/redis_backup.sh
notify_fault  /etc/keepalived/scripts/redis_fault.sh
notify_stop   /etc/keepalived/scripts/redis_stop.sh

}</pre>

[x] 在Slave上創建如下配置文件:

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs { notification_email { root@localhost } notification_email_from root@localhost smtp_server localhost smtp_connect_timeout 30 router_id LVS_REDIS }

vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh" ###監控腳本 interval 2 ###監控時間 }

vrrp_instance VI_1 { nopreempt ###不搶占,防止腦裂 state BACKUP #備的是BACKUP interface br0 virtual_router_id 51 priority 90 #備的是90 advert_int 1 authentication { auth_type PASS auth_pass redis } virtual_ipaddress { 192.168.68.45 }

track_script {
  chk_redis                       ###執行上面定義的chk_redis
}

notify_master /etc/keepalived/scripts/redis_master.sh
notify_backup /etc/keepalived/scripts/redis_backup.sh
notify_fault  /etc/keepalived/scripts/redis_fault.sh
notify_stop   /etc/keepalived/scripts/redis_stop.sh

}</pre>

[x] 在Master和Slave上創建監控Redis的腳本:

mkdir /etc/keepalived/scripts/

vi /etc/keepalived/scripts/redis_check.sh

#!/bin/bash

C_DATE=date +"[%Y-%m-%d %H:%M:%S]" ALIVE=/opt/redis/bin/redis-cli PING

if [ "$ALIVE" == "PONG" ]; then echo "${C_DATE} $ALIVE" exit 0 else echo "${C_DATE} $ALIVE" exit 1 fi</pre>

[x] 在Master與Slave創建如下腳本notify_fault和notify_stop:

vim /etc/keepalived/scripts/redis_fault.sh

#!/bin/bash

C_DATE=date +"[%Y-%m-%d %H:%M:%S]" LOGFILE=/var/log/keepalived-redis-state.log

echo "${C_DATE} [fault]" >> $LOGFILE</pre>

vim /etc/keepalived/scripts/redis_stop.sh

#!/bin/bash

C_DATE=date +"[%Y-%m-%d %H:%M:%S]" LOGFILE=/var/log/keepalived-redis-state.log

echo "${C_DATE} [stop]" >> $LOGFILE</pre>

[x] 在Master上創建notity_master與notify_backup腳本:

vim /etc/keepalived/scripts/redis_master.sh

#!/bin/bash

C_DATE=date +"[%Y-%m-%d %H:%M:%S]" REDISCLI="/opt/redis/bin/redis-cli" LOGFILE="/var/log/keepalived-redis-state.log"

echo "${C_DATE} [master]" >> $LOGFILE

當keepalived配置為"搶占式"時,打開下面注釋

echo "Being master...." >> $LOGFILE 2>&1

echo "Run SLAVEOF cmd ..." >> $LOGFILE

$REDISCLI SLAVEOF T2 6379 >> $LOGFILE 2>&1

sleep 10 #延遲10秒以后待數據同步完成后再取消同步狀態

echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1</pre>

vim /etc/keepalived/scripts/redis_backup.sh

#!/bin/bash

C_DATE=date +"[%Y-%m-%d %H:%M:%S]" REDISCLI="/opt/redis/bin/redis-cli" LOGFILE="/var/log/keepalived-redis-state.log"

echo "${C_DATE} [backup]" >> $LOGFILE

當keepalived配置為"搶占式"時,打開下面注釋

echo "Being slave...." >> $LOGFILE 2>&1

sleep 15 #延遲15秒待數據被對方同步完成之后再切換主從角色

echo "Run SLAVEOF cmd ..." >> $LOGFILE $REDISCLI SLAVEOF T2 6379 >> $LOGFILE 2>&1</pre>

[x] 在Slave上創建notity_master與notify_backup腳本:

vim /etc/keepalived/scripts/redis_master.sh

#!/bin/bash

C_DATE=date +"[%Y-%m-%d %H:%M:%S]" REDISCLI="/opt/redis/bin/redis-cli" LOGFILE="/var/log/keepalived-redis-state.log"

echo "${C_DATE} [master]" >> $LOGFILE

當keepalived配置為"搶占式"時,打開下面注釋

echo "Being master...." >> $LOGFILE 2>&1

echo "Run SLAVEOF cmd ..." >> $LOGFILE

$REDISCLI SLAVEOF T1 6379 >> $LOGFILE 2>&1

sleep 10 #延遲10秒以后待數據同步完成后再取消同步狀態

echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1</pre>

vim /etc/keepalived/scripts/redis_backup.sh

#!/bin/bash

C_DATE=date +"[%Y-%m-%d %H:%M:%S]" REDISCLI="/opt/redis/bin/redis-cli" LOGFILE="/var/log/keepalived-redis-state.log"

echo "${C_DATE} [backup]" >> $LOGFILE

當keepalived配置為"搶占式"時,打開下面注釋

echo "Being slave...." >> $LOGFILE 2>&1

sleep 15 #延遲15秒待數據被對方同步完成之后再切換主從角色

echo "Run SLAVEOF cmd ..." >> $LOGFILE $REDISCLI SLAVEOF T1 6379 >> $LOGFILE 2>&1</pre>

[x] 在Master和Slave上,給監控腳本都加上可執行權限:

chmod +x /etc/keepalived/scripts/*.sh

[x] 啟動步驟:

  1. 啟動Master上的Redis

    /opt/redis/bin/startRedis.sh

  2. 啟動Slave上的Redis

    /opt/redis/bin/startRedis.sh

  3. 啟動Master上的Keepalived

    service keepalived start

  4. 啟動Slave上的Keepalived

    service keepalived start

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!