Redis叢集搭建(3主3從)
Redis3.0開始支援叢集,在每個Master上存放的資料可各不相同,即分散式儲存的思想。叢集中的每個節點都需要知道叢集中自己之外的其它節點,這些需要在每個Redis節點的nodes-6379.conf中體現,該檔案是叢集建立後自動設定的,不需要手動修改。
本文中節點個數為6個,3個Master,每個Master存在一個Slave從節點。這6個節點的IP分別為:
192.168.0.203、192.168.0.204、192.168.0.205、192.168.0.206、192.168.0.207、192.168.0.208
需要修改叢集中各個節點的redis.conf檔案,下面以192.168.0.203上的redis配置檔案為例進行說明:
daemonize yes 設定為後臺啟動
port 6379 埠號,可以根據需要進行修改
bind 192.168.0.203 綁定當前機器的ip
dir /usr/local/redis/etc/ 指定資料檔案存放的位置
cluster-enabled yes 開啟叢集模式
cluster-config-file nodes-6379.conf 每一個叢集節點都需要一個不同的叢集配置檔案
appendonly yes 開啟aof
appendfilename “appendonly.aof” 指定aof檔名
yum install ruby 安裝ruby,Redis叢集需要使用ruby指令
yum install rubygems
gem install redis
由於centos支援的ruby預設版本到2.0.0,因此需要安裝RVM即Ruby的版本管理器
curl是一個檔案傳輸工具,支援檔案的上傳和下載。
下載RVM
curl -L get.rvm.io | bash -s stable
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
GPG signature verification failed for '/usr/local/rvm/archives/rvm-1.29.3.tgz' - 'https://github.com/rvm/rvm/releases/download/1.29.3/1.29.3.tar.gz.asc'! Try to install GPG v2 and then fetch the public key:
NOTE: GPG version 2.1.17 have a bug which cause failures during fetching keys from remote server. Please downgrade or upgrade to newer version (if available) or use the second method described above.
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
執行rvm指令碼
source /usr/local/rvm/scripts/rvm
檢視已知的ruby版本
rvm list known安裝ruby2.4.1版本
rvm install 2.4.1
檢視rvm指令的幫助資訊
切換到指定的ruby版本
rvm use 2.4.1
移除之前安裝的1.8.7版本
rvm remove 1.8.7
分別啟動6個節點中的Redis服務
在redis的安裝目錄src中,執行redis-trib.rb命令,redis-trib.rb是redis叢集操作的指令碼。首先檢視它的幫助資訊。
./redis-trib.rb help
./redis-trib.rb create --replicas 1 192.168.0.203:6379 192.168.0.204:6379 192.168.0.205:6379 192.168.0.206:6379 192.168.0.207:6379 192.168.0.208:6379
錯誤資訊:[ERR] Node 192.168.0.203:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
在啟動各個節點的redis之前,需要在各個節點使用redis-cli進入指定的redis服務並執行flushall,把各個節點中的資料清空。刪除appendonly.aof、dump.rdb,同時將每個節點中的叢集配置檔案nodes-6379.conf刪除。如下圖:
分別重新啟動6個節點中的Redis服務,再次嘗試執行下面指令
./redis-trib.rb create --replicas 1 192.168.0.203:6379 192.168.0.204:6379 192.168.0.205:6379 192.168.0.206:6379 192.168.0.207:6379 192.168.0.208:6379
--replicas 1 這個1=主節點個數/從節點個數 上述6個節點中,前3個是主節點 , 後3個是從節點。
主:192.168.0.203 從:192.168.0.206
主:192.168.0.204 從:192.168.0.207
主:192.168.0.205 從:192.168.0.208
若想重新建立叢集,可以將6個節點中的nodes-6379.conf刪掉,然後重新執行建立叢集的指令即可。