這篇文章主要介紹“redis中的Cluster集群介紹”,在日常操作中,相信很多人在Redis中的Cluster集群介紹問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Redis中的Cluster集群介紹”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、浚縣網(wǎng)絡(luò)推廣、微信小程序開發(fā)、??h網(wǎng)絡(luò)營銷、??h企業(yè)策劃、??h品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供??h建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
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)故障或無法通信時(shí)繼續(xù)運(yùn)行。但是,如果服務(wù)器出現(xiàn)較大故障(例如,超過一半以上的服務(wù)器不可用),群集將停止運(yùn)行。
每個(gè)Redis群集節(jié)點(diǎn)都需要打開兩個(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í)打開防火墻中的兩個(gè)端口,否則Redis群集節(jié)點(diǎn)將無法進(jìn)行通信。命令端口和集群總線端口的偏移量是固定的,并且始終為10000。
如果沒有同時(shí)打開兩個(gè)TCP端口,則群集將無法正常工作。
集群總線使用不同的二進(jìn)制協(xié)議進(jìn)行節(jié)點(diǎn)到節(jié)點(diǎn)的數(shù)據(jù)交換,它更適合于用很少的帶寬和處理時(shí)間在節(jié)點(diǎn)之間交換信息。
Redis Cluster不使用一致性哈希,而是使用一種叫哈希槽hash_slot的東西。
Redis群集中有16384個(gè)哈希槽,當(dāng)我們?cè)赗edis中存儲(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í)間。
接下來我們利用docker搭建一個(gè)三主三從的Redis集群。
Redis配置
port ${PORT} ##節(jié)點(diǎn)端口 protected-mode no ##開啟集群模式 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
之后通過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)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!