1. 程式人生 > 其它 >Redis之主從複製

Redis之主從複製

技術標籤:Redisredis資料庫nosql

主從複製

高可用

系統架構設計中,減少系統不能服務的時間,消除基礎架構中的單點故障
redis屬於單程序單執行緒,若出現故障,則依賴它的其他服務則不能正常工作,所有需要redis高可用方案:主從複製+哨兵

主從複製

啟動一個redis服務,作為master,可讀可寫
複製多個該redis服務放到其他機器,作為slaves,分擔讀的壓力,提高可用性
同時不斷同步master的資料到slaves,主從同步

實現方式

  1. 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 #檢視主從複製狀況
  1. redis命令
#成為誰的從
slaveof ip port
#成為主
slaveof no one 
  1. 配置檔案
#啟動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")