原理:
1,每個Redis群集的節點都需要打開兩個TCP連接,由於這兩個連接就需要兩個端口,分別是用於為客戶端提供服務的常規Redis TCP命令端口(例如6379)以及通過將10000和命令端口相加(10000+6379)而獲得的端口,就是集群端口(例如16379)。
2,節點使用群集總線進行故障檢測,配置更新,故障轉移授權等。 客戶端不應嘗試與群集總線端口通信,為了保證Redis命令端口的正常使用,請確保在防火牆中打開這兩個端口,否則Redis群集節點將無法通信。
要求:
1,redis集群必須要求有6個實例,也就是說至少要啟動6個redis-server進程。
2,每個redis都需要開放兩個端口,如果不能關閉防火牆,就要放行兩個端口。總共至少是12個端口號。
3,redis版本限制.
redis版本>=5.xxx,直接使用 ./redis-cli --cluster create 指令構建redis集群。
redis版本<5.xxx,需要安裝ruby、rubygems環境,使用 ./redis-trib.rb create 指令構建redis集群,
步驟:
1,在同一台主機上首先安裝好單機redis。解壓,make,修改配置文件,啟動命令等。
2,暫時不啟動上面的server實例,將redis文件復制五份,按端口號命名。替換redis.conf中的端口號。建立一個cluster-redis的文件夾,將這些redis都放進去。
3,在集群文件夾下新建一個bin目錄,復制一份redis的/bin工具進去,方便以后一起使用。
4,使用集群的詳細配置文件 redis.conf如下:
port 7001(每個節點的端口號) daemonize yes bind 192.168.119.131(綁定當前機器 IP) dir /usr/local/redis-cluster/7001/data/(數據文件存放位置) pidfile /var/run/redis_7001.pid(pid 9001和port要對應) cluster-enabled yes(啟動集群模式) cluster-config-file nodes7001.conf(9001和port要對應)#這不是用戶可編輯的配置文件,而是Redis群集節點每次發生更改時自動保留群集配置(基本上為狀態)的文件,以便能夠在啟動時重新讀取它。 cluster-node-timeout 15000 #Redis群集節點可以不可用的最長時間,而不會將其視為失敗。 如果主節點超過指定的時間不可達,它將由其從屬設備進行故障切換。 此參數控制Redis群集中的其他重要事項。 appendonly yes #開啟aof 持久化存儲
5,更改好其他redis實例的配置文件。
6,我用的redis版本大於5.0,所以不需要安裝ruby環境。如需要ruby 環境,可以看這篇https://www.cnblogs.com/ding2016/p/7903147.html
7,指定各自的配置文件,啟動所有redis-server實例。
8,執行創建集群命令:
./bin/redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.01:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
replicas設置為1
比如6個節點,設置1,6*(1/2)=3個master,6*(1/2)=3個slave;
比如24個節點,設置2,24*(1/3)=8個master,24*(2/3)=16個slave。
9,按提示下一步就可以了。
slot(槽點)是用來進行寫指令的,只分配給master,一共16384個槽點,均勻分配給各個master。slave只是作為備份,不執行寫指令,不需要槽點,所以分配0個槽點。
10,任意連接摸一個節點,測試 -h host -p port
例如:redis1/bin/redis-cli -c #連接到集群節點(不管是master、還是slave)都要使用參數-c,c即cluster
>cluster info
>info replication
排錯:
配置文件中的路徑最好都設置成絕對路徑,並且要打開日志。及時根據日志排除錯誤。