您好,登錄后才能下訂單哦!
本篇文章為大家展示了Redis中怎么搭建一個橫向集群,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
1.概述:
在redis3.0版本之前只支持主從復制(縱向集群),縱向集群解決了讀的壓力,但是寫的操作只能在主庫上完成。redis3.0版本之后包括3.0可以支持橫向集群,本文章嘗試介紹redis的橫向集群以及如何在真實環境中搭建。
2.實現原理:
Redis集群中有16384個哈希槽,而每一個key都是哈希槽的一部分,所以只要計算出key的哈希槽,就知道這個key對應16384中的哪一個,計算原理是對key的CRC16取模16384,而Redis群集中的每個節點都負責哈希槽的子集,有多少個節點就把哈希槽分成幾片。比如有A,B,C 3個節點集群,哈希槽的分配大概如下:
節點A包含從0到5500的哈希槽。
節點B包含從5501到11000的哈希槽。
節點C包含從11001到16383的哈希槽。
比如我的key是name計算出的 哈希槽 是 100,100這個哈希槽在節點A,所以自然的redis就把這個值存到節點A的redis服務器上,獲取數據也是先計算key的哈希槽,然后再去對應的節點獲取數據,從而讀寫都實現了集群。
3.搭建橫向集群
實例基礎環境:centos7系統 ,redis版本5.0.6(目前的最新版本)
實例情況:創建6個redis服務器,3臺主庫3臺從庫,即每臺主庫分配一臺從庫,如果主庫發生故障,則從庫可以進行故障轉移升級為主庫
1.下載安裝redis
# 下載redis安裝包到 /usr/local/src目錄下 cd /usr/local/src # 各個版本下載地址:http://download.redis.io/releases wget http://download.redis.io/releases/redis-5.0.6.tar.gz # 解壓 tar zxf redis-5.0.6.tar.gz # 進入redis-5.0.6的源碼目錄 cd redis-5.0.6/ # 編譯redis make
把新建六個目錄,用來存放6臺redis服務和對應的配置文件
cd /data mkdir redis1 redis2 redis3 redis4 redis5 redis6
把編譯后的redis-server和redis.conf文件分別復制到新建的六個redis目錄
cd /usr/local/src/redis-5.0.6 cp redis.conf /data/redis1 cp redis.conf /data/redis2 cp redis.conf /data/redis3 cp redis.conf /data/redis4 cp redis.conf /data/redis5 cp redis.conf /data/redis6 cd /usr/local/src/redis-5.0.6/src cp redis-server /data/redis1 cp redis-server /data/redis2 cp redis-server /data/redis3 cp redis-server /data/redis4 cp redis-server /data/redis5 cp redis-server /data/redis6
分別配置這六臺服務器的redis.conf
需要修改的參數如下:
port 每臺服務器對外的端口這里我為每臺分別分配如下 6001 6002 6003 6004 6005 6006
cluster-enabled yes 打開這個配置且值為yes,指定redis為集群節點啟動
cluster-config-file nodes.conf 指定節點配置文件
daemonize yes 讓每臺redis以守護態啟動(后臺啟動)
分別修改每臺redis服務器的配置文件
cd /data/redis1 vim redis.conf
redis1服務器redis.conf配置修改如下
port 6001 daemonize yes pidfile /var/run/redis_6001.pid cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000
redis2服務器redis.conf配置修改如下
port 6002 daemonize yes pidfile /var/run/redis_6002.pid cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000
redis3,redis4,redis5,redis6以此類推修改對應的配置文件
配置好六臺服務器之后,分別啟動六臺redis服務器
cd /data/redis1 ./redis-server redis.conf cd /data/redis2 ./redis-server redis.conf cd /data/redis3 ./redis-server redis.conf cd /data/redis4 ./redis-server redis.conf cd /data/redis5 ./redis-server redis.conf cd /data/redis6 ./redis-server redis.conf
這時我們六臺服務全部啟動了,下一步就是將這六臺服務器創建成一個集群
使用redis-cli創建集群
cd /usr/local/src/redis-5.0.6/src/ ./redis-cli --cluster create \ 127.0.0.1:6001 \ 127.0.0.1:6002 \ 127.0.0.1:6003 \ 127.0.0.1:6004 \ 127.0.0.1:6005 \ 127.0.0.1:6006 \ --cluster-replicas 1
此時控制臺提示輸入yes,輸入yes回車即可
出現以下說明創建成功!
創建集群完畢后會提示All 16384 slots covered
接下來用命令行工具測試:
[root@VM_0_10_centos src]# ./redis-cli -c -p 6001 127.0.0.1:6001> set name liuhaizhuang -> Redirected to slot [5798] located at 127.0.0.1:6002 OK 127.0.0.1:6002> get name "liuhaizhuang" 127.0.0.1:6002>
我們發現從6001這個服務器保存的數據,系統自動分配到6002這個服務器中了,說明橫向集群搭建完畢!
2.集群配置參數說明
# 如果是yes,則啟用Redis Cluster支持,如果是no,則redis會獨立啟動
cluster-enabled <yes/no>
# 這個文件是redis集群節點每次發生更改時都會自動持久保存集群配置的文件,用戶不可編輯
cluster-config-file <filename>
# Redis群集節點不可用的最長時間(如果在設置的時間內,不當做失敗處理)
cluster-node-timeout <milliseconds>
# 如果設置為0,則從服務器將始終嘗試對主服務器進行故障轉移,而不管主服務器和從服務器之間的鏈接保持斷開狀態的時間長短,如果該值為正,則將最大斷開時間計算為節點超時值乘以此選項提供的系數
cluster-slave-validity-factor <factor>
# 一個主機將保持連接的最小數量的從機
cluster-migration-barrier <count>
#如果設置為yes,默認情況下,如果某個節點未覆蓋一定比例的key空間,集群將停止接受寫入。如果該選項設置為no,即使僅可以處理有關key子集的請求,群集仍將提供查詢。
cluster-require-full-coverage <yes/no>
上述內容就是Redis中怎么搭建一個橫向集群,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。