Linux下搭建Redis分散式叢集(詳細圖解演示)
一 環境搭建.
1.1 環境準備.三臺虛擬機器.redis的版本是3.2.9.redis的各個版本下載地址:連結. 三個主節點三個從節點.
①:192.168.199.133.(部署兩個Redis服務.)分別在目錄redis_cluster7001和7002下.(作為叢集控制端,需要編譯安裝redis,並且安裝Ruby環境).
②:192.168.199.136.(部署兩個Redis服務.)分別在目錄redis_cluster7003和7004下.
③:192.168.199.137.(部署兩個Redis服務.)分別在目錄redis_cluster7005和7006下.
其中192.168.199.133下載了Redis並且編譯安裝了.
分別完成另外兩臺的目錄建立.
①:192.168.199.136.
②:192.168.199.137.
1.2 配置檔案複製.
192.168.199.133下執行:
scp -r /usr/local/redis/bin [email protected]:/usr/local/redis(-r遞迴複製目錄)
scp -r /usr/local/redis/bin [email protected]:/usr/local/redis
1.3 檢視複製結果.
複製redis下的redis.conf目錄至redis_cluster下的對應目錄下.
①:199.168.199.133.
cp redis.conf /usr/local/redis_cluster/7001
cp redis.conf /usr/local/redis_cluster/7002
②:192.168.199.136.
scp /usr/local/redis-3.2.9/redis.conf [email protected]:/usr/local/redis_cluster/7003
scp /usr/local/redis-3.2.9/redis.conf [email protected]:/usr/local/redis_cluster/7004
③:192.168.199.137.(同上)
scp /usr/local/redis-3.2.9/redis.conf [email protected]:/usr/local/redis_cluster/7005
scp /usr/local/redis-3.2.9/redis.conf [email protected]:/usr/local/redis_cluster/7006
二.修改配置檔案.
2.1修改下面幾個配置項.
port 7001 //六個節點配置檔案分別是7001-7003
bind 192.168.1.109 //預設ip為127.0.0.1 需要改為其他節點機器可訪問的ip 否則建立叢集時無法訪,和單機叢集有區別
daemonize yes //redis後臺執行
pidfile /var/run/redis_7001.pid //pidfile檔案對應7001-7003
cluster-enabled yes //開啟叢集
cluster-config-file nodes_7001.conf //儲存節點配置,自動建立,自動更新對應7001-7003
cluster-node-timeout 5000 //叢集超時時間,節點超過這個時間沒反應就斷定是宕機
appendonly yes //儲存方式,aof,將寫操作記錄儲存到日誌中
7001~7006的6個配置檔案都修改一下.根據所在目錄修改即可.
2.2 192.168.199.133做為建立叢集的主控制端,安裝Ruby環境.(建立叢集環境的指令碼是Ruby語言編寫的,需要Ruby的環境).
①:安裝Curl.
sudo yum install curl
檢視Curl的版本.curl --version
②:RVM的安裝.(直接yum安裝會出 現這樣的錯誤.RVM是Ruby的包管理器)
gem install redis
ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.)
參考這篇文章的解決方式:連結.
下面是自己按照文章中的解決方式走了一遍,是可行的.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable
find / -name rvm -print
source /usr/local/rvm/scripts/rvm
rvm list known(列出已知的rvm的版本)
rvm install 2.4.1(安裝rvm 2.4.1).
rvm use 2.4.1(使用2.4.1的版本).
rvm use 2.4.1 --default(設定ruby的預設版本)
rvm remove 2.0.0(移除ruby2.0.0的版本).
ruby --version(檢視ruby的版本).
安裝redis.
三:啟動Redis叢集.
3.1我三臺虛擬機器由於沒有啟動防火牆,如果啟動了,做一下這些埠的對映.首先是啟動6個Redis服務.
①:192.168.199.133的7001和7002服務.
./redis-server /usr/local/redis_cluster/7001/redis.conf
./redis-server /usr/local/redis_cluster/7002/redis.conf
ps -ef | grep -i redis
② 192.168.199.136
./redis-server /usr/local/redis_cluster/7003/redis.conf
./redis-server /usr/local/redis_cluster/7004/redis.conf
ps -ef | grep -i redis
③ 192.168.199.137
./redis-server /usr/local/redis_cluster/7005/redis.conf
./redis-server /usr/local/redis_cluster/7006/redis.conf
ps -ef | grep -i redis
至此6臺Redis服務均已成功啟動了.
3.2 Redis的Ruby指令碼建立叢集.
redis-3.2.9的src目錄下有redis-trib.rb指令碼.
./redis-trib.rb create --replicas 1 192.168.199.133:7001 192.168.199.136:7003 192.168.199.137:7005 192.168.199.133:7002 192.168.199.136:7004 192.168.199.137:7006 (這裡說明一下,按照順序,前面的是主節點後面三個是從節點,--replicates 1表示一個主節點有三個從節點的.)
三個主節點的Hash槽範圍是:一共有16384的hash solt。(0~16383)
7001:(0~5460)
7003:(5461~10922)
7005:(10923~16383)
至此,完成了Linux下的三臺機器上三主三從節點的分散式Redis的叢集搭建.這裡是在虛擬機器裡面搭建,如果是雲伺服器上,肯定是開啟了防火牆的,注意新增叢集的埠開放,以及安全組的相應埠開放,否則會一直Join...新增服務中的.
四 測試Redis叢集.
4.1.首先是Redis客戶端連線一下Redis服務.key值的測試.
./redis-cli -h 192.168.199.136 -p 7003 -c(-h是IP,-p是埠,-c是連線叢集)
連線集群后和單臺操作redis的key一樣,這裡是設定了一個key,沒有跳轉是因為分配hash槽是就分配在這個7003主節點上了.
Redis Cluster值分配規則,所以分配key的時候,它會使用CRC16(‘my_name’)%16384演算法,來計算,將這個key 放到哪個節點,這裡分配到了15118slot 就分配到了7005(10923~16383)這個節點上。所以有這樣一個跳轉:
-> Redirected to slot [15118] located at 192.168.199.137:7005
看一下下面刪除這兩個key時,會更清楚一些.7005主節點跳轉之7003主節點.5798屬於(5461~10922).
4.2 叢集宕機測試.
①:首先是幹掉一個主節點,例如7003.(當這個主節點有從節點的時候)
./redis-trib.rb check 192.168.199.133:7001(check檢查叢集)7003對應的主節點掛了,則從節點7002升為主節點
cluster nodes(這裡連線一個從節點7004).
②:再次幹掉一個主節點(當這個主節點沒有從節點的時候).直接說就是7002節點.
再次檢測叢集.
./redis-trib.rb check 192.168.199.133:7001
至此完成了,Linux下的分散式Redis的叢集搭建的完整過程.遇到了一些問題,多思考一下,還是比較簡單的.