《Redis集群整理!》要點:
本文介紹了Redis集群整理!,希望對您有用。如果有疑問,可以聯系我們。
一.Redis集群
從實用性的角度,Redis集群提供以下功能:
1.自動把數據切分到多個redis節點中
2.當一部分節點掛了或弗成達,集群依然能繼續工作
3.分區
Redis集群不是使用一致性哈希,而是使用哈希槽.整個redis集群有16384個哈希槽,決定一個key應該分配到那個槽的算法是:計算該key的CRC16結果再模 16384 .這樣的分布方式方便節點的添加和刪除.好比,需要新增一個節點D,只需要把A、B、C中的部分哈希槽數據移到D節點.同樣,如果希望在集群中刪除A節點,只需要把A節點的哈希槽的數據移到B和C節點,當A節點的數據全部被移走后,A節點就可以完全從集群中刪除.因為把哈希槽從一個節點移到另一個節點是不需要停機的,所以,增加或刪除節點,或更改節點上的哈希槽,也是不需要停機的.
4.哈希標簽
如果key含有大括號”{}”,則只有大括號中的字符串會參與哈希,好比”this{foo}”和”another{foo}”這2個key會分配到同一個哈希槽,所以可以在一個命令中同時操作他們. 哈希標簽
Redis集群不克不及保證強一致性.一些已經向客戶端確認寫成功的操作,會在某些不確定的情況下丟失.
redis集群中的每個節點都需要建立2個tcp連接,監聽這2個端口:一個端口稱之為“客戶端端口”,用于接受客戶端指令,與客戶端交互,好比6379;另一個端口稱之為“集群總線端口”,是在客戶端端口號上加10000,好比16379,用于節點之間通過二進制協議通訊.各節點通過集群總線檢測宕機節點、更新配置、故障轉移驗證等.客戶端只能使用客戶端端口,不能使用集群總線端口.
Redis集群混合使用了查詢路由和客戶端分區.
分區分歧實現方式
分區可以由一個軟件棧的分歧部分完成.
· 客戶端分區:客戶端直接選擇正確節點讀寫指定鍵.很多Redis客戶實現了這種分區方式.
· 代理輔助分區:是指我們的客戶端通過Redis協議把哀求發送給代理,而不是直接發送給真正的Redis實例服務器.這個代理會確保我們的哀求根據配置分區策略發送到正確的Redis實例上,并返回給客戶端.Redis和Memcached的代理都是用Twemproxy (譯者注:這是twitter開源的一個代理框架)來實現代理服務分區的.
· 查詢路由:是指你可以把一個哀求發送給一個隨機的實例,這時實例會把該查詢轉發給正確的節點.通過客戶端重定向(客戶端的哀求不用直接從一個實例轉發到另一個實例,而是被重定向到正確的節點),Redis集群實現了一種混合查詢路由.
5.集群配置
集群在redis.conf中的參數.
·
· cluster-enabled <yes/no>: 如果配置”yes”則開啟集群功能,此redis實例作為集群的一個節點,不然,它是一個普通的單一的redis實例.
· cluster-config-file <filename>: 注意:雖然此配置的名字叫“集群配置文件”,但是此配置文件不能人工編輯,它是集群節點自動維護的文件,主要用于記錄集群中有哪些節點、他們的狀態以及一些持久化參數等,方便在重啟時恢復這些狀態.通常是在收到哀求之后這個文件就會被更新.
· cluster-node-timeout<milliseconds>: 這是集群中的節點能夠失聯的最大時間,超過這個時間,該節點就會被認為故障.如果主節點超過這個時間還是不可達,則用它的從節點將啟動故障遷移,升級成主節點.注意,任何一個節點在這個時間之內如果還是沒有連上大部分的主節點,則此節點將停止接收任何哀求.
· cluster-slave-validity-factor <factor>: 如果設置成0,則無論從節點與主節點失聯多久,從節點都會嘗試升級成主節點.如果設置成正數,則cluster-node-timeout乘以cluster-slave-validity-factor得到的時間,是從節點與主節點失聯后,此從節點數據有效的最長時間,超過這個時間,從節點不會啟動故障遷移.假設cluster-node-timeout=5,cluster-slave-validity-factor=10,則如果從節點跟主節點失聯超過50秒,此從節點不能成為主節點.注意,如果此參數配置為非0,將可能出現由于某主節點失聯卻沒有從節點能頂上的情況,從而導致集群不能正常工作,在這種情況下,只有等到本來的主節點重新回歸到集群,集群才恢復運作.
· cluster-migration-barrier <count>:主節點必要的最小從節點數,只有達到這個數,主節點失敗時,它從節點才會進行遷移.更詳細介紹可以看本教程后面關于副本遷移到部分.
· cluster-require-full-coverage <yes/no>:在部分key所在的節點弗成用時,如果此參數設置為”yes”(默認值), 則整個集群停止接受操作;如果此參數設置為”no”,則集群依然為可達節點上的key提供讀操作.
6.本身動手配置集群(3主3從)
后續會繼續介紹,請存眷!
維易PHP培訓學院每天發布《Redis集群整理!》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/9264.html