1,什麼是redis 主從複製redis
支持多個數據庫之間的數據同步。只能一個主數據庫(master),能夠一個或者多個從數據庫(slave)算法
主數據庫,能夠讀寫數據庫
從數據庫,只能夠讀緩存
當主數據庫,作寫的操做的時候,寫完,redis會從給數據庫發送信號,並將數據信息發送給從數據庫,從數據庫備份。服務器
過程: 1:當一個從數據庫啓動時,會向主數據庫發送sync命令, 2:主數據庫接收到sync命令後會開始在後臺保存快照(執行rdb操做),並將保存期間接收到的命令緩存起來 3:當快照完成後,redis會將快照文件和全部緩存的命令發送給從數據庫。 4:從數據庫收到後,會載入快照文件並執行收到的緩存的命令。
2,當主數據據宕機了,怎麼辦?架構
主數據庫,宕機以後,會在從數據庫中從數據庫(slave)中推舉一個數據庫,做爲master 數據庫分佈式
3,如何知道主數據庫宕機?測試
哨兵機制:spa
Redis的哨兵(sentinel) 系統用於管理多個 Redis 服務器,該系統執行如下三個任務: · 監控(Monitoring): 哨兵(sentinel) 會不斷地檢查你的Master和Slave是否運做正常。 · 提醒(Notification):當被監控的某個 Redis出現問題時, 哨兵(sentinel) 能夠經過 API 向管理員或者其餘應用程序發送通知。 · 自動故障遷移(Automatic failover):當一個Master不能正常工做時,哨兵(sentinel) 會開始一次自動故障遷移操做,它會將失效Master的其中一個Slave升級爲新的Master, 並讓失效Master的其餘Slave改成複製新的Master; 當客戶端試圖鏈接失效的Master時,集羣也會向客戶端返回新Master的地址,使得集羣可使用Master代替失效Master。 哨兵(sentinel) 是一個分佈式系統,你能夠在一個架構中運行多個哨兵(sentinel) 進程,這些進程使用流言協議(gossipprotocols)來接收關於Master是否下線的信息,並使用投票協議(agreement protocols)來決定是否執行自動故障遷移,以及選擇哪一個Slave做爲新的Master. 每一個哨兵(sentinel) 會向其它哨兵(sentinel)、master、slave定時發送消息,以確認對方是否」活」着,若是發現對方在指定時間(可配置)內未迴應,則暫時認爲對方已掛(所謂的」主觀認爲宕機」 Subjective Down,簡稱sdown). 若「哨兵羣」中的多數sentinel,都報告某一master沒響應,系統才認爲該master"完全死亡"(即:客觀上的真正down機,Objective Down,簡稱odown),經過必定的vote算法,從剩下的slave節點中,選一臺提高爲master,而後自動修改相關配置. 雖然哨兵(sentinel) 釋出爲一個單獨的可執行文件 redis-sentinel ,但實際上它只是一個運行在特殊模式下的 Redis 服務器,你能夠在啓動一個普通 Redis 服務器時經過給定 --sentinel 選項來啓動哨兵(sentinel). 哨兵(sentinel) 的一些設計思路和zookeeper很是相似
4,單個哨兵和主從複製的架構圖設計
5,配置主從複製
192.168.178.110 (master)
192.168.178.112(slave)
192.168.178.115 (slave)
三臺電腦正常安裝配置redis 以後,slave 須要以下配置
vi /usr/local/redis/etc/redis.conf slaveof 192.168.178.110 6379 masterauth 123456--- 主redis服務器配置了密碼,則須要配置
兩臺都是這樣配置
配置完成以後,主redis
set name 'chris'
兩臺從redis get name 能夠得到值,且沒有寫入的權力
6,配置哨兵
192.168.178.110 (master)
192.168.178.112(slave)
192.168.178.115 (slave)
192.168.178.115 (sentinel) 哨兵
在哨兵的redis 服務器配置以下:
1.拷貝到etc目錄 cp sentinel.conf /usr/local/redis/etc 2.修改sentinel.conf配置文件 sentinel monitor mymast 192.168.110.133 6379 1 #主節點 名稱 IP 端口號 選舉次數 sentinel auth-pass mymaster 123456 3. 修改心跳檢測 30毫秒 sentinel down-after-milliseconds mymaster 30 4.sentinel parallel-syncs mymaster 2 --- 作多多少合格節點 5. 啓動哨兵模式 ./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &
啓動哨兵以前,先將主redis,從redis 依次啓動;
哨兵的日誌以下:能夠看出主從關係
10687:X 02 Aug 22:51:03.405 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 10687:X 02 Aug 22:51:03.407 # Sentinel ID is 37ac433a3cdc235ae1326987feb3f13909612f84 10687:X 02 Aug 22:51:03.407 # +monitor master mymaster 192.168.178.110 6379 quorum 1 10687:X 02 Aug 22:51:03.409 * +slave slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379 10687:X 02 Aug 22:51:03.413 * +slave slave 192.168.178.115:6379 192.168.178.115 6379 @ mymaster 192.168.178.110 6379 10687:X 02 Aug 22:51:03.463 # +sdown slave 192.168.178.115:6379 192.168.178.115 6379 @ mymaster 192.168.178.110 6379 10687:X 02 Aug 22:51:03.463 # +sdown slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379 10687:X 02 Aug 22:51:03.521 # -sdown slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379
在master 或者 slave 的服務器上打印info 也能夠看出主從關係
7 測試
將192.168.178.110 shutdown
# Keyspace 127.0.0.1:6379> SHUTDOWN not connected>
哨兵已經選出新的master redis
10687:X 02 Aug 22:54:36.822 # +sdown master mymaster 192.168.178.110 6379 10687:X 02 Aug 22:54:36.822 # +odown master mymaster 192.168.178.110 6379 #quorum 1/1 10687:X 02 Aug 22:54:36.822 # +new-epoch 1 10687:X 02 Aug 22:54:36.822 # +try-failover master mymaster 192.168.178.110 6379 10687:X 02 Aug 22:54:36.825 # +vote-for-leader 37ac433a3cdc235ae1326987feb3f13909612f84 1 10687:X 02 Aug 22:54:36.825 # +elected-leader master mymaster 192.168.178.110 6379 10687:X 02 Aug 22:54:36.825 # +failover-state-select-slave master mymaster 192.168.178.110 6379 10687:X 02 Aug 22:54:36.926 # +selected-slave slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379 10687:X 02 Aug 22:54:36.926 * +failover-state-send-slaveof-noone slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379 10687:X 02 Aug 22:54:36.985 * +failover-state-wait-promotion slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379 10687:X 02 Aug 22:54:37.879 # +promoted-slave slave 192.168.178.112:6379 192.168.178.112 6379 @ mymaster 192.168.178.110 6379 10687:X 02 Aug 22:54:37.879 # +failover-state-reconf-slaves master mymaster 192.168.178.110 6379 10687:X 02 Aug 22:54:37.932 # +failover-end master mymaster 192.168.178.110 6379 10687:X 02 Aug 22:54:37.932 # +switch-master mymaster 192.168.178.110 6379 192.168.178.112 6379 10687:X 02 Aug 22:54:37.932 * +slave slave 192.168.178.115:6379 192.168.178.115 6379 @ mymaster 192.168.178.112 6379 10687:X 02 Aug 22:54:37.932 * +slave slave 192.168.178.110:6379 192.168.178.110 6379 @ mymaster 192.168.178.112 6379 10687:X 02 Aug 22:54:37.990 # +sdown master mymaster 192.168.178.112 6379 10687:X 02 Aug 22:54:37.990 # +odown master mymaster 192.168.178.112 6379 #quorum 1/1 10687:X 02 Aug 22:54:37.990 # +new-epoch 2 10687:X 02 Aug 22:54:37.990 # +try-failover master mymaster 192.168.178.112 6379 10687:X 02 Aug 22:54:37.993 # +vote-for-leader 37ac433a3cdc235ae1326987feb3f13909612f84 2 10687:X 02 Aug 22:54:37.993 # +elected-leader master mymaster 192.168.178.112 6379 10687:X 02 Aug 22:54:37.993 # +failover-state-select-slave master mymaster 192.168.178.112 6379 10687:X 02 Aug 22:54:37.993 # +sdown slave 192.168.178.110:6379 192.168.178.110 6379 @ mymaster 192.168.178.112 6379 10687:X 02 Aug 22:54:37.994 # +sdown slave 192.168.178.115:6379 192.168.178.115 6379 @ mymaster 192.168.178.112 6379 10687:X 02 Aug 22:54:38.095 # -failover-abort-no-good-slave master mymaster 192.168.178.112 6379 10687:X 02 Aug 22:54:38.172 # Next failover delay: I will not start a failover before Fri Aug 2 23:00:38 2019 10687:X 02 Aug 22:54:38.900 # -sdown master mymaster 192.168.178.112 6379 10687:X 02 Aug 22:54:38.900 # -odown master mymaster 192.168.178.112 6379
兩次推選,192.168.178.112 被選爲master
再次看192,168.178.112 的info 爲master