相關介紹:
Redis從3.0版本開始支持集群!
集群一般由多個節點組成,節點數量至少6個才能保證組成完整高可用的集群。
每個節點需要開啟配置文件中的cluster-enabled yes,讓Redis運行在集群模式下。
測試環境:
資源有限,這里使用3台虛擬機模擬6個節點(用端口區分),每台虛機2個節點,如下圖:
注:Redis默認端口:6379,這里方便起見,設定從7001~7006來區分6個節點。
操作步驟:
Redis下載官網:https://redis.io/
1. 節點准備
每台機器都先編譯安裝Redis (經測試,redis-3.2.9 集群搭建方法一樣)
[root@server-1 ~]# tar zxvf redis-4.0.1.tar.gz
[root@server-1 ~]# cd redis-4.0.1
[root@server-1 redis-4.0.1]# make && make install //不需要configure,直接make,別忘了系統先裝好gcc和zlib-devel
[root@server-1 redis-4.0.1]# redis-server -v //檢查一下版本
server-2和server-3操作同上;
2. 配置每個節點
在server-1上:
[root@server-1 redis-4.0.1]# mkdir -p /opt/redis-cluster/{7001,7004} //在/opt目錄下新建一個redis-cluster文件夾,並在里面新建2個文件夾,用來區分節點
[root@server-1 redis-4.0.1]# cp redis.conf /opt/redis-cluster/7001/redis-7001.conf
[root@server-1 redis-4.0.1]# vim /opt/redis-cluster/7001/redis-7001.conf //必要需要修改如下,其他細化優化的配置項可暫時保持默認
bind 192.168.1.21 #本機IP
port 7001 #改為設定的端口
daemonize yes #后台啟動
cluster-enabled yes #啟動集群模式
cluster-config-file nodes-7001.conf #集群內部配置文件,改掉端口號
cluster-node-timeout 15000 #節點超時時間,單位:毫秒
[root@server-1 redis-4.0.1]# cp redis.conf /opt/redis-cluster/7004/redis-7004.conf
[root@server-1 redis-4.0.1]# vim /opt/redis-cluster/7004/redis-7004.conf
bind 192.168.1.21 #本機IP
port 7004 #改為設定的端口
daemonize yes #后台啟動
cluster-enabled yes #啟動集群模式
cluster-config-file nodes-7004.conf #集群內部配置文件,改掉端口號
cluster-node-timeout 15000 #節點超時時間,單位:毫秒
在server-2上:
[root@server-2 redis-4.0.1]# mkdir -p /opt/redis-cluster/{7002,7005}
......參考server-1......
在server-3上:
[root@server-3 redis-4.0.1]# mkdir -p /opt/redis-cluster/{7003,7006}
......參考server-1......
3. 啟動每個節點
在server-1上:
[root@server-1 redis-4.0.1]# redis-server /opt/redis-cluster/7001/redis-7001.conf
[root@server-1 redis-4.0.1]# redis-server /opt/redis-cluster/7004/redis-7004.conf
在server-2上:
[root@server-1 redis-4.0.1]# redis-server /opt/redis-cluster/7002/redis-7002.conf
[root@server-1 redis-4.0.1]# redis-server /opt/redis-cluster/7005/redis-7005.conf
在server-3上:
[root@server-1 redis-4.0.1]# redis-server /opt/redis-cluster/7003/redis-7003.conf
[root@server-1 redis-4.0.1]# redis-server /opt/redis-cluster/7006/redis-7006.conf
4. redis-trib.rb環境准備(該文件存在於redis-4.0.1/src/目錄中) //只需要在其中一台上執行此步驟!!
redis-trib.rb是采用Ruby實現的Redis集群管理工具。內部通過Cluster相關命令幫助
我們簡化集群創建、檢查、槽遷移和均衡等常見操作,使用之前需要安裝Ruby依賴環境。
注:以下安裝Ruby的方法如果覺得麻煩,可以參考另一篇文章:centos7/rhel7安裝較高版本ruby2.2/2.3/2.4+
①安裝Ruby
~]# wget http://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.5.tar.gz
~]# tar zxvf ruby-2.3.5.tar.gz
~]# cd ruby-2.3.5
ruby-2.3.5]# ./configure --prefix=/opt/ruby
ruby-2.3.5]# make && make install
ruby-2.3.5]# ln -s /opt/ruby/bin/ruby /usr/bin/ruby
ruby-2.3.5]# ln -s /opt/ruby/bin/gem /usr/bin/gem
~]#ruby -v //查看一下
②安裝rubygem redis依賴
~]# wget http://rubygems.org/downloads/redis-3.3.0.gem
~]# gem install -l redis-3.3.0.gem
如果這步報錯,如下:
~]# gem install -l redis-3.3.0.gem ERROR: Loading command: install (LoadError) cannot load such file -- zlib ERROR: While executing gem ... (NoMethodError) undefined method `invoke_with_build_args' for nil:NilClass
解決辦法如下:
yum -y install zlib-devel 進入ruby源碼文件夾,安裝ruby自身提供的zlib包 cd ruby-2.3.5/ext/zlib ruby ./extconf.rb make make install
然后再次執行gem install -l redis-4.0.1.gem,正常通過顯示Successfully... 。
③檢查redis-trib.rb的可用性
~]# ./redis-4.0.1/src/redis-trib.rb //如下圖所示代表可用了
5. 創建集群
只需要執行一條長命令,如下:
~]#./redis-4.0.1/src/redis-trib.rb create --replicas 1 192.168.1.21:7001 192.168.1.22:7002 192.168.1.23:7003 192.168.1.21:7004 192.168.1.22:7005 192.168.1.23:7006
說明:--replicas參數指定集群中每個主節點配備幾個從節點,這里設置為1。
這里因為測試,只用了3台機器,如果部署節點使用不同的IP地址,redis-trib-rb會盡可能保證主從節點不分配在同一台機器下,
因此會重新排序節點表順序。節點列表順序用於確定主從角色,先主節點之后是從節點。
創建過程中首先會給出主從節點角色分配的計划,如下圖:
最后的輸出報告說明:16384個槽全部被分配完,集群創建成功。
這里需要注意給redis-trib.rb的節點地址必須是不包含任何槽/數據的節點,否則會拒絕創建集群。
6. 集群完整性檢查
集群完整性指所有的槽都分配到存活的主節點上,只要16384個槽中有一個沒有分配給節點則表示集群不完整。
可以用redis-trib.rb check命令檢測之前創建的集群是否成功,check命令只需要給出集群中任意一個節點地址就可以
完成整個集群的檢查工作,命令使用如下所示:
[root@server-1 ~]# ./redis-4.0.1/src/redis-trib.rb check 192.168.1.22:7002
結束.