redis集群需要至少要三個master節點,我們這里搭建三個master節點,並且給每個master再搭建一個slave節點,總共6個redis節點,這里用一台機器(可以多台機器部署,修改一下ip地址就可以了)部署6個redis實例,三主三從,搭建集群的步驟如下:
第一步:在第一台機器的/usr/local/redis下創建文件夾redis-cluster,然后在其下面創建6個文件夾如下:
mkdir -p /usr/local/redis/redis-cluster
進入redis-cluster目錄,創建6個文件夾
mkdir 7001 7002 7003 7004 7005 7006
第二步:把之前的redis.conf配置文件copy到7001下,修改如下內容:
cp /usr/local/redis/redis-5.0.5/redis.conf /usr/local/redis/redis-cluster/7001
說明:redis-5.0.5為解壓的源碼包
修改如下配置:
1 daemonize yes //redis后台運行 2 port 7001 (分別對每個機器的端口號進行設置) 3 pidfile /var/run/redis_7001.pid //pidfile文件對應7000,7002,7003...7006 4 cluster-enabled yes //開啟集群 把注釋#去掉 5 cluster-config-file nodes-7001.conf //集群的配置 配置文件首次啟動自動生成 7001,7002,7003...7006 6 cluster-node-timeout 5000 //請求超時 設置5秒夠了 7 appendonly yes //aof日志開啟 有需要就開啟,它會每次寫操作都記錄一條日志 8 bind 127.0.0.1 (去掉bind綁定訪問ip信息) 9 protected-mode no (關閉保護模式) 10 #dir /usr/local/redis/redis-cluster/7001/ (指定數據文件存放位置,必須要指定不同的目錄位置,不然會丟失數據,若該配置 不存在,請自行添加)
如果要設置密碼需要增加如下配置:
11 requirepass xxx (設置redis訪問密碼) 12 masterauth xxx (設置集群節點間訪問密碼,跟上面一致)
第三步:把修改后的配置文件,copy到8002-8006,修改第2、3、5項里的端口號,可以用批量替換:
先復制:
1 cp /usr/local/redis/redis-cluster/7001/redis.conf /usr/local/redis/redis-cluster/7002 2 cp /usr/local/redis/redis-cluster/7001/redis.conf /usr/local/redis/redis-cluster/7003 3 cp /usr/local/redis/redis-cluster/7001/redis.conf /usr/local/redis/redis-cluster/7004 4 cp /usr/local/redis/redis-cluster/7001/redis.conf /usr/local/redis/redis-cluster/7005 5 cp /usr/local/redis/redis-cluster/7001/redis.conf /usr/local/redis/redis-cluster/7006
然后分別到對應的目錄下 把redis.conf 執行 vim
%s/源字符串/目的字符串/g
:%s/7001/7002/g
:%s/7001/7003/g
:%s/7001/7004/g
:%s/7001/7005/g
:%s/7001/7006/g
把7001替換為7002
全局替換 和 目錄保持一致, 比如目錄是 7003則 替換為7003
第四步:分別啟動6個redis實例,然后檢查是否啟動成功
1 /usr/local/redis/bin/redis-server /usr/local/redis/redis-cluster/7001/redis.conf 2 /usr/local/redis/bin/redis-server /usr/local/redis/redis-cluster/7002/redis.conf 3 /usr/local/redis/bin/redis-server /usr/local/redis/redis-cluster/7003/redis.conf 4 /usr/local/redis/bin/redis-server /usr/local/redis/redis-cluster/7004/redis.conf 5 /usr/local/redis/bin/redis-server /usr/local/redis/redis-cluster/7005/redis.conf 6 /usr/local/redis/bin/redis-server /usr/local/redis/redis-cluster/7006/redis.conf
查看是否啟動成功
使用ps-ef|grep redis 看下是否啟動成功6個節點
ps -ef|grep redis
第五步:用redis-cli創建整個redis集群(redis5以前的版本集群是依靠ruby腳本redis-trib.rb實現)
執行命令
/usr/local/redis/bin/redis-cli --cluster create 192.168.83.102:7001 192.168.83.102:7002 192.168.83.102:7003 192.168.83.102:7004 192.168.83.102:7005 192.168.83.102:7006 --cluster-replicas 1
說明:redis 5.x的集群創建不需要ruby環境了
--cluster-replicas 1 命令的意思是創建master的時候同時創建一個slave
ip不要使用127.0.0.1,否則在使用java代碼操作集群時會報錯,會提示連接錯亂。
會創建一個3master 3slaver的集群
輸入yes
看到這說明集群都創建完了
第七步:驗證集群:
1)連接任意一個客戶端即可:
./redis-cli -c -a xxx -h 192.168.5.100 -p 7001
提示:-a訪問服務端密碼,-c表示集群模式,指定ip地址和端口號(若沒有密碼,-a xxx可省略)
執行此命令:
打開端口為7001的客戶端 set一個值
./redis-cli -c -h 192.168.83.102 -p 7001
退出該節點,進入7002端口:
發現,7002端口也可以取值
2)進行驗證: cluster info(查看集群信息)、cluster nodes(查看節點列表)
3)進行數據操作驗證
4)關閉集群則需要逐個進行關閉,使用命令:(模板)
/usr/local/redis/src/redis-cli -a xxx -c -h 192.168.0.60 -p 8001 shutdown
執行如下命令:
/usr/local/redis/bin/redis-cli -c -p 7001 shutdown
說明7001已關閉
提示:在搭建集群后,依然可以進行主從復制的操作,備份數據。
參考:
https://www.jianshu.com/p/8045b92fafb2
https://blog.csdn.net/qq_36514588/article/details/83856795
https://blog.csdn.net/woyixinyiyi/article/details/87967911
https://blog.csdn.net/hoopopo_wll/article/details/84925563
https://my.oschina.net/ruoli/blog/2252393 (redis5 提供了關閉集群的工具)
在這里非常感謝以上作者的勞動果實。