偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

聊聊Redis集群搭建及選舉原理

存儲 存儲軟件 Redis
哨兵模式中如果主從中 master宕機了,是通過哨兵來選舉出新的master,在這個選舉切換主從的過程,整個redis服務是不可用的。而且哨兵模式中只有一個主節(jié)點對外提供服務,因此沒法支持更高的并發(fā)。

 redis集群簡述

哨兵模式中如果主從中 master宕機了,是通過哨兵來選舉出新的master,在這個選舉切換主從的過程,整個redis服務是不可用的。而且哨兵模式中只有一個主節(jié)點對外提供服務,因此沒法支持更高的并發(fā)。而且當個主節(jié)點的內存設置也不宜過大。否則會導致持久化文件過大,影響數(shù)據(jù)恢復或主從同步的效率。

[[323144]]

redis集群是由 一系列的 主從節(jié)點群組成的分布式服務器群,它具有復制、高可用和分片特性。 Redis集群不需要 sentinel哨兵也能完成節(jié)點移除和故障轉移的功能。需要將每個節(jié)點設置成集群模式,這種集群模式?jīng)]有中心節(jié)點 ,客戶端通過 CRC16算法對key進行hash

得到一個值,來判斷該 key存儲在哪個主從服務上面,因此就算是某一個主從整個宕機,redis集群也是部分可用的。方便 水平擴展, 可以根據(jù)業(yè)務規(guī)模可以隨時加減配置。 據(jù)官方文檔稱可以線性擴展到上萬個節(jié)點 ( 但是 官方推薦不超過 1000個節(jié)點)。redis集群的性能和高可用性均優(yōu)于哨兵模式 。

 

Redis集群搭建及選舉原理

 

Redis 集群搭建

1. 修改 redis.conf 配置文件

  • daemonize yes 后臺啟動
  • cluster-enabled yes 開啟集群模式
  • cluster-config-file nodes-6379.conf 集群配置信息存放文件名
  • cluster-node-timeout 5000 節(jié)點離線時間限制,到達此值時發(fā)起某個主從重新選舉 master
  • protected-mode no 關閉保護模式
  • requirepass xxx 設置本機密碼
  • masterauth xxx 設置訪問別的機器的密碼

2. 注意關閉服務器的防火墻,否則可能造成節(jié)點之間無法通信,無法搭建集群

使用修改好的配置文件啟動 redis 服務,我這里使用三個一主一從來搭建。因此先將 6 個 redis 服務使用指定的配置文件 redis-master.conf 啟動起來: src/redis-server redis-master.conf

3.搭建集群服務

為了保險起見最好先檢查下每臺機器的 redis 服務是否正常啟動了 ps -ef|grep redis

可以看見 redis 服務進程后面有個 cluster 的標志,普通啟動的 redis 服務是沒有這個標志的

 

Redis集群搭建及選舉原理

 

5.0 版本可以直接使用 C 語言客戶端提供的指令去構建集群:

  1. src/redis-cli -a xxx --cluster create --cluster-replicas 1 192.168.0.67:6379 192.168.0.68:6379 192.168.0.69:6379 192.168.0.70:6379 192.168.0.71:6379 192.168.0.72:6379 

-a 配置的密碼

--cluster create 表示集群創(chuàng)建

--cluster-replicas 表示每個 master 幾個 slave ,上面一共 6 個 redis 節(jié)點,因此會構建三個一主一從。

執(zhí)行命令之前,如果你的 redis 環(huán)境以前搭建過主從或者哨兵之類的,數(shù)據(jù)不干凈可能會報錯,最好將持久化文件刪掉,然后 flushdb ,將以前臟數(shù)據(jù)清理掉,否則可能出現(xiàn)如下錯誤:

 

Redis集群搭建及選舉原理

 

正常執(zhí)行會返回一個集群分配計劃,我們按照它的計劃即可:

 

Redis集群搭建及選舉原理

 

然后節(jié)點之間就開始通信構建集群,最后會看見 16384 個 slots 分配完畢,可以看見構建計劃中有三個 master ,每個 master 都是有指定槽位的。意思就是存入的 key 經(jīng)過 crc16 hash 算法之后得到的值,在哪個范圍內,就存儲到那個 redis 主從上面去,這就是 redis 的分片集群模式。

 

Redis集群搭建及選舉原理

 

至此集群搭建完畢

4.集群操作

以集群方式連接 redis 客戶端通過 cluster info 查看集群信息,通過 cluster nodes 查看節(jié)點信息

src/redis-cli -a 密碼 -c 集群方式連接

 

Redis集群搭建及選舉原理

 

我們設置 set abc 123 一個值 會看見客戶點會計算 abc 的 slot 是 7638 , 然后重定向到對應的主從的 master 上面去寫數(shù)據(jù)

 

Redis集群搭建及選舉原理

 

現(xiàn)在我看下 java 客戶端的 jedis 里面的 key 值計算 redis.clients.util.JedisClusterCRC16#getSlot(java.lang.String) :

 

Redis集群搭建及選舉原理

 

最后計算結果就會落到 0-16383 之間去。

當 Redis Cluster 的客戶端來連接集群時,它也會得到一份集群的槽位配置信息并將其緩存在客戶端本地。這樣當客戶 端要查找某個 key 時,可以直接定位到目標節(jié)點。同時因為槽位的信息可能會存在客戶端與服務器不一致的情況,還需 要糾正機制來實現(xiàn)槽位信息的校驗調整。

集中式集群和分片式集群

Redis 節(jié)點之間使用的是 gossip 協(xié)議進行通信,每個節(jié)點之間都會互相通信。

gossip 協(xié)議包含多種消息,包括 ping , pong , meet , fail 等等。

ping :每個節(jié)點都會頻繁給其他節(jié)點發(fā)送 ping ,其中包含自己的狀態(tài)還有自己維護的集群元數(shù)據(jù),互相通過 ping 交換元數(shù)據(jù);

pong: 返回 ping 和 meet ,包含自己的狀態(tài)和其他信息,也可以用于信息廣播和更新;

fail: 某個節(jié)點判斷另一個節(jié)點 fail 之后,就發(fā)送 fail 給其他節(jié)點,通知其他節(jié)點,指定的節(jié)點宕機了。

meet :某個節(jié)點發(fā)送 meet 給新加入的節(jié)點,讓新節(jié)點加入集群中,然后新節(jié)點就會開始與其他節(jié)點進行通信,不需要發(fā)送形成網(wǎng)絡的所需的所有 CLUSTER MEET 命令。發(fā)送 CLUSTER MEET 消息以便每個節(jié)點能夠達到其他每個節(jié)點只需通 過一條已知的節(jié)點鏈就夠了。由于在心跳包中會交換 gossip 信息,將會創(chuàng)建節(jié)點間缺失的鏈接。

gossip 協(xié)議的優(yōu)點在于元數(shù)據(jù)的更新比較分散,不是集中在一個地方,更新請求會陸陸續(xù)續(xù),打到所有節(jié)點上去更新, 有一定的延時,降低了壓力;缺點在于元數(shù)據(jù)更新有延時可能導致集群的一些操作會有一些滯后。

就是自己提供服務的端口號 +10000 ,比如 6379 ,那么用于節(jié)點間通信 的就是 16379 端口。 每個節(jié)點每隔一段時間都會往另外幾個節(jié)點發(fā)送 ping 消息,同時其他幾點接收到 ping 消息之后返回 pong 消息。

還有就是集中式的,比如 ZK 集群

集中式的有點在于數(shù)據(jù)的更新和讀取,時效性非常好,一旦元數(shù)據(jù)出現(xiàn)變更立即就會更新到集中式( master )的存儲中,其他節(jié)點讀取的 時候立即就可以立即感知到;不足在于所有的元數(shù)據(jù)的更新壓力全部集中在一個地方,可能導致元數(shù)據(jù)的存儲壓力。

Redis 集群選舉機制

當 slave發(fā)現(xiàn)自己的master變?yōu)镕AIL狀態(tài)時,便嘗試 發(fā)起選舉 ,以期成為新的 master。由于掛掉的master可能會有 多個 slave,從而存在多個slave競爭成為master節(jié)點的過程, 其過程如下:

1.slave發(fā)現(xiàn)自己的master變?yōu)镕AIL

2.將自己記錄的集群currentEpoch(選舉輪次標記)加1,并廣播信息給集群中其他節(jié)點

3.其他節(jié)點收到該信息,只有master響應,判斷請求者的合法性,并發(fā)送結果

4.嘗試選舉的slave收集master返回的結果,收到 超過半數(shù) master的統(tǒng)一 后變成新 Master

5.廣播Pong消息通知其他集群節(jié)點。

如果這次選舉不成功,比如三個小的主從 A,B,C組成的集群,A的master掛了,A的兩個小弟發(fā)起選舉,結果B的master投給A的小弟A1,C的master投給了A的小弟A2,這樣就會發(fā)起第二次選舉,選舉輪次標記+1繼續(xù)上面的流程。事實上從節(jié)點并不是在主節(jié)點一進入 FAIL 狀態(tài)就馬上嘗試發(fā)起選舉,而是有一定延遲,一定的延遲確保我們等待FAIL狀態(tài)在集群中傳播,slave如果立即嘗試選舉,其它masters或許尚未意識到FAIL狀態(tài),可能會拒絕投票。 同時下面公式里面的隨機數(shù),也可以有效避免slave同時發(fā)起選舉,導致的平票情況。

  • 延遲計算公式:

DELAY = 500ms + random(0 ~ 500ms) + SLAVE_RANK * 1000ms

  • SLAVE_RANK表示此slave已經(jīng)從master復制數(shù)據(jù)的總量的rank。Rank越小代表已復制的數(shù)據(jù)越新。這種方式下,持有最新數(shù)據(jù)的slave將會首先發(fā)起選舉(理論上)。

前面說到這種分片的集群模式的集群可以部分提供服務, 當 redis.conf的配置cluster-require-full-coverage為no時, 表示當一個小主從整體掛掉的時候集群也可以用,也是說 0-16383個槽位中,落在該主從對應的slots上面的key是用不了的,但是如果key落在其他的范圍是仍然可用的。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2019-09-16 16:05:13

Redis集群模式

2018-10-30 09:38:55

Redis集群實現(xiàn)

2025-02-19 10:27:48

哨兵Redis故障轉移

2024-11-04 15:49:43

Redis?數(shù)據(jù)遷移

2022-06-21 07:51:06

Redis高可用哨兵進程

2025-02-24 10:07:09

Redis節(jié)點遷移集群

2022-02-09 15:36:49

Redis主從模式哨兵模式

2025-03-04 02:20:00

EurekaNetflixSpring

2021-01-07 10:18:03

Redis數(shù)據(jù)庫環(huán)境搭建

2024-03-07 16:03:56

RedisDocker

2022-08-28 19:36:15

數(shù)據(jù)分片KafkaRocketMQ

2021-04-19 08:52:58

Hadoop集群搭建Python

2021-06-26 07:40:45

Greenplum集群部署

2024-04-03 00:00:00

Redis集群代碼

2017-07-11 13:30:12

RedisDockerLinux

2021-04-06 06:04:36

Redis 6.X C集群搭建操作系統(tǒng)

2023-04-07 08:28:14

2022-05-31 08:04:03

Redis高可用集群

2023-06-10 23:09:40

Redis場景內存

2023-06-30 07:51:44

springboot初始化邏輯
點贊
收藏

51CTO技術棧公眾號