Redis主從架構和高可用性實現過程
還是遷移的事
Redis主從架構和高可用性實現
引言
在當今的應用程序中,高可用性和性能是至關重要的。本文將介紹如何使用Redis主從架構和Linux虛擬服務器(LVS)實現高可用性,同時還會詳細介紹最近完成的Redis集群遷移部署的過程。
什么是Redis?
Redis是一個開源的內存數據庫,它被廣泛用于緩存和數據存儲。它以其出色的性能和靈活的數據結構支持而聞名,因此被許多大規(guī)模應用程序廣泛使用。
Redis主從架構
Redis采用了主從復制的架構,這是一種實現高可用性和橫向擴展的方式。在Redis主從架構中,有一個主服務器和多個從服務器,主服務器用于寫入操作,從服務器用于讀取操作。這可以提高性能和數據冗余。
主服務器
主服務器接收客戶端的寫入請求,并將這些請求復制到從服務器。它負責數據的寫入和維護。
從服務器
從服務器復制主服務器的數據,并用于讀取操作。如果主服務器發(fā)生故障,從服務器可以升級為主服務器,以保持高可用性。
Redis高可用性
高可用性是確保系統(tǒng)在面臨故障時仍然可用的能力。使用Redis主從架構,可以實現高可用性。但為了進一步提高可用性,我們可以引入Linux虛擬服務器(LVS)。
Linux虛擬服務器(LVS)
LVS是一個用于負載均衡的Linux內核模塊。我們這里用到的是實現主從切換,當主服務redis異常時,可以切換從服務器變?yōu)橹鞣掌鳌?/p>
最近的遷移部署過程
遷移計劃
在介紹Redis主從架構和LVS之后,讓我們回顧一下最近的Redis集群遷移部署過程。在遷移之前,我們制定了詳細的遷移計劃和測試流程。
數據備份
首先,我們對現有的Redis集群進行了數據備份。這是確保在遷移期間不會丟失任何數據的關鍵步驟。我們使用了Redis的快照功能來創(chuàng)建數據備份。
redis部署
在備份完成后,我們進行了網絡切換。我們將流量從舊的Redis集群切換到新的Redis集群,同時引入了LVS以實現負載均衡。這個過程需要謹慎地調整網絡配置,以確保平滑切換。
redis部署很簡單,直接編譯安裝就好,因為我們是遷移,所以直接把老的包拿過來用即可
主redis配置文件
# cat redis.conf daemonize yes pidfile "/var/run/redis.pid" port 16465 timeout 300 tcp-keepalive 60 loglevel notice logfile "/data/log/redis.log" databases 16 stop-writes-on-bgsave-error no rdbcompression yes rdbchecksum yes dbfilename "dump.rdb" dir "/data/datafile" masterauth "password" slave-serve-stale-data yes slave-read-only yes repl-ping-slave-period 10 repl-timeout 600 repl-disable-tcp-nodelay no repl-backlog-size 64mb repl-backlog-ttl 3600 slave-priority 100 requirepass "password" maxmemory 10000000000 maxmemory-policy noeviction appendonly no appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb lua-time-limit 5000 slowlog-log-slower-than 20000 slowlog-max-len 128 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 8gb 4gb 600 client-output-buffer-limit pubsub 32mb 8mb 60 aof-rewrite-incremental-fsync yes lazyfree-lazy-expire yes lazyfree-lazy-server-del yes slave-lazy-flush yes aof-use-rdb-preamble yes maxclients 4064
從redis配置文件會多一行
slaveof 主ip 16465
啟動Redis
/data/redis/bin/redis-server /data/redis/conf/redis.conf
查看info信息,確認主可以連接到從庫
lvs部署及配置
keepalive可以直接yum安裝
然后修改keepalived配置文件
# cat /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script chk_16465 {
script "/var/keepalived/scripts/redis_check.sh password 16465"
interval 1
weight -20
rise 3
fall 3
}
vrrp_instance redis_6465 {
state BACKUP
interface bond1
virtual_router_id 52
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
vip
}
track_script {
chk_16465
}
notify_master "/var/keepalived/scripts/redis_master.sh password 16465"
notify_backup "/var/keepalived/scripts/redis_slave.sh password 16465 masterip "
notify_fault "/var/keepalived/scripts/redis_falut.sh"
notify_stop "/var/keepalived/scripts/redis_stop.sh"
}如果是主的話,需要對應修改如下:
state MASTER priority 100
其中涉及到幾個腳本,如下:
#cat /var/keepalived/scripts/redis_check.sh
#!/bin/bash
CMD_RES=`/paic/redis/4.0.10/bin/redis-cli -a $1 -p $2 PING 2>/dev/null`
LOG_FILE="/var/keepalived/logs/redis-state.log"
if [ "$CMD_RES"x == "PONG"x ]; then :
echo "[CHECK] `date`, SUCCESS" >> $LOG_FILE 2>&1
exit 0
else
echo "[CHECK] `date`, ERROR" >> $LOG_FILE 2>&1
exit 1
fi
# cat /var/keepalived/scripts/redis_master.sh
#!/bin/bash
CMD="/paic/redis/4.0.10/bin/redis-cli"
LOG_FILE="/var/keepalived/logs/redis-change.log"
echo "[MASTER] `date`" >> $LOG_FILE
echo "Run SLAVEOF NO ONE cmd" >> $LOG_FILE
$CMD -a $1 -p $2 SLAVEOF NO ONE >> $LOG_FILE 2>&1
#cat /var/keepalived/scripts/redis_slave.sh
#!/bin/bash
CMD="/paic/redis/4.0.10/bin/redis-cli"
LOG_FILE="/var/keepalived/logs/redis-change.log"
echo "[BACKUP] `date`" >> $LOG_FILE
echo "Being slave wait to sync data" >> $LOG_FILE
sleep 1
echo "Run SLAVEOF cmd" >> $LOG_FILE
$CMD -a $1 -p $2 SLAVEOF $3 $2 >> $LOG_FILE 2>&
#cat /var/keepalived/scripts/redis_falut.sh
#!/bin/bash
LOG_FILE="/var/keepalived/logs/redis-state.log"
echo "[FAULT] `date`" >> $LOG_FILE測試
遷移完成后,我們進行了一系列測試,以確保新的Redis集群能夠正常工作。我們模擬了各種故障情況,以驗證高可用性配置的有效性。
當把主的redis進程kiil掉后,可以看到虛擬ip轉移到從機上,通過redis-cli鏈接后,從redis可以正常寫,并且角色轉換為了master。
結論
通過使用Redis主從架構和Linux虛擬服務器,我們成功地實現了高可用性和性能擴展。最近的Redis集群遷移部署過程也順利完成,我們現在擁有一個穩(wěn)定和可靠的Redis環(huán)境,滿足了我們應用程序的需求。
Redis的強大性能和高可用性使其成為許多應用程序的首選數據庫引擎。希望本文對您理解Redis主從架構、高可用性和遷移部署過程有所幫助。
到此這篇關于Redis主從架構和高可用性實現的文章就介紹到這了,更多相關Redis主從架構和高可用性內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python的Flask框架使用Redis做數據緩存的配置方法
Redis數據庫依賴于主存,在關系型數據庫以外再配套Redis管理緩存數據將對性能會有很大的提升,這里我們就來看一下Python的Flask框架使用Redis做數據緩存的配置方法2016-06-06

