您好,登錄后才能下訂單哦!
這篇文章主要介紹“Redis中的Cluster集群介紹”,在日常操作中,相信很多人在Redis中的Cluster集群介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Redis中的Cluster集群介紹”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Redis Cluster是Redis的分布式實現。 當我們傳輸數據到 Redis Cluster,數據會自動分片,存儲到各個Redis節點上。
Redis Cluster相對于單點Redis,可以在一些節點出現故障或無法通信時繼續運行。但是,如果服務器出現較大故障(例如,超過一半以上的服務器不可用),群集將停止運行。
每個Redis群集節點都需要打開兩個TCP連接。 一是用于服務客戶端的常規TCP端口,默認為6379。 第二個端口用于群集總線,默認設置16379,二進制協議的節點到節點通信通道。節點利用群集總線用于故障檢測,配置更新,故障轉移授權等。
客戶端永遠不要嘗試與群集總線端口進行通信,而應始終與普通的Redis命令端口進行通信,但是請確保同時打開防火墻中的兩個端口,否則Redis群集節點將無法進行通信。命令端口和集群總線端口的偏移量是固定的,并且始終為10000。
如果沒有同時打開兩個TCP端口,則群集將無法正常工作。
集群總線使用不同的二進制協議進行節點到節點的數據交換,它更適合于用很少的帶寬和處理時間在節點之間交換信息。
Redis Cluster不使用一致性哈希,而是使用一種叫哈希槽hash_slot的東西。
Redis群集中有16384個哈希槽,當我們在Redis中存儲一對Key-Value時,要計算給定Key的哈希槽。方法是先計算Key的CRC16,然后對計算出的結果取模16384:
hash_slot = CRC16(key) mod 16384
Redis群集中的每個Redis節點都負責哈希槽的子集,因此,如果有一個包含3個節點的群集,其中:
節點A包含從0到5500的哈希槽。
節點B包含從5501到11000的哈希槽。
節點C包含從11001到16383的哈希槽。
這樣可以輕松添加和刪除集群中的節點。例如,如果我想添加一個新節點D,則需要將一些哈希槽從節點A,B,C移到D。類似地,如果我想從群集中刪除節點A,則只需移動A所服務的哈希槽到B和C。當節點A為空時,我可以將其從群集中完全刪除。
因為將哈希槽從一個節點移動到另一個節點不需要停止操作,所以添加或刪除或者更改節點持有的哈希槽的占比不需要任何停機時間。
接下來我們利用docker搭建一個三主三從的Redis集群。
Redis配置
port ${PORT} ##節點端口 protected-mode no ##開啟集群模式 cluster-enabled yes ##cluster集群模式 cluster-config-file nodes.conf ##集群配置名 cluster-node-timeout 5000 ##超時時間 cluster-announce-ip 192.168.1.XX ##實際為各節點網卡分配ip 先用一個ip代替 cluster-announce-port ${PORT} ##節點映射端口 cluster-announce-bus-port 1${PORT} ##節點總線端口 appendonly yes ##持久化模式
創建自定義network
docker network create redis-net
自定義路徑
mkdir -p /usr/redis_cluster cd /usr/redis_cluster
在自定義路徑下生成成conf和data目標,并生成配置信息
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個文件夾,從6001到6006,每個文件夾下包含data和conf文件夾,同時conf里面有redis.conf配置文件。
啟動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
啟動集群
# 進入任意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
創建成功后我們可以使用redis-cli命令連接到其中一個Redis服務.
# 單機模式啟動 redis-cli -h 127.0.0.1 -p 6001 # 集群模式啟動 redis-cli -c -h 127.0.0.1 -p 6001
之后通過cluster nodes命令可以查看節點信息,發現符合3主3從的預期
到此,關于“Redis中的Cluster集群介紹”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。