理解并從頭搭建redis集群
創(chuàng)新互聯(lián)是一家專業(yè)提供南明企業(yè)網(wǎng)站建設,專注與做網(wǎng)站、網(wǎng)站設計、H5開發(fā)、小程序制作等業(yè)務。10年已為南明眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設公司優(yōu)惠進行中。部分開發(fā)人員工作當中只是在應用中使用redis,比如用來做數(shù)據(jù)結果的緩存。而且現(xiàn)在有很多不錯的redis客戶端工具(redisson),基本上可以不用關注redis命令就可以完成相當部分的功能。所以可能會對如下這些問題關注點不夠:
如何容災?即某個redis節(jié)點出了問題如何保證服務的高可用性
如何橫向擴容?當數(shù)據(jù)量特別大時,如何解決單個redis的性能問題
集群至少需要幾臺機器?或者幾個redis節(jié)點
集群搭建都利用什么技術,哪些工具?
如何容災?
redis提供了主從熱備機制,主服務器的數(shù)據(jù)同步到從服務器,通過哨兵實時監(jiān)控主服務器狀態(tài)并負責選舉主服務器。當發(fā)現(xiàn)主服務器異常時根據(jù)一定的算法重新選舉主服務器并將問題服務器從可用列表中去除,最后通知客戶端。主從是一對多的樹型結構,如下圖:
哨兵
哨兵是sentinel的中文名稱,是redis出的一個高可用架構的工具,自身是一個獨立的進程,可以同時監(jiān)控一個以上的redis集群。
哨兵集群
基于高可用的考慮,哨兵自身也是需要支持集群的,如果只有一個哨兵就會存在單點問題。
哨兵決策
哨兵有一個數(shù)量配置,當多少個哨兵同時認為某個主服務不可用時才進行主從切換,比如總共有5個哨兵,當3個哨兵認為服務不可用時才決定做主從切換。這么做可以避免一些誤切換,降低切換成本,比如瞬時的網(wǎng)絡異常等。
如何橫向擴容?
無論是redis還是其它一些數(shù)據(jù)庫之類的產(chǎn)品,當單節(jié)點的數(shù)據(jù)容量達到一定上限后,服務對外提供的能力會越來越弱。redis在高版本中提供了redis-trib.rb來實現(xiàn)集群功能,也可以使用第三方的工具twemproxy。
去中心化,每個節(jié)點都是平等的
redis集群從設計上沒有考慮中心化,這樣可以避免中心節(jié)點的單點等問題。每個節(jié)點都能掌握整個集群的狀態(tài),連接任意的節(jié)點都可以訪問到所有的key,就像單節(jié)點的redis一樣。
集群原理圖
自己理解畫的,如有理解不對的地方可以指出。
key與redis節(jié)點的關系
引入了hasy solt,中文理解為哈希槽??偣?6384個,我們操作的key通過取模算法確認key落在哪個槽上。
HASH_SLOT = CRC16(key) mod 16384
哈希槽與節(jié)點之間有一定關系,所以我們就可以將key分配到某個具體的redis節(jié)點上了。
詳細的關系可再研究,簡單的比如節(jié)點A負責0-5000編號的哈希槽,節(jié)點B負責5001-1000
一步一步搭建
開始搭建三主三從的集群,系統(tǒng)是ubuntu,采用redis提供的集群工具redis-trib.rb。
安裝最新redis
創(chuàng)建redis_cluster目錄,并且創(chuàng)建7000到7005這6個目錄
將redis目錄下的redis.conf復制到上面創(chuàng)建的6個目錄中
分別修改redis.conf文件,對6個文件做類似的修改。
port 7000 //端口7000 bind 127.0.0.1 //默認ip為127.0.0.1 需要改為其他節(jié)點機器可訪問的ip daemonize yes //后臺運行 pidfile /var/run/redis_7000.pid //pidfile文件對應7000 cluster-enabled yes //開啟集群 cluster-config-file nodes_7000.conf //集群的配置 cluster-node-timeout 15000 //請求超時 默認15秒,可自行設置
bind需要注意的就是需要配置為其它機器可以訪問的ip,否則無論是創(chuàng)建集群還是客戶端連接都會有問題。
啟動6個redis
redis-server redis_cluster/7000/redis.conf redis-server redis_cluster/7001/redis.conf redis-server redis_cluster/7002/redis.conf redis-server redis_cluster/7003/redis.conf redis-server redis_cluster/7004/redis.conf redis-server redis_cluster/7005/redis.conf
創(chuàng)建集群
redis的src目錄下有個redis-trib.rb,將它復制到/usr/local/bin中,然后執(zhí)行如下腳本:
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
--replicas后面的1代表從服務器的個數(shù),上面可以理解為前面3個為主服務器,后面三個分別做為從服務器,即三對主從。
執(zhí)行過程中會遇到提示需要安裝ruby,安裝完成之后又會提示安裝 gem redis。
安裝gem redis,折騰了好久,最終發(fā)現(xiàn)是因為在國內(nèi)訪問不了某些網(wǎng)站導致通過apt-get install安裝不成功,最后通過下載源碼的方式安裝成功。
再次執(zhí)行創(chuàng)建集群的腳本,出現(xiàn)如下提示:
輸入yes,繼續(xù)
最少需要多少個主服務器?
可能是基于某些約定,集群約定只有當可用節(jié)點數(shù)大于半數(shù)以上時才具備對外提供服務的能力。首先數(shù)量一定是奇數(shù),其實必須大于1,所以最少的主服務器數(shù)量為3。
測試集群
連接客戶端,由于我的所有節(jié)點都是在本地,所以不需要輸入ip,但需要加-c的參數(shù)。redis-cli -c -p 7000
連接成功后,增加一個key
set mykey 123
有一行提示語,指向到端口7002,這說明雖然我們連接的是7000的實例,但通過hash算法最終會將key分配到7002的實例上。
再連接7005端口查詢下key,測試下是否任意一個實例都可以查詢到key
get mykey
顯示指向到端口7002
以上就是redis高可用方案圖文詳解的詳細內(nèi)容,更多請關注創(chuàng)新互聯(lián)其它相關文章!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
新聞標題:redis集群的原理以及搭建配置-創(chuàng)新互聯(lián)
URL地址:http://www.rwnh.cn/article20/ccejco.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、品牌網(wǎng)站設計、App設計、Google、微信公眾號、網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容