標籤:
單台redis會遇到單點故障的問題,為瞭解決redis的高可用,主從複製應該是學習的第二個步驟。本文想達到的目的是,一個master帶一個slave,而slave又帶了一個slave,這樣的好處是,當master故障後,直接把slaver1改為master,其他的配置不需要修改,服務又可以正常使用。
作為master的redis設定檔不需要修改,此處只修改slave1和slave12的設定檔,對於slave1隻需在redis.conf中找到# slaveof <masterip> <masterport>並修改為 slaveof192.168.1.18 6379 然後儲存即可,而slave12則修改為slaveof 192.168.10.10 6379 ,這樣就可以了,啟動slave1和slave12試試吧。
在192.168.1.18上執行redis-cli,使用info命令,在# Replication處能看到
role:master
connected_slaves:1
slave0: 192.168.10.10,6379,online
在192.168.10.10上的redis-cli中可以看到:
# Replication
role:slave
master_host: 192.168.1.18
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0: 192.168.12.12,6379,online
在192.168.12.12上可以看到:
# Replication
role:slave
master_host: 192.168.10.10
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_priority:100
slave_read_only:1
connected_slaves:0
此時我們想實現的目標已經實現,但是發現在兩個slave上無法插入資料,當master故障後,需要在slave1上首先執行slaveof no one命令,再次執行info Replication時,它已經轉為master了,此時slave12不受影響。
redis 192.168.10.10:6379> slaveof no one
OK
redis 192.168.10.10:6379> infoReplication
# Replication
role:master
connected_slaves:1
slave0:127.0.0.1,6382,online
redis 192.168.10.10:6379>
至此,已經完成了主從複製,細心的網友可能已經發現,只需配置master的地址和連接埠,就可以作為slave存在,這樣資料就被別人盜取了!!!
目前是的,在下一節會解決這個問題。
[置頂] redis讀寫分離下的高可用設計與實現(上)
分類: NoSQL Redis2013-12-14 09:07 5030人閱讀 評論(7) 收藏 舉報
通過Redis筆記(一)純小白版篇,Redis筆記(二)主從複製和Redis筆記(三)添加密碼並修改預設連接埠後的主從同步三篇文章,我們已經能建立一個可以使用的主從複製的Redis了,例如:
在此基礎上,我們做了讀寫分離,寫主庫,讀從庫,如下:
這樣的確實現了讀和寫的分離,但是,不管是啟動還是運行過程中,只要有一個redis工作不正常,哪怕另外一個工作正常,整個redis對外就不可用——主不可用時,不可寫,從不用時不可讀,於是出現了單點故障問題,為瞭解決這個問題,做了如下改進:
經過改造後,主redis和從redis只在啟動前有明確的主從關係,啟動時如果發現主或者從有一個不可用,那麼就把讀寫共同指向可用的redis,為了達到運行時的高可用,把載入主從redis抽象成一個方法,當訪問redis出現異常時,再次調用載入redis的方法,這樣,只要在啟動並執行過程中,有一個可用的redis,則redis就可以對外提供服務。
Redis 主從複製