因為Redis要求每個集群最少要有3臺服務器才能正常運行,所以接下來搭建一個3主3從的集群,
3主3從代表著要有6個redis服務實體,這里先預設6個實體的埠為6380~6385,先創建這6個redis實體相關的組態檔redis-xxx.conf,可以先copy redis.conf檔案然后重命名,新建一個redis-cluster檔案夾來存放集群相關檔案,最后redis-cluster檔案夾中有如下6個檔案:

修改以上每個組態檔中的內容,參考如下:
#埠改為服務實體相關的埠號,這里以6380埠實體為例
port 6380
#開啟后臺啟動
daemonize yes
#修改pid檔案名,避免和其它redis行程沖突,這里以6380埠實體為例
pidfile /var/run/redis_6380.pid
#rdb操作對應的檔案名,這里以6380埠實體為例
dbfilename dump_6380.rdb
#開啟集群相關配置,改為yes
cluster-enabled yes
#該選項指定的檔案是用來存盤當前節點記錄的集群狀態的,所以不能重名,不然會啟動失敗,這里以6380埠實體為例
cluster-config-file nodes-6380.conf
然后在同一目錄下,撰寫一個啟動腳本,用來統一啟動6個實體,輸入vim startCluster.sh,編輯內容如下:
redis-server redis-6380.conf
redis-server redis-6381.conf
redis-server redis-6382.conf
redis-server redis-6383.conf
redis-server redis-6384.conf
redis-server redis-6385.conf
再寫一個關閉腳本,用來統一關閉6個實體,安全退出集群,輸入vim shutdownCluster.sh 如下:
redis-cli -p 6380 shutdown
redis-cli -p 6381 shutdown
redis-cli -p 6382 shutdown
redis-cli -p 6383 shutdown
redis-cli -p 6384 shutdown
redis-cli -p 6385 shutdown
在redis-cluster檔案夾下運行啟動腳本,結果如下:

接著隨便進入一個實體的客戶端模式,輸入info cluster命令,結果如下:
cluster_enabled結果為1表示集群正常啟用了,
再輸入CLUSTER INFO查看節點狀態,如下:
可以發現此時的集群狀態是fail,
此時每個節點都是完全獨立的,現在要將它們加入到同一個集群,由于使用的redis版本是5.0.5,所以建議使用redis-cli來創建集群,
redis-cli創建集群的基本語法如下:
redis-cli --cluster create host1:port1 ... hostN:portN --cluster-replicas <arg>
<arg> 引數表示每個主資料庫擁有的從資料庫個數
運行redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1 命令,該命令表示以哪些ip和埠的redis實體構建集群,同時每個主資料庫要有一個從資料庫,這樣就形成3主3從的集群系統了,運行后結果如下:
從以上輸出的內容可以看出集群大致的分配方案,比如插槽是怎么分配的,哪兩個redis資料庫形成了主從等,輸入yes表示同意這個方案,那么就會創建出相應的集群了,結果如下:
出現如上圖的資訊,表明所有槽都已經分配到節點上了,因為Redis集群中就內置了16384個哈希槽,
再通過CLUSTER INFO命令查看此時節點狀態,如下:
可以發現集群狀態變為了ok,
隨意連接一個節點客戶端輸入CLUSTER NODES命令看下結果,如下:
從上圖中可以看到所有節點的運行ID、ip地址和埠、角色、狀態以及負責的插槽等資訊,
測驗下集群的效果
這時候因為要在集群中設定資料,那么肯定涉及到資料的重定向,所以進入客戶端的命令要加個-c的引數,讓節點之間可以自動跳轉,如下:
接著進入埠為6380的主資料庫客戶端,嘗試著設值,如下:
發現提示,資料被重定向到6382埠實體的12539插槽中了,去6382埠的redis實體去查看搜索下key,結果如下:
6382埠實體能夠正常查到結果,
總結
Redis的簡單集群搭建完成,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/29708.html
標籤:其他
