參考文章
https://blog.csdn.net/yyTomson/article/details/85783753
https://www.cnblogs.com/zy-303/p/10273167.html
1,環境兩台centos7主機IP地址為:172.16.103.12和172.16.103.13
2,上傳軟件包到/root/software下,編譯安裝兩台主機上的redis軟件。
cd root/software/
tar -zxvf redis-5.0.3.tar.gz
安裝編譯依賴的gcc包
yum -y install gcc
編譯安裝
cd redis-5.0.3
make && make install
3,將 redis-trib.rb 復制到 /usr/local/bin 目錄下
cd src/
cp redis-trib.rb /usr/local/bin/
4,在兩個節點上都創建redis_cluster目錄,並且在該目錄下創建7000,7001,7002目錄
mkdir -p /redis_cluster
cd /redis_cluster/
mkdir 7000 7001 7002
5,拷貝redis.conf文件到兩個節點上的7000,7001,7002目錄下
cp /root/software/redis-5.0.3/redis.conf /redis_cluster/7000
cp /root/software/redis-5.0.3/redis.conf /redis_cluster/7001
cp /root/software/redis-5.0.3/redis.conf /redis_cluster/7002
6,編輯7000/1/2目錄下的redis.conf配置文件,主要修改一下幾項
port 7000 //端口7000,7002,7003
bind 本機ip //默認ip為127.0.0.1 需要改為其他節點機器可訪問的ip 否則創建集群時無法訪問對應的端口,無法創建集群
daemonize yes //redis后台運行
pidfile /var/run/redis_7000.pid //pidfile文件對應7000,7001,7002
cluster-enabled yes //開啟集群 把注釋#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次啟動自動生成 7000,7001,7002
cluster-node-timeout 15000 //請求超時 默認15秒,可自行設置
appendonly yes //aof日志開啟 有需要就開啟,它會每次寫操作都記錄一條日志
#requirepass password123 //該項是設置密碼,也可以設置,也可以不設置,此處不設置密碼,查閱官方文檔,未找到設置密碼之后創建集群的命令格式
以上操作均在兩個節點都執行和修改
7,啟動各節點上的redis服務
172.16.103.12上執行
redis-server /redis_cluster/7000/redis.conf
redis-server /redis_cluster/7001/redis.conf
redis-server /redis_cluster/7002/redis.conf
172.16.103.13上執行
redis-server /redis_cluster/7000/redis.conf
redis-server /redis_cluster/7001/redis.conf
redis-server /redis_cluster/7002/redis.conf
8,可以使用netstat 命令檢查redis的開啟情況,使用的端口是7000,7001和7002,下面創建集群
在172.16.103.12上執行
redis-cli --cluster create --cluster-replicas 1 172.16.103.12:7000 172.16.103.12:7001 172.16.103.12:7002 172.16.103.13:7000 172.16.103.13:7001 172.16.103.13:7002
集群創建成功
8,登陸驗證
登陸創建一個鍵值
登陸其他節點,get鍵值
9,集群的關閉,以及集群的自動啟動
關閉集群的腳本,需要在兩個節點都執行
#腳本開始
#!/bin/bash
redis-cli -h 172.16.103.12 -p 7000 shutdown
redis-cli -h 172.16.103.12 -p 7001 shutdown
redis-cli -h 172.16.103.12 -p 7002 shutdown
#腳本結束
#腳本開始
#!/bin/bash
redis-cli -h 172.16.103.13 -p 7000 shutdown
redis-cli -h 172.16.103.13 -p 7001 shutdown
redis-cli -h 172.16.103.13 -p 7002 shutdown
#腳本結束
開機啟動的腳本
#腳本開始
#!/bin/bash
redis-server /redis_cluster/7000/redis.conf &> /dev/null
redis-server /redis_cluster/7001/redis.conf &> /dev/null
redis-server /redis_cluster/7002/redis.conf &> /dev/null
if [ $? -eq 0 ]
then
redis-cli --cluster create --cluster-replicas 1 172.16.103.12:7000 172.16.103.12:7001 172.16.103.12:7002 172.16.103.13:7000 172.16.103.13:7001 172.16.103.13:7002 &> /root/software/redis-cluster-start.log
else
echo "Redis Services Started Succeed! Please Check Node!"
fi
cat /root/software/redis-cluster-start.log | grep "All 16384 slots covered"
if [ $? -eq 0 ]
then
echo "Redis Cluster Started Succeed!"
else
echo "Redis Cluster Started Failed! Please check /root/software/redis-cluster-start.log"
fi
#腳本結束
這個啟動腳本運行過程中需要用戶輸入yes,這個用戶輸入的功能不知道怎么添加到腳本中。請大神指點。
10,相關報錯:
如圖所示報錯:[ERR] Node 172.16.103.12:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
解決該報錯的方法為停止所有節點的redis服務,使用命令為;
redis-cli -h 172.16.103.13 -p 7000 shutdown //Ip地址端口根據實際修改
刪除所有節點上的/root/software(redis軟件包所在的位置)下的nodes_*.conf文件和dump.rdb和appendonly.aof文件,刪除所有節點上/redis_cluster(創建的集群目錄)中的nodes_*.conf文件和dump.rdb和appendonly.aof文件,然后再重新創建集群,初步接觸redis,不確定刪除以上文件是否會造成數據丟失,但是redis本身作為緩存數據庫,即為緩存,應該多數都不重要吧。