天天看點

redis cluster搭建

從redis官網看最新穩定版本已經更新到3.2.6了,我這裡補充一篇以前3.2.0的叢集配置。

<b>說明:</b><b></b>

redis從3.0版本以後開始支援cluster模式,原理和功能大家可以上網查,對于運維人員來說最重要的去掉了代理層、避免出現單點故障,但是redis cluster至少需要三個主節點和三個從節點。每一對主從形成一組關系。是以需要三台伺服器,每台伺服器上兩個執行個體。因為一個主對應一個從,是以一台伺服器上不能同時是一個主和從,必須三台伺服器分開主從,來保證服務的正常運作。我這裡為了示範友善就在一台伺服器上部署。注意:生産環境必須是三台機器,不然達不到高可用。

<b>部署環境:</b><b></b>

主機名

IP位址

作業系統版本

用途

test01

192.168.2.9

CentOS6.3(64位)

執行個體 7000/7001

test02

192.168.2.10

CentOS 6.3(64位)

執行個體 7002/7003

test03

192.168.2.7

執行個體 7004/7005

部署步驟:

1、編譯安裝redis。

把安裝包放在/data/下解壓并編譯

點選(此處)折疊或打開

[root@test01 data]# tar -zxf redis-3.2.0.tar.gz

[root@test01 redis]# cd redis-3.2.0

[root@test01 redis-3.2.0]# make &amp;&amp; make install

[root@test01 redis]# ln -s /data/redis/redis-3.2.0 /usr/local/redis

2、建立redis叢集節點

[root@test01 local]# mkdir redis_cluster

[root@test01 local]# cd redis_cluster/

[root@test01 redis_cluster]# mkdir 7000 7001

3、複制預設的節點配置檔案到叢集節點中

[root@test01 redis_cluster]# cp /usr/local/redis/redis.conf ./7000

4、修改預設配置檔案

[root@test01 7000]# vim redis.conf

daemonize yes //redis背景運作

pidfile /var/run/redis_7000.pid //pidfile檔案對應7000

port 7000 //端口7000

cluster-enabled yes //開啟叢集 把注釋#去掉

cluster-config-file nodes.conf //叢集的配置 配置檔案首次啟動自動生成

cluster-node-timeout 6000 //請求逾時

appendonly yes //日志開啟,環境測試開啟,正式環境建議關閉

bind 192.168.2.9 //修改監聽的位址為本機位址

5、修改完後把配置檔案複制到7001上并修改相應的端口。

[root@test01 7000]# cp redis.conf ../7001/

6、另外兩台伺服器重複上面配置。

7、啟動各個節點,注意一定要到端口目錄下去啟動,不然有的啟動不起來。

[root@test01 7000]# /usr/local/redis/src/redis-server redis.conf

[root@test01 7000]# cd ../7001/

[root@test01 7001]# /usr/local/redis/src/redis-server redis.conf

檢視啟動程序

[root@test01 7001]# ps -ef|grep redis

root 8858 1 0 11:38 ? 00:00:00 /usr/local/redis/src/redis-server 192.168.2.9:7000 [cluster]

root 8865 1 0 11:39 ? 00:00:00 /usr/local/redis/src/redis-server 192.168.2.9:7001 [cluster]

root 8870 27799 0 11:39 pts/1 00:00:00 grep redis

再分别啟動其餘伺服器節點。

8、建立叢集必須的軟體,三台伺服器都執行

[root@test01 7000]# yum -y install ruby ruby-devel rubygems rpm-build

[root@test01 7000]# ruby -v

ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]

[root@redis 7000]# rpm -qa|grep rubyge

rubygems-1.3.7-5.el6.noarch

[root@redis 7000]# gem install redis

Successfully installed redis-3.3.0

1 gem installed

Installing ri documentation for redis-3.3.0...

Installing RDoc documentation for redis-3.3.0.

9、确認所有的節點都啟動,接下來使用參數create 建立

[root@test01 7000]# /usr/local/redis/src/redis-trib.rb create --replicas 1 192.168.2.9:7000 192.168.2.10:7002 192.168.2.7:7004 192.168.2.10:7003 192.168.2.7:7005 192.168.2.9:7001

&gt;&gt;&gt; Creating cluster

&gt;&gt;&gt; Performing hash slots allocation on 6 nodes...

Using 3 masters:

192.168.2.7:7004

192.168.2.9:7000

192.168.2.10:7002

Adding replica 192.168.2.9:7001 to 192.168.2.7:7004

Adding replica 192.168.2.7:7005 to 192.168.2.9:7000

Adding replica 192.168.2.10:7003 to 192.168.2.10:7002

M: bede5b72dfbb5274e52a1f0c5f6b43170afec8af 192.168.2.9:7000

slots:5461-10922 (5462 slots) master

M: 01594f84df9e743a74a47f9aaa58fa41402dfe25 192.168.2.10:7002

slots:10923-16383 (5461 slots) master

M: 27cedfdc0a648b9141736f156a4d89828d7bf695 192.168.2.7:7004

slots:0-5460 (5461 slots) master

S: 6f13ca12a9be3b0c093d02c81fed337307f295af 192.168.2.10:7003

replicates 01594f84df9e743a74a47f9aaa58fa41402dfe25

S: 00333fa0ac74863e86c3108f6040abe1183a2b9b 192.168.2.7:7005

replicates bede5b72dfbb5274e52a1f0c5f6b43170afec8af

S: f167b98d8f78bfdb4c1823c0d6be7f1a12aff194 192.168.2.9:7001

replicates 27cedfdc0a648b9141736f156a4d89828d7bf695

Can I set the above configuration? (type 'yes' to accept): yes

&gt;&gt;&gt; Nodes configuration updated

&gt;&gt;&gt; Assign a different config epoch to each node

&gt;&gt;&gt; Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join...

&gt;&gt;&gt; Performing Cluster Check (using node 192.168.2.9:7000)

M: 6f13ca12a9be3b0c093d02c81fed337307f295af 192.168.2.10:7003

slots: (0 slots) master

M: 00333fa0ac74863e86c3108f6040abe1183a2b9b 192.168.2.7:7005

M: f167b98d8f78bfdb4c1823c0d6be7f1a12aff194 192.168.2.9:7001

[OK] All nodes agree about slots configuration.

&gt;&gt;&gt; Check for open slots...

&gt;&gt;&gt; Check slots coverage...

[OK] All 16384 slots covered.

--replicas 1  建立叢集指定一個從節點。

因為建立叢集的時候不能指定主從,它是随機的。加入叢集的節點順序不分前後,如果一台伺服器上正好有主節點和從節點,而且是一組的話,必須将同一台伺服器上的主從節點踢掉,換成不同伺服器的節點。

從上面可以看到很不辛7003和7002配置設定了一台伺服器上。經過測試一般都會有一台伺服器上存在同一組的主和從節點。

主從關系圖:

192.168.2.10:7002        192.168.2.10:7003

192.168.2.9:7000         192.168.2.7:7005

192.168.2.7:7004         192.168.2.9:7001

10、我們把192.168.2.10:7003和192.168.2.7:7005調換下。

删除7003節點

[root@test01 7000]# /usr/local/redis/src/redis-trib.rb del-node 192.168.2.10:7003 6f13ca12a9be3b0c093d02c81fed337307f295af

&gt;&gt;&gt; Removing node 6f13ca12a9be3b0c093d02c81fed337307f295af from cluster 192.168.2.10:7003

&gt;&gt;&gt; Sending CLUSTER FORGET messages to the cluster...

&gt;&gt;&gt; SHUTDOWN the node.

del-node  删除節點後面跟主機和對應的端口還有執行個體的id。這樣才能删除。

11、修改192.168.2.7:7005的主為192.168.2.10:7002

進入192.168.2.7:7005的redis

[root@test02 redis_cluster]# /usr/local/redis/src/redis-cli -c -p 7005 -h 192.168.2.7

192.168.2.7:7005&gt; cluster replicate 01594f84df9e743a74a47f9aaa58fa41402dfe25 #新主的id

OK

檢視現在主從狀态

[root@test02 redis_cluster]# /usr/local/redis/src/redis-trib.rb check 192.168.2.10:7002

&gt;&gt;&gt; Performing Cluster Check (using node 192.168.2.10:7002)

1 additional replica(s)

0 additional replica(s)

slots: (0 slots) slave

可以看到主從關系已經改變。

12、再添加剛删除的7003節點。

[root@test02 redis_cluster]# ps -ef|grep redis

root 4441 1 0 11:45 ? 00:00:13 /usr/local/redis/src/redis-server 192.168.2.10:7002 [cluster]

root 4673 4275 0 15:02 pts/0 00:00:00 grep redis

[root@test02 redis_cluster]# cd 7003/

[root@test02 7003]# ls

appendonly.aof dump.rdb nodes.conf redis.conf

[root@test02 7003]# rm -f appendonly.aof dump.rdb nodes.conf

[root@test02 7003]# /usr/local/redis/src/redis-server redis.conf

[root@test02 7003]# ps -ef|grep redis

root 4441 1 0 11:45 ? 00:00:14 /usr/local/redis/src/redis-server 192.168.2.10:7002 [cluster]

root 4677 1 0 15:02 ? 00:00:00 /usr/local/redis/src/redis-server 192.168.2.10:7003 [cluster]

root 4681 4275 0 15:02 pts/0 00:00:00 grep redis

13、執行下列指令添加從指定的主節點。

[root@test02 7003]# /usr/local/redis/src/redis-trib.rb add-node --slave --master-id bede5b72dfbb5274e52a1f0c5f6b43170afec8af 192.168.2.10:7003 192.168.2.9:7000

&gt;&gt;&gt; Adding node 192.168.2.7:7005 to cluster 192.168.2.9:7000

&gt;&gt;&gt; Send CLUSTER MEET to node 192.168.2.10:7003 to make it join the cluster.

Waiting for the cluster to join.

&gt;&gt;&gt; Configure node as replica of 192.168.2.9:7000.

[OK] New node added correctly.

從上面顯示7003節點成為7000的從節點。

14、檢視主從現在情況

[root@test02 7003]# /usr/local/redis/src/redis-trib.rb check 192.168.2.10:7002

S: 2e26f92f8dca2dfb13f159a59b6260f106bc8cb4 192.168.2.10:7003

[OK] All 16384 slots covered

這樣就是一個正常的叢集了~~運維人員再也不會因為當機或者redis挂了的問題頭疼了!

上一篇: git指令
下一篇: IOS檔案處理