20190929學習筆記(Redis叢集Cluster搭建記錄)
注明:
1、環境CetOS 7.4
2、Redis版本5.0.5
一、下載下傳及安裝
Redis官方網站:https://redis.io/download
1、在某個目錄下執行如下指令:
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make
2、在該目錄下建立叢集節點目錄
如圖:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL1EjMwQjNycTM5ITOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
我搭建的叢集節點為單節點,非主從模式,在實際生産中不建議這樣做,因為如果某個節點挂了連備機都沒有,直接導緻叢集故障。
3、在節點目錄下建立配置檔案
配置檔案redis.conf可從redis-5.0.5目錄下拷貝,然後修改,我直接講需要重點注意的地方
#指定redis隻能接受來自此IP綁定的網卡的請求,注意此預設值預設外網是不可通路的,是以需要把此項注釋掉
#bind 127.0.0.1
#是否開啟保護模式。如果沒有指定bind和密碼,redis隻會本地進行通路,拒絕外部通路。
protected-mode yes
#預設端口,建議生産環境不要使用預設端口避免被惡意掃描到
port 7000
#開啟redis叢集
cluster-enabled yes
#配置redis自動生成的叢集配置檔案名。確定同一系統中運作的各redis執行個體該配置檔案不要重名。
cluster-config-file nodes7000.conf
#叢集節點逾時毫秒數
cluster-node-timeout 5000
#背景運作
daemonize yes
#配置PID檔案路徑,以端口号做字尾友善區分
pidfile /var/run/redis_7000.pid
#日志檔案,如果指定了值,請手動建立檔案,否則啟動時會封包件不存在的錯誤
logfile "/usr/local/redisCluster/redis_7000/logs/redis.log"
#啟動AOF增量持久化政策
appendonly yes
#發生改變就記錄日志
appendfsync always
如果配置有誤,在Redis啟動時會報出相關行數的錯誤,請自行查詢修改。更多Redis的配置詳解,請參考:https://blog.csdn.net/u010188178/article/details/101692742
二、啟動及設定環境變量
1、啟動Redis
進入 Redis安裝目錄下的src目錄:cd cd /usr/local/redisCluster/redis-5.0.5/src
該目錄下面包含了Redis安裝的很多檔案,其中包括
(1)redis-server 伺服器端操作,可以使⽤help檢視幫助⽂檔
(2)redis-cli 用戶端操作
(3)redis-check-rdb 檢查Redis轉儲資料庫檔案的完整性
(4)redis-check-aof Redis AOF檔案檢查和修複
現在分别啟動Redis的3個節點
./ redis-server /usr/local/redisCluster/redis_7000/redis.conf
./ redis-server /usr/local/redisCluster/redis_7001/redis.conf
./ redis-server /usr/local/redisCluster/redis_7002/redis.conf
然後檢視啟動情況:ps –ef |grep redis
2、添加環境變量
如果每次啟動或者連接配接用戶端都要進入Redis的安裝目錄未免有些麻煩,不如直接将其設定到環境變量中。3種方式如下:
方法一:用export指令,輸入“export PATH="$PATH: /usr/local/redisCluster/redis-5.0.5/src”,臨時生效。
方法二:修改profile檔案,輸入vim /etc/profile,進行修改,永久對所有使用者生效。
方法三:修改.bashrc檔案,輸入vim /root/.bashrc,進行修改,永久對目前使用者(root)生效。
方法二、三改動如下:
export REDIS_HOME=/usr/local/redisCluster/redis-5.0.5
export PATH=$PATH: $REDIS_HOME/src
使用永久生效的方式,修改檔案後,執行source [檔案](如 /etc/profile),讓環境變量配置生效
修改生效後啟動Redis就可以直接使用 redis-server [配置檔案]啟動Redis。
三、設定開機啟動Redis叢集節點
每次重新開機後需要手動啟動Redis,為節省工作量,可設定開機啟動Redis叢集節點。
1、編寫Redis叢集節點啟動腳本
注意:redis配置中需要開啟背景啟動, daemonize yes
以我的腳本為例,很粗魯,僅供參考
#!/bin/sh
REDISPORT0=7000
REDISPORT1=7001
REDISPORT2=7002
EXEC=/usr/local/redisCluster/redis-5.0.5/src/redis-server
CLIEXEC=/usr/local/redisCluster/redis-5.0.5/src/redis-cli
PIDFILE=/var/run/redis_7000.pid
CONF0="/usr/local/redisCluster/redis_7000/redis.conf"
CONF1="/usr/local/redisCluster/redis_7001/redis.conf"
CONF2="/usr/local/redisCluster/redis_7002/redis.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
nohup $EXEC $CONF0 &
nohup $EXEC $CONF1 &
nohup $EXEC $CONF2 &
echo "Redis cluster started"
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT0 shutdown
$CLIEXEC -p $REDISPORT1 shutdown
$CLIEXEC -p $REDISPORT2 shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis cluster to shutdown ..."
sleep 1
done
echo "Redis cluster stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
2、将其儲存到目錄/etc/init.d/下,命名為redisd
添加其執行權限chmod +x redisd 或 chmod 755 redisd
編寫成功後執行檔案看看是否可以正确啟動,如有問題可通過檢視日志nohup.out排查原因。
3、配置redisd開機執行
chkconfig redisd on
重新開機機器後,發現以上3個節點已經成功啟動了。
四、建立Redis叢集
1、以上述為例實作的非主從3節點Cluster叢集,執行如下指令
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
補充一下:如果需要被其他機器通路,這裡千萬不能使用127.0.0.1,否則通路時會報錯:No more cluster attempts left。
解決方法是,使用真實真實IP
2、網上有很多教程一般都以3主3從為例建立Cluster叢集,執行如下指令
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
生産中建議使用主從模式建立叢集,防止單個節點挂掉影響到整個系統。
上面的 --cluster-replicas 1 官方解釋為:The option --cluster-replicas 1 means that we want a slave for every master created.意思是:為每一台主機(master)建立一台從機(slave),如果使用其他值,同理。
官方原文翻譯:Redis-cli将為您提供一個配置。輸入yes接受建議的配置。叢集将被配置和連接配接,這意味着執行個體将被引導到彼此之間進行通信。最後,如果一切順利,您将看到這樣一條消息:
[OK] All 16384 slots covered