久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Redis中的Cluster集群介紹

共計(jì) 3184 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。

自動(dòng)寫(xiě)代碼機(jī)器人,免費(fèi)開(kāi)通

這篇文章主要介紹“Redis 中的 Cluster 集群介紹”,在日常操作中,相信很多人在 Redis 中的 Cluster 集群介紹問(wèn)題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Redis 中的 Cluster 集群介紹”的疑惑有所幫助!接下來(lái),請(qǐng)跟著丸趣 TV 小編一起來(lái)學(xué)習(xí)吧!

Redis Cluster (Redis 集群)

Redis Cluster 是 Redis 的分布式實(shí)現(xiàn)。
當(dāng)我們傳輸數(shù)據(jù)到 Redis Cluster,數(shù)據(jù)會(huì)自動(dòng)分片,存儲(chǔ)到各個(gè) Redis 節(jié)點(diǎn)上。

Redis Cluster 相對(duì)于單點(diǎn) Redis,可以在一些節(jié)點(diǎn)出現(xiàn)故障或無(wú)法通信時(shí)繼續(xù)運(yùn)行。但是,如果服務(wù)器出現(xiàn)較大故障(例如,超過(guò)一半以上的服務(wù)器不可用),群集將停止運(yùn)行。

Redis Cluster TCP 端口

每個(gè) Redis 群集節(jié)點(diǎn)都需要打開(kāi)兩個(gè) TCP 連接。
一是用于服務(wù)客戶端的常規(guī) TCP 端口,默認(rèn)為 6379。
第二個(gè)端口用于群集總線,默認(rèn)設(shè)置 16379,二進(jìn)制協(xié)議的節(jié)點(diǎn)到節(jié)點(diǎn)通信通道。節(jié)點(diǎn)利用群集總線用于故障檢測(cè),配置更新,故障轉(zhuǎn)移授權(quán)等。

客戶端永遠(yuǎn)不要嘗試與群集總線端口進(jìn)行通信,而應(yīng)始終與普通的 Redis 命令端口進(jìn)行通信,但是請(qǐng)確保同時(shí)打開(kāi)防火墻中的兩個(gè)端口,否則 Redis 群集節(jié)點(diǎn)將無(wú)法進(jìn)行通信。命令端口和集群總線端口的偏移量是固定的,并且始終為 10000。

如果沒(méi)有同時(shí)打開(kāi)兩個(gè) TCP 端口,則群集將無(wú)法正常工作。

集群總線使用不同的二進(jìn)制協(xié)議進(jìn)行節(jié)點(diǎn)到節(jié)點(diǎn)的數(shù)據(jù)交換,它更適合于用很少的帶寬和處理時(shí)間在節(jié)點(diǎn)之間交換信息。

Redis Cluster 數(shù)據(jù)分片

Redis Cluster 不使用一致性哈希,而是使用一種叫哈希槽 hash_slot 的東西。

Redis 群集中有 16384 個(gè)哈希槽,當(dāng)我們?cè)?Redis 中存儲(chǔ)一對(duì) Key-Value 時(shí),要計(jì)算給定 Key 的哈希槽。方法是先計(jì)算 Key 的 CRC16,然后對(duì)計(jì)算出的結(jié)果取模 16384:

hash_slot = CRC16(key) mod 16384

Redis 群集中的每個(gè) Redis 節(jié)點(diǎn)都負(fù)責(zé)哈希槽的子集,因此,如果有一個(gè)包含 3 個(gè)節(jié)點(diǎn)的群集,其中:

節(jié)點(diǎn) A 包含從 0 到 5500 的哈希槽。

節(jié)點(diǎn) B 包含從 5501 到 11000 的哈希槽。

節(jié)點(diǎn) C 包含從 11001 到 16383 的哈希槽。

這樣可以輕松添加和刪除集群中的節(jié)點(diǎn)。例如,如果我想添加一個(gè)新節(jié)點(diǎn) D,則需要將一些哈希槽從節(jié)點(diǎn) A,B,C 移到 D。類似地,如果我想從群集中刪除節(jié)點(diǎn) A,則只需移動(dòng) A 所服務(wù)的哈希槽到 B 和 C。當(dāng)節(jié)點(diǎn) A 為空時(shí),我可以將其從群集中完全刪除。

因?yàn)閷⒐2蹚囊粋€(gè)節(jié)點(diǎn)移動(dòng)到另一個(gè)節(jié)點(diǎn)不需要停止操作,所以添加或刪除或者更改節(jié)點(diǎn)持有的哈希槽的占比不需要任何停機(jī)時(shí)間。

接下來(lái)我們利用 docker 搭建一個(gè)三主三從的 Redis 集群。

使用 Docker 搭建 RedisCluster

Redis 配置

port ${PORT} ## 節(jié)點(diǎn)端口
protected-mode no ## 開(kāi)啟集群模式
cluster-enabled yes ##cluster 集群模式
cluster-config-file nodes.conf ## 集群配置名
cluster-node-timeout 5000 ## 超時(shí)時(shí)間
cluster-announce-ip 192.168.1.XX ## 實(shí)際為各節(jié)點(diǎn)網(wǎng)卡分配 ip  先用一個(gè) ip 代替
cluster-announce-port ${PORT} ## 節(jié)點(diǎn)映射端口
cluster-announce-bus-port 1${PORT} ## 節(jié)點(diǎn)總線端口
appendonly yes ## 持久化模式 

創(chuàng)建自定義 network

docker network create redis-net

自定義路徑

mkdir -p /usr/redis_cluster
cd /usr/redis_cluster

在自定義路徑下生成成 conf 和 data 目標(biāo),并生成配置信息

for port in `seq 6001 6006`; do
 mkdir -p ./${port}/conf
 touch ./${port}/conf/redis.conf 
 mkdir -p ./${port}/data 
 echo  port ${port}   ./${port}/conf/redis.conf
 echo  protected-mode no   ./${port}/conf/redis.conf
 echo  cluster-enabled yes   ./${port}/conf/redis.conf
 echo  cluster-config-file nodes.conf   ./${port}/conf/redis.conf
 echo  cluster-node-timeout 5000   ./${port}/conf/redis.conf
 echo  cluster-announce-ip 192.168.1.XX   ./${port}/conf/redis.conf
 echo  cluster-announce-port ${port}   ./${port}/conf/redis.conf
 echo  cluster-announce-bus-port 1${port}   ./${port}/conf/redis.conf
 echo  appendonly yes   ./${port}/conf/redis.conf
done

cluster-announce-ip 192.168.1.XX 中的 IP 必須是容器間通信的 ip, 之后可以在之前新增的 network 中查看。

共生成 6 個(gè)文件夾,從 6001 到 6006,每個(gè)文件夾下包含 data 和 conf 文件夾,同時(shí) conf 里面有 redis.conf 配置文件。

啟動(dòng) Redis 容器

for port in `seq 6001 6006`; do \
 docker run -d --privileged=true -p ${port}:${port} -p 1${port}:1${port}\
 -v $PWD/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
 -v $PWD/${port}/data:/data \
 --restart always --name redis-${port} --net redis-net \
 redis:5.0.5 redis-server /usr/local/etc/redis/redis.conf; \
done

啟動(dòng)集群

#  進(jìn)入任意 Redis 容器
docker exec -it redis-6001 /bin/bash
#  初始化 Redis 集群命令
redis-cli --cluster create 172.19.0.2:6601 172.19.0.3:6602 172.19.0.4:6603 172.19.0.5:6604 172.19.0.6:6605 172.19.0.7:6606 --cluster-replicas 1

創(chuàng)建成功后我們可以使用 redis-cli 命令連接到其中一個(gè) Redis 服務(wù).

#  單機(jī)模式啟動(dòng)
redis-cli -h 127.0.0.1 -p 6001
#  集群模式啟動(dòng)
redis-cli -c -h 127.0.0.1 -p 6001

之后通過(guò) cluster nodes 命令可以查看節(jié)點(diǎn)信息,發(fā)現(xiàn)符合 3 主 3 從的預(yù)期

到此,關(guān)于“Redis 中的 Cluster 集群介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向 AI 問(wèn)一下細(xì)節(jié)

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-04發(fā)表,共計(jì)3184字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 类乌齐县| 福安市| 资兴市| 舒城县| 集安市| 横山县| 葵青区| 闽清县| 广平县| 灌南县| 会东县| 榆林市| 康定县| 桓台县| 上虞市| 太谷县| 孟村| 志丹县| 竹山县| 舟曲县| 全椒县| 溆浦县| 军事| 阳朔县| 麦盖提县| 绥棱县| 莱西市| 庆云县| 垦利县| 桦甸市| 城市| 石楼县| 出国| 隆安县| 望城县| 商河县| 麦盖提县| 九江市| 红桥区| 金乡县| 大同县|