日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis双机热备方案--转

發布時間:2025/4/5 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis双机热备方案--转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://luyx30.blog.51cto.com/1029851/1350832

參考資料:

?

http://patrick-tang.blogspot.com/2012/06/redis-keepalived-failover-system.html

http://deidara.blog.51cto.com/400447/302402

http://my.oschina.net/guol/blog/182491

http://shiguanghui.iteye.com/blog/2001499

?

背景

?

目前,Redis集群的官方方案還處在開發測試中,未集成到穩定版中。且目前官方開發中的Redis Cluster提供的功能尚不完善(可參考官方網站或http://www.redisdoc.com/en/latest/topic/cluster-spec.html),在生產環境中不推薦使用。通過調研發現市面上要實現采用單一的IP來訪問,大多采用keepalived實現redis的雙機熱備作為過渡方案。

?

環境部署

?

環境介紹: ? ?
Master: 192.168.1.218 ? ? redis,keepalived ? ??
Slave: 192.168.1.219 ? ? ? ?redis,keepalived ? ??
Virtural IP Address (VIP): ?192.168.1.220

?

設計思路:

兩個redis server主從備份。提供redis 服務高可用;兩個keepalived 服務主從備份,提供VIP 服務的高可用。

1)每臺redis server分別有主,從兩個配置文件(redis_master.conf, redis_slave.conf),通過啟動腳本啟動服務,啟動腳本會檢測這個redis集群中的其他服務器的角色,如果有master 服務存在,則以slave角色啟動,否則將自己以master服務器啟動;

2) keepalived 監控腳本,定時(頻率:每秒一次)檢測當前服務器是否獲取集群VIP,如果獲取集群VIP,則將本服務器上的redis服務器設置為master。同時將遠端的其他redis服務器設置為slave;保證獲取集群VIP的redis 服務器角色為master,其他的設置為slave。

3) keepalived 監控腳本,還會自動檢測當前redis服務器是否正常,如果連續兩次檢測異常,則停掉本本機的keepalived服務,釋放集群VIP,讓去漂移到其他可以提供redis 服務的服務器上;

4)當 Master 與 Slave 均運作正常時, Master負責服務,Slave負責同步數據;當 Master 掛掉,Slave 正常時, Slave接管服務,同時關閉主從復制功能;當 Master 恢復正常,則從Slave同步數據,同步數據之后關閉主從復制功能,恢復Master身份,于此同時Slave等待Master同步數據完成之后,恢復Slave身份。然后依次循環。

?

實施步驟:

----創建專用用戶

useradd -g develop redisadmin ? ?
echo Hisun@1125|passwd --stdin redisadmin

說明:以下部署過程都是在root(或具備sudo權限的賬號)賬戶下進行。

----安裝配置redis

1.下載redis源碼

cd

wget?http://download.redis.io/releases/redis-2.8.3.tar.gz

2.安裝redis

tar -zxvf redis-2.8.3.tar.gz

cd redis-2.8.3

#reds的安裝可以不用執行configure

make

#測試

make test

####在速度較慢的機器上執行make test可能出現下列錯誤,無影響

#*** [err]: Test replication partial resync: no backlog in tests/integration/replication-psync.tcl

3.配置redis

#創建redis主目錄

mkdir -p /usr/local/redis-2.8.3/{bin,conf,logs}

cp -a -R -p src/redis-server /usr/local/redis-2.8.3/bin/

cp -a -R -p src/redis-cli /usr/local/redis-2.8.3/bin/

cp -a -R -p src/redis-benchmark /usr/local/redis-2.8.3/bin/

cp -a -R -p src/redis-sentinel /usr/local/redis-2.8.3/bin/

cp -a -R -p src/redis-check-dump /usr/local/redis-2.8.3/bin/

cp -a -R -p src/redis-check-aof /usr/local/redis-2.8.3/bin/

#創建redis啟動腳本

vi /usr/local/redis-2.8.3/redis-start.sh

####以下為master上的配置,slave上的配置只需要修改對應的LOCALIP和REMOTEIP即可。

#!/bin/bash REDISPATH=/usr/local/redis-2.8.3 REDISCLI=$REDISPATH/bin/redis-cli LOGFILE=$REDISPATH/logs/redis-state.log LOCALIP=192.168.1.218 REMOTEIP=192.168.1.219REMOTEREDISROLE=`$REDISCLI -h $REMOTEIP info | grep "role"` if grep "role:master" <<< $REMOTEREDISROLE ; then#start as slave$REDISPATH/bin/redis-server $REDISPATH/conf/redis_slave.confif [ "$?" == "0" ];thenecho "[INFO]`date +%F/%H:%M:%S` :$LOCALIP start as slave successful." >> $LOGFILEelseecho "[ERROR]`date +%F/%H:%M:%S` :$LOCALIP start as slave error." >> $LOGFILEfi else#start as master$REDISPATH/bin/redis-server $REDISPATH/conf/redis_master.confif [ "$?" == "0" ];thenecho "[INFO]`date +%F/%H:%M:%S` :$LOCALIP start as master successful." >> $LOGFILEelseecho "[ERROR]`date +%F/%H:%M:%S` :$LOCALIP start as master error." >> $LOGFILEfi fi #創建redis關閉腳本 vi /usr/local/redis-2.8.3/redis-stop.sh ####以下為master上的配置,slave上的配置相同。 #!/bin/bash REDISPATH=/usr/local/redis-2.8.3 LOGFILE=$REDISPATH/logs/redis-state.log kill -9 `ps -ef|grep '/bin/redis-server'|grep -v grep|awk '{print $2}'` if [ "$?" == "0" ];thenecho "[INFO]`date +%F/%H:%M:%S` :redis shutdown completed!" >> $LOGFILE elseecho "[ERROR]`date +%F/%H:%M:%S` :redis is not started." >> $LOGFILE fi

#創建redis配置文件 cp -a -R -p redis.conf /usr/local/redis-2.8.3/conf/redis_master.conf cp -a -R -p redis.conf /usr/local/redis-2.8.3/conf/redis_slave.conf #修改redis_master.conf對應配置項: ####192.168.1.218主服務器redis_master.conf對應配置項###### #daemonize no daemonize yes #bind 127.0.0.1 bind 192.168.1.218 logfile "/usr/local/redis-2.8.3/logs/redis.log" #其他配置依據實際生產環境修改 ######################################################## ####192.168.1.219從服務器redis_master.conf對應配置項###### #daemonize no daemonize yes #bind 127.0.0.1 bind 192.168.1.219 logfile "/usr/local/redis-2.8.3/logs/redis.log" #其他配置依據實際生產環境修改 ######################################################## #修改redis_slave.conf對應配置項: ####192.168.1.218主服務器redis_slave.conf對應配置項####### #daemonize no daemonize yes #bind 127.0.0.1 bind 192.168.1.218 logfile "/usr/local/redis-2.8.3/logs/redis.log" # slaveof <masterip> <masterport> slaveof 192.168.1.219 6379 #其他配置依據實際生產環境修改 ######################################################## ####192.168.1.219從服務器redis_slave.conf對應配置項####### #daemonize no daemonize yes #bind 127.0.0.1 bind 192.168.1.219 logfile "/usr/local/redis-2.8.3/logs/redis.log" # slaveof <masterip> <masterport> slaveof 192.168.1.218 6379 #其他配置依據實際生產環境修改 ########################################################

#修改redis的屬主和權限

chmod –R 750 /usr/local/redis-2.8.3/

chown –R redisadmin:develop /usr/local/redis-2.8.3/

----安裝配置keepalived ??

1.下載keepalived源碼Release 1.2.9

注意:最新版為1.2.10測試過程中出錯. ??
wget?http://www.keepalived.org/software/keepalived-1.2.9.tar.gz
2.安裝keepalived

需要安裝以下依賴包: make gcc libpopt-dev libnl-dev libcurl4-openssl-dev popt openssl ??
cd

tar –zxvf keepalived-1.2.9.tar.gz

cd keepalived-1.2.9

./configure --prefix=/usr/local/keepalived

make && make install

3.配置keepalived

#在Master和Slave上創建如下配置文件(可根據實際情況調整):

mv ?/usr/local/keepalived/etc/keepalived/keepalived.conf /usr/local/keepalived/etc/keepalived/keepalived.conf-bak ??
vim /usr/local/keepalived/etc/keepalived/keepalived.conf

vrrp_script chk_redis {script "/usr/local/keepalived/etc/keepalived/scripts/chk_redis.sh" ###監控腳本interval 2 ###監控時間 } vrrp_instance VI_1 {state MASTER ###設置為MASTERinterface eth3 ###監控網卡,依據實際情況來定 virtual_router_id 51priority 101 ###權重值advert_int 1 authentication {auth_type PASS ###加密auth_pass redis ###密碼}track_script {chk_redis ###執行上面定義的chk_redis}virtual_ipaddress {192.168.1.220 ###VIP} }

在Master和Slave上創建監控Redis的腳本 ??
mkdir /usr/local/keepalived/etc/keepalived/scripts ??
vi /usr/local/keepalived/etc/keepalived/scripts/chk_redis.sh

####以下為master上的配置,slave上的配置只需要修改對應的LOCALIP和REMOTEIP即可。

#!/bin/bash REDISPATH=/usr/local/redis-2.8.3 REDISCLI=$REDISPATH/bin/redis-cli LOGFILE=$REDISPATH/logs/redis-state.log LOCALIP=192.168.1.218 REMOTEIP=192.168.1.219 VIP=192.168.1.220VIPALIVE=`ip a | grep "$VIP"` if [ "$VIPALIVE" == "" ]; thenecho "[info]:"`date`" keepalived server is pengding or stop" >> $LOGFILE elseecho "bbb" >> $LOGFILE#check local service is runningif [ "`$REDISCLI –h $LOCALIP –p 6379 PING`" == "PONG" ]; then# check local redis server role.REDISROLE=`$REDISCLI info | grep "role"`if grep "role:slave" <<< $REDISROLE ; then#change local redis server as master echo "[info1]:"`date`" Run SLAVEOF NO ONE cmd ..." >> $LOGFILE$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1#change remoting redis server as slaveREMOTEREDISROLE=`$REDISCLI -h $REMOTEIP info | grep "role"`if grep "role:master" <<< $REMOTEREDISROLE ; thenecho "[info2]:"`date`" Run remote server SLAVEOF cmd ..." >> $LOGFILE$REDISCLI -h $REMOTEIP SLAVEOF $LOCALIP 6379 >> $LOGFILE 2>&1fielseREMOTEREDISROLE=`$REDISCLI -h $REMOTEIP info | grep "role"`if grep "role:master" <<< $REMOTEREDISROLE ; thenecho "[info3]:"`date`" Run remote server SLAVEOF cmd ..." >> $LOGFILE$REDISCLI -h $REMOTEIP SLAVEOF $LOCALIP 6379 >> $LOGFILE 2>&1fifi elseecho "[warn]:"`date`" ?redis server($LOCALIP) is not health..." >> $LOGFILEsleep 1if [ "`$REDISCLI –h $LOCALIP –p 6379 PING`" != "PONG" ]; thenecho "[error]:"`date`" ?redis server($LOCALIP) will be stop..." >> $LOGFILEservice keepalived stopfifi fi 重要:將相應的配置文件放到相應的地方.

#首先在2臺服務器上設置keepalived的啟動文件:

cp -a -R -p /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived

chmod 750 /etc/rc.d/init.d/keepalived

chown root /etc/rc.d/init.d/keepalived?
#然后在2臺服務器上創建配置文件的鏈接:

mkdir /etc/keepalived/

ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

?

系統測試

?

?

?

注意:一定要先啟動redis,再啟動keealived,否則redis_check.sh會將keepalived自動關閉。

腳本創建完成以后,我們開始按照如下流程進行測試: ??
1.啟動Master上的Redis ??
/usr/local/redis-2.8.3/redis-start.sh

#關閉時,直接殺死進程或執行以下腳本

/usr/local/redis-2.8.3/redis-stop.sh

2.啟動Slave上的Redis ??
/usr/local/redis-2.8.3/redis-start.sh

#關閉時,直接殺死進程或執行以下腳本

#/usr/local/redis-2.8.3/redis-stop.sh

3.啟動Master上的Keepalived ??
/etc/rc.d/init.d/keepalived start

#關閉方法

#/etc/rc.d/init.d/keepalived stop

4.啟動Slave上的Keepalived ??
/etc/rc.d/init.d/keepalived start

#關閉方法

#/etc/rc.d/init.d/keepalived stop

?

繼續優化中,未完結。

轉載于:https://www.cnblogs.com/davidwang456/p/3525090.html

總結

以上是生活随笔為你收集整理的Redis双机热备方案--转的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。