redis+Keepalived實現Redis主從複製

來源:互聯網
上載者:User

標籤:

redis+Keepalived實現Redis主從複製:

環境:CentOs6.5
Master: 10.10.10.203
Slave:   10.10.10.204
Virtural IP Address (VIP): 10.10.10.205


所需軟體:
keepalived-1.2.12.tar.gz
redis-2.8.7.tar.gz

實現功能:
當 Master 與 Slave 均運作正常時, Master負責服務,Slave負責Standby;
當 Master 掛掉,Slave 正常時, Slave接管服務,同時關閉主從複製功能;


一、安裝配置前準備工作:

 yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel

Redis屬於記憶體資料庫,所以調優都集中到了記憶體上,需要將 vm.overcommit 設定為1
echo "vm.overcommit_memory=1" >> /etc/sysctl
sysctl -p

1.在主伺服器10.10.10.203上面做下面操作
echo " 10.10.10.203 gc-dabairedis1" >> /etc/hosts
echo " 10.10.10.204 gc-dabairedis2" >> /etc/hosts
2.在從伺服器10.10.10.204上面做下面操作
echo " 10.10.10.203 gc-dabairedis1" >> /etc/hosts
echo " 10.10.10.204 gc-dabairedis2" >> /etc/hosts

二、在Master和Slave上安裝redis:

tar -zxvf redis-2.8.7.tar.gz
cd redis-2.8.7
make && make install
cd src
mkdir -p /usr/local/redis/bin
cp redis-server redis-cli redis-benchmark redis-check-aof redis-check-dump /usr/local/redis/bin/

mkdir -p /usr/local/redis/etc

將源碼中的 redis.conf 複製到 /usr/local/redis/etc/
redis-2.8.7]# cp redis.conf /usr/local/redis/etc/

修改 /usr/local/redis/etc/redis.conf裡面可以把 daemonize no 修改為daemonize yes

製作一個 init.d 的啟動指令碼:

 

vim /etc/init.d/redis-server
chmod o+x /etc/init.d/redis-server
chkconfig --add redis-server
/etc/init.d/redis-server start

###########################################################################################
三、在Master和Slave上安裝keepalived:

tar -zxvf keepalived-1.2.12.tar.gz
cd keepalived-1.2.12

./configure
make && make install

cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
chmod +x /etc/init.d/keepalived
chkconfig --add keepalived

mkdir /etc/keepalived
ln -s /usr/local/sbin/keepalived /usr/sbin

 

Keepalived在轉換狀態時會依照狀態來呼叫:
當進入Master狀態時會呼叫notify_master
當進入Backup狀態時會呼叫notify_backup
當發現異常情況時進入Fault狀態呼叫notify_fault
當Keepalived程式終止時則呼叫notify_stop

 Master上建立配置:

在Master上建立設定檔 keepalived.conf 如下
vim /etc/keepalived/keepalived.conf

 1 vrrp_script chk_redis { 2 script "/etc/keepalived/scripts/redis_check.sh"  3 interval 1 4 } 5  6 vrrp_instance mes_Redis { 7 state MASTER 8 interface eth0  9 garp_master_delay 1010 smtp_alert11 virtual_router_id 312 priority 10113 nopreempt14 advert_int 115 authentication {16 auth_type PASS17 auth_pass 111118 }19 virtual_ipaddress {20 10.10.10.205 21 }22 track_script {23 chk_redis24 }25 notify_master /etc/keepalived/scripts/redis_master.sh 26 notify_backup /etc/keepalived/scripts/redis_slave.sh27 notify_fault /etc/keepalived/scripts/redis_fault.sh28 notify_stop /etc/keepalived/scripts/redis_stop.sh29 }

在Redis Master上建立notity_master與notify_backup指令碼:

vim /etc/keepalived/scripts/redis_master.sh #!/bin/bashREDISCLI="/usr/local/redis/bin/redis-cli"LOGFILE="/var/log/keepalived-redis-state.log"echo "[master]" >> $LOGFILEdate >> $LOGFILEecho "Being master...." >> $LOGFILE 2>&1echo "Run SLAVEOF cmd ..." >> $LOGFILE$REDISCLI SLAVEOF 10.10.10.204 6379 >> $LOGFILE  2>&1sleep 5 #延遲10秒以後待資料同步完成後再取消同步狀態echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1vim /etc/keepalived/scripts/redis_backup.sh #!/bin/bashREDISCLI="/usr/local/redis/bin/redis-cli"LOGFILE="/var/log/keepalived-redis-state.log"echo "[backup]" >> $LOGFILEdate >> $LOGFILEecho "Being slave...." >> $LOGFILE 2>&1sleep 15 #延遲15秒待資料被對方同步完成之後再切換主從角色echo "Run SLAVEOF cmd ..." >> $LOGFILE$REDISCLI SLAVEOF 10.10.10.204 6379 >> $LOGFILE  2>&1

在slave上建立配置:

keepalived.conf 如下:

 vim /etc/keepalived/keepalived.conf
1 vrrp_script chk_redis { 2 script "/etc/keepalived/scripts/redis_check.sh" ###監控指令碼 3 interval 1 ###監控時間 4 } 5 6 vrrp_instance mes_Redis { 7 state BACKUP ###設定為BACKUP 8 interface eth0 ###監控網卡 9 garp_master_delay 1010 smtp_alert11 virtual_router_id 312 priority 100 ###比MASTRE權重值低 13 nopreempt14 advert_int 115 authentication {16 auth_type PASS17 auth_pass 1111 ###密碼與MASTRE相同18 }19 virtual_ipaddress {20 10.10.10.205 ###VIP地址 21 }22 track_script {23 chk_redis ###執行上面定義的chk_redis24 }25 notify_master /etc/keepalived/scripts/redis_master.sh26 notify_backup /etc/keepalived/scripts/redis_backup.sh27 notify_fault /etc/keepalived/scripts/redis_fault.sh28 notify_stop /etc/keepalived/scripts/redis_stop.sh29 }

在Redis Slave上建立notity_master與notify_backup指令碼:

vim /etc/keepalived/scripts/redis_master.sh#!/bin/bashREDISCLI="/usr/local/redis/bin/redis-cli"LOGFILE="/var/log/keepalived-redis-state.log"echo "[master]" >> $LOGFILEdate >> $LOGFILEecho "Being master...." >> $LOGFILE 2>&1echo "Run SLAVEOF cmd ..." >> $LOGFILE$REDISCLI SLAVEOF 10.10.10.203 6379 >> $LOGFILE  2>&1sleep 5 #延遲10秒以後待資料同步完成後再取消同步狀態echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
vim /etc/keepalived/scripts/redis_backup.sh#!/bin/bashREDISCLI="/usr/local/redis/bin/redis-cli"LOGFILE="/var/log/keepalived-redis-state.log"echo "[backup]" >> $LOGFILEdate >> $LOGFILEecho "Being slave...." >> $LOGFILE 2>&1sleep 15 #延遲15秒待資料被對方同步完成之後再切換主從角色echo "Run SLAVEOF cmd ..." >> $LOGFILE$REDISCLI SLAVEOF 10.10.10.203 6379 >> $LOGFILE 2>&1

在Master和Slave上建立相同監控Redis的指令碼:

vim /etc/keepalived/scripts/redis_check.sh#!/bin/bashALIVE=`/opt/redis/bin/redis-cli PING`if [ "$ALIVE" == "PONG" ]; then  echo $ALIVE  exit 0else  echo $ALIVE  exit 1fi

Master與Slave建立如下相同的指令碼:

 vim /etc/keepalived/scripts/redis_fault.sh#!/bin/bashLOGFILE=/var/log/keepalived-redis-state.logecho "[fault]" >> $LOGFILEdate >> $LOGFILEvim /etc/keepalived/scripts/redis_stop.sh#!/bin/bashLOGFILE=/var/log/keepalived-redis-state.log echo "[stop]" >> $LOGFILEdate >> $LOGFILE

給指令碼都加上可執行許可權:
chmod +x /etc/keepalived/scripts/*.sh

指令碼建立完成以後,我們開始按照如下流程進行測試:

 1 啟動Master上的Redis 2 /etc/init.d/redis start 3 啟動Slave上的Redis 4 /etc/init.d/redis start 5 啟動Master上的Keepalived 6 /etc/init.d/keepalived start 7 啟動Slave上的Keepalived 8 /etc/init.d/keepalived start

 

redis+Keepalived實現Redis主從複製

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.