redis的集羣:主從複製、CAP、PAXOS、cluster分片集羣01

 

單機、單點、單實例缺點:

1.單點故障 2.容量有限  3. 壓力

 

強一致性

主從複製、讀寫分離會帶來數據一致性問題

1.通過強一致性來解決,即主redis 進行阻塞,直到從redis寫成功。

弱一致性

強一致性帶來阻塞問題,可能會等待很久

1.通過異步方式解決強一致性問題,但是會丟失一部分數據

最終數據一致性

弱一致性會帶來數據丟失問題

1.通過類似kafka 可靠集羣來保證最終數據一致性

 Redis使用默認的異步複製,其特點是低延遲和高性能

在使用 Redis 複製功能時的設置中,強烈建議在 master 和在 slave 中啓用持久化

任何時候數據安全性都是很重要的,所以如果 master 使用複製功能的同時未配置持久化,那麼自動重啓進程這項應該被禁用

 

多實例redis

複製redis文件夾,修改redis.windows.conf 文件,修改6379端口,註釋掉 bind 127.0.0.1(也可以不註釋)

打開cmd,定位到當前實例目錄,輸入redis-server redis.windows.conf

打開redis-cli  ,開始進行主從設置。

打開cmd ,輸入  redis-cli -h 127.0.0.1 -p 6380   或者  redis-cli  -p 6380

6379  主,6380、6381爲從

在6380、6381 redis-cli輸入  slaveof  localhost 6379 (老版本,新版本  REPLICAOF  localhost  6379)

主可以寫,但從只能讀

 

數據同步

停掉6380,然後向主服務器中添加key,再啓動6380,啓動的時候使用從主服務器進行復制

redis-server redis.windows.conf --replicaof localhost 6379  或 redis-server redis.windows.conf --slaveof localhost 6379

 

停止追隨  replicaof no one  或 slaveof no one

即當主庫掛掉後,手動切換一臺從庫爲主庫,同步其餘從庫重新追隨。

 

slave-serve-stale-data yes  從庫數據同步過程中是否支持查詢,yes 支持一邊同步一邊查詢,no 只有跟主redis同步完才支持查詢

slave-read-only yes  從庫是否只讀

repl-diskless-sync no  是否使用磁盤方式傳輸數據,yes爲使用網絡

repl-backlog-size 1mb  積壓數據大小。redis主庫會維護一個隊列,當從庫掛掉一段時間再恢復的時候,如果修改的數據大小大於設置的值,就使用rdb進行恢復。否則使用維護的隊列中的數據。

 

Redis 的 Sentinel(哨兵)

 

新建配置文件,

port 6385
sentinel monitor mymaster 127.0.0.1 6379 2

啓動哨兵  redis-server redis.windows-sentinel.conf --sentinel

會顯示出所有的 slave 從庫

 

哨兵原理,消息的發佈訂閱

 

主從複製,故障轉移數據一致性問題

當主庫掛掉時,其它從庫又沒有寫的能力,那是怎麼保持數據一致性的呢

min-slaves-to-write <slave 數量>    Redis slave 每秒鐘都會 ping master,確認已處理的複製流的數量

min-slaves-max-lag <秒數>    Redis master 會記得上一次從每個 slave 都收到 ping 的時間。用戶可以配置一個最小的 slave 數量,使得它滯後 <= 最大秒數

如果條件不滿足,master 將會回覆一個 error 並且寫入將不被接受。這時候哨兵會重新選出master 庫,進行寫入以及主從同步,最大程度保證數據丟失的比較少

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章