Redis之主從複製
阿新 • • 發佈:2021-01-30
主從複製
高可用
系統架構設計中,減少系統不能服務的時間,消除基礎架構中的單點故障
redis屬於單程序單執行緒,若出現故障,則依賴它的其他服務則不能正常工作,所有需要redis高可用方案:主從複製+哨兵
主從複製
啟動一個redis服務,作為master,可讀可寫
複製多個該redis服務放到其他機器,作為slaves,分擔讀的壓力,提高可用性
同時不斷同步master的資料到slaves,主從同步
實現方式
- Linux命令列,前臺啟動
#master
sudo /etc/init.d/redis-server start
#slave1
sudo redis-server --port 6300 --slaveof 127.0.0.1 6379
#slave2
sudo redis-server --port 6400 --slaveof 127.0.0.1 6379
#連線slave1
redis-cli -h localhost -p 6300
>ping
>keys *
>set name jack #提示不能寫
>info replication #檢視主從複製狀況
- redis命令
#成為誰的從
slaveof ip port
#成為主
slaveof no one
- 配置檔案
#啟動master
sudo redis-server /etc/redis/redis.conf
#配置slave
sudo vim /home/lauf/redis_6300.conf
#編輯配置檔案
slaveof 127.0.0.1 6379
port 6300
daemonize yes
#啟動slave
sudo redis-server redis_6300.conf
redis-cli -h localhost -p 6300
>info replication
master故障了,可以手動選個slave,升為主(slaveof no one),再將其他的slave,手動更改為當前master的slave
自動設定,自動故障轉移–>哨兵
哨兵
哨兵程序定期與redis的主從進行通訊,當哨兵認為主掛掉了,就自動切換一個從為主
哨兵可以同時監控多個master/slave
安裝哨兵
sudo apt-get install redis-sentinel
#關閉預設啟動的哨兵
sudo /etc/init.d/redis-sentinel stop
#配置哨兵
sudo vim sentinel.conf
port 26379
sentinel monitor master_name ip port vote_num1 #vote_num 哨兵程序投票認為master down
#驗證master的密碼
sentinel auth-pass master_name 123
#master失聯多久認為,掛掉 30s
sentinel down-after-milliseconds master_name 30000
例子:
啟動一個master,兩個slave
#master
sudo /etc/init.d/redis-server start
#slave1
sudo redis-server --port 6300 --slaveof 127.0.0.1 6379
#slave2
sudo redis-server --port 6301 --slaveof 127.0.0.1 6379
#啟動哨兵
sudo redis-sentinel sentinel.conf
#關閉master
sudo /etc/init.d/redis-server stop
#觀察哨兵的日誌(前臺啟動)
python操作哨兵
from redis.sentinel import Sentinel
#連線哨兵
sentinel=Sentinel([(ip,port)],socket_timeout=0.1)
#初始化master 連線
master=sentinel.master_for("master_name",socket_timeout=0.1,db=1)
slave=sentinel.slave_for("master_name",socket_timeout=0.1,db=1)
#執行redis命令
master.set("name","jack")
slave.get("name")