1. 程式人生 > >Ubuntu 16.04下Redis叢集部署

Ubuntu 16.04下Redis叢集部署

Linux版本:Ubuntu16.04系統。

(要讓叢集正常工作至少需要3個主節點,在這裡我們要建立6個redis節點,其中三個為主節點,三個為從節點,對應的redis節點的ip和埠對應關係如下)
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


1:下載redis。 官網下載3.2.6版本,之前2.幾的版本不支援叢集模式
下載地址:http://download.redis.io/releases/
2:上傳伺服器,解壓,編譯

tar -zxvf redis-3.2.6.tar.gz
mv redis-3.2.6 /usr/local/redis3.
0 cd /usr/local/redis3.0make

之後就生成了 redis-server redis-client 等檔案在 src裡。

3:建立叢集需要的目錄

mkdir -p /usr/local/cluster
cd /usr/local/cluster
mkdir 7000
mkdir 7001
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005 

4:修改配置檔案redis.conf
cp /usr/local/redis3.0/redis.conf /usr/local/cluster
vi redis.conf
##修改配置檔案中的下面選項

pidfile /var/run/redis.7000.pid #個性化
port 7000
#個性化 daemonize yes cluster-enabled yes cluster-config-file nodes.7000.conf #個性化 cluster-node-timeout 5000 appendonly yes appendfilename "appendonly.7000.aof" #個性化

##修改完redis.conf配置檔案中的這些配置項之後把這個配置檔案分別拷貝到7000/7001/7002/7003/7004/7005目錄下面

cp /usr/local/cluster/redis.conf /usr/local/cluster/7000
cp /usr/local/cluster/redis.conf /usr/local/cluster/7001
cp /usr/local/cluster/redis.conf /usr/local/cluster/7002 cp /usr/local/cluster/redis.conf /usr/local/cluster/7003 cp /usr/local/cluster/redis.conf /usr/local/cluster/7004 cp /usr/local/cluster/redis.conf /usr/local/cluster/7005

##注意:拷貝完成之後要修改7001/7002/7003/7004/7005目錄下面redis.conf檔案中 標註個性化的 引數,分別改為對應的資料夾的名稱

5:分別啟動這6個redis例項
vi /usr/local/cluster/redis-start.sh
加入以下內容

#!/bin/sh
/usr/local/redis3.0/src/redis-server /usr/local/cluster/7000/redis.conf &
/usr/local/redis3.0/src/redis-server /usr/local/cluster/7001/redis.conf &
/usr/local/redis3.0/src/redis-server /usr/local/cluster/7002/redis.conf &
/usr/local/redis3.0/src/redis-server /usr/local/cluster/7003/redis.conf &
/usr/local/redis3.0/src/redis-server /usr/local/cluster/7004/redis.conf &
/usr/local/redis3.0/src/redis-server /usr/local/cluster/7005/redis.conf &

然後

chmod +x /usr/local/cluster/redis-start
/usr/local/cluster/redis-start

##啟動之後使用命令檢視redis的啟動情況ps -ef|grep redis


6:執行redis的建立叢集命令建立叢集
安裝ruby ,因為./redis-trib.rb 是執行的ruby的指令碼,需要ruby的環境
sudo apt-get install ruby

為了執行 redis-trib.rb 需要安裝 輸入命令:sudo gem install redis 可能會有長城防火牆的問題
#可以去https://rubygems.org/gems/redis/versions/3.2.2 下載最新版本。
#然後用命令 sudo gem install redis-3.2.2.gem

cd /usr/local/redis3.0/src
./redis-trib.rb  create --replicas 1 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

有下面輸出表示成功了。

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
Adding replica 127.0.0.1:7003 to 127.0.0.1:7000
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
M: 1cdc6971ddbcf64427a9499e19b048afa55aff08 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
M: a355b2ccb1fdf413652a14cec722076af958a079 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
M: 0bc286b514d36e7195142ff0d55a87542048b5a9 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
S: a3b7c85fe957917bd383b181de3f1a3f31df8a05 127.0.0.1:7003
   replicates 1cdc6971ddbcf64427a9499e19b048afa55aff08
S: 9f0f4045497a72b64783fd9c2387f38b7e3bda6c 127.0.0.1:7004
   replicates a355b2ccb1fdf413652a14cec722076af958a079
S: f4b371c4e1d0fddfbe1552e540ddd36a5a00200b 127.0.0.1:7005
   replicates 0bc286b514d36e7195142ff0d55a87542048b5a9
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join...
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 1cdc6971ddbcf64427a9499e19b048afa55aff08 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
M: a355b2ccb1fdf413652a14cec722076af958a079 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
M: 0bc286b514d36e7195142ff0d55a87542048b5a9 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
M: a3b7c85fe957917bd383b181de3f1a3f31df8a05 127.0.0.1:7003
   slots: (0 slots) master
   replicates 1cdc6971ddbcf64427a9499e19b048afa55aff08
M: 9f0f4045497a72b64783fd9c2387f38b7e3bda6c 127.0.0.1:7004
   slots: (0 slots) master
   replicates a355b2ccb1fdf413652a14cec722076af958a079
M: f4b371c4e1d0fddfbe1552e540ddd36a5a00200b 127.0.0.1:7005
   slots: (0 slots) master
   replicates 0bc286b514d36e7195142ff0d55a87542048b5a9
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

這樣redis-cluster叢集就啟動了

7、檢視叢集目前狀況:

$ redis-cli -c -p 7000
127.0.0.1:7000> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:0
cluster_stats_messages_sent:8770
cluster_stats_messages_received:8770

8、測試存值取值:每一次操作過後可能就跳到別的裡面了。就是那個Redirected to slot ……

127.0.0.1:7002> set foo bar
OK
127.0.0.1:7000> set hello world
OK
127.0.0.1:7000> get foo
-> Redirected to slot [12182] located at 127.0.0.1:7002
"bar"
127.0.0.1:7002> get hello
-> Redirected to slot [866] located at 127.0.0.1:7000
"world"
127.0.0.1:7000> get name
-> Redirected to slot [5798] located at 127.0.0.1:7001
(nil)
127.0.0.1:7001
127.0.0.1:7002> get name
-> Redirected to slot [5798] located at 127.0.0.1:7001
(nil)
127.0.0.1:7001>

參考文章:https://www.linuxidc.com/Linux/2016-06/132340.htm

下面關於Redis的文章您也可能喜歡,不妨參考下: