Redis入門到精通-Redis集羣搭建

在Redis3.x之前,提供了sentinel工具來監控各個Master的狀態,如果Master異常,則會做主從切換,將slave作爲Master。其配置也是稍微的複雜,並且各方面表現一般。

​ 現在redis3.x已經支持集羣的容錯功能,並且非常簡單。

​ 參考文檔

​ Redis 官方集羣指南:http://redis.io/topics/cluster-tutorial​ Redis 官方集羣規範:http://redis.io/topics/cluster-spec​ Redis 集羣指南(中文翻譯,緊供參考):http://redisdoc.com/topic/cluster-tutorial.html​ Redis 集羣規範(中文翻譯,緊供參考): http://redisdoc.com/topic/cluster-spec.html

1 集羣規劃

​ 要讓 Redis3.0 集羣正常工作至少需要 3 個 Master 節點,要想實現高可用,每個 Master 節點要配備至少 1 個 Slave 節點。根據以上特點和要求,進行如下的集羣實施規劃:

​ 使用 6 臺服務器(物理機或虛擬機,我本機電腦只有8G內存,我採用文件系統隔離模擬6臺服務器)部署 3 個 Master + 3 個 Slave;

主機名 IP 服務端口(默認6379) 集羣端口(服務端口+10000) 主/從
redis-01 10.0.31.144 7111 17111 Master
redis-02 10.0.31.144 7112 17112 Master
Redis-03 10.0.31.144 7113 17113 Master
redis-04 10.0.31.144 7114 17114 Slave
redis-05 10.0.31.144 7115 17115 Slave
redis-06 10.0.31.144 7116 17116 Slave

2 環境準備

​ IP:10.0.31.144

​ 環境:CentOS 6.6

​ redis集羣需要適應ruby命令

[root@localhost ~]yum install ruby
[root@localhost ~]yum install rubygems
[root@localhost ~]gem install redis  //安裝redis和ruby的接口
Centos默認支持ruby到2.0.0,可gem 安裝redis需要最低是2.2.2
解決辦法是 先安裝rvm,再把ruby版本提升至2.3.3

參考文檔:http://blog.csdn.net/fengye_yulu/article/details/77628094

解決國內gem不用能的問題
# gem sources -r https://rubygems.org/
# gem sources -a https://ruby.taobao.org/
# gem sources -l
*** CURRENT SOURCES ***
https://ruby.taobao.org


​ Redis版本:redis-3.X

​ 用戶:root

​ 安裝目錄:/usr/local/redis-cluster:

[root@localhost ~]# mkdir /usr/local/redis-cluster
[root@localhost ~]# cd /usr/local/redis-cluster/
[root@localhost redis-cluster]# mkdir 7111
[root@localhost redis-cluster]# mkdir 7112
[root@localhost redis-cluster]# mkdir 7113
[root@localhost redis-cluster]# mkdir 7114
[root@localhost redis-cluster]# mkdir 7115
[root@localhost redis-cluster]# mkdir 7116
[root@localhost redis-cluster]# pwd
/usr/local/redis-cluster
[root@localhost redis-cluster]# ll
總用量 24
drwxr-xr-x 2 root root 4096 1021 16:06 7111
drwxr-xr-x 2 root root 4096 1021 16:06 7112
drwxr-xr-x 2 root root 4096 1021 16:06 7113
drwxr-xr-x 2 root root 4096 1021 16:06 7114
drwxr-xr-x 2 root root 4096 1021 16:06 7115
drwxr-xr-x 2 root root 4096 1021 16:06 7116
[root@localhost redis-cluster]#

3 集羣配置

(1)本案例中的單機部署僞集羣

​ 本機上已安裝過單機版redis,把之前的//usr/local/src/redis3.2/scr/redis.conf分別copy到/usr/local/redis-cluster/711X文件夾下,並分別重命名爲 redis-711X.conf,進行配置修改。

[root@localhost ~]# cp //usr/local/src/redis3.2/scr/redis.conf  /usr/local/redis-cluster/7111/redis-7111.conf
[root@localhost ~]# cp //usr/local/src/redis3.2/scr/redis.conf  /usr/local/redis-cluster/7112/redis-7112.conf
[root@localhost ~]# cp //usr/local/src/redis3.2/scr/redis.conf  /usr/local/redis-cluster/7113/redis-7113.conf
[root@localhost ~]# cp //usr/local/src/redis3.2/scr/redis.conf  /usr/local/redis-cluster/7114/redis-7114.conf
[root@localhost ~]# cp //usr/local/src/redis3.2/scr/redis.conf  /usr/local/redis-cluster/7115/redis-7115.conf
[root@localhost ~]# cp //usr/local/src/redis3.2/scr/redis.conf  /usr/local/redis-cluster/7116/redis-7116.conf

​ 配置集羣的redis-7111X.conf

[root@localhost ~]# vim /usr/local/redis-cluster/711X/redis-711X.conf

​ 配置參數:

配置選項 選項值 說明
daemonize yes 是否作爲守護進程運行
pidfile /var/run/redis-711X.pid 爲後臺運行的進程提供一個pid
port 711X 監聽端口,默認6379,集羣通訊端口默認爲此地址+10000
databases 1 可用數據庫,默認16,默認數據庫存儲在DB0中,無特殊需求,建議設置一個數據庫
cluster-enable yes 打開redis集羣
cluster-config-file //usr/local/src/redis3.2/cluster/711X/nodes711X.conf 集羣配置文件(啓動自動生成),不用人爲干涉
cluster-migration-barrier 1 數據遷移的副本臨界數,這個參數表示的是,一個主節點在擁有多少個好的從節點的時候就要割讓一個從節點出來給另一個沒有任何從節點的主節點。
cluster-required-full-coverage Yes 如果一些kes space沒有被集羣中任何節點覆蓋,集羣將停止接收寫入
appendonly yes 啓用aof持久化方式
dir /usr/local/redis-cluster/711X 節點數據持久化存放目錄(建議配置)
cluster-node-timeout 15000 節點互連超時時間(毫秒)
bind 當前機器IP 綁定當前機器IP

(2)如果準備的是6臺虛擬機或物理機

在每一臺機器上都執行以下步驟:(通單機版安裝)

1.編譯和安裝所需要的包:

[root@localhost ~] # yum install gcc tcl

2.上傳或下載redis穩定版3.x 到軟件源碼目錄 /usr/local/src/

[root@localhost src]# cd /usr/local/src/
[root@localhost src]# wget http://download.redis.io/releases/redis-3.2.11.tar.gz

3.解壓(重命名爲redis3.2):

[root@localhost src]# tar -zxvf redis-3.2.11.tar.gz
[root@localhost src]# mv redis-3.2.11 redis3.2

4.創建安裝目錄

[root@localhost utils]# mkdir /usr/local/redis

5.編譯安裝(使用PREFIX指定安裝目錄)

​ 進入到/usr/local/src/redis-3.1/src目錄

[root@localhost utils]# cd ../src/
[root@localhost src]# make PREFIX=/usr/local/redis install

6.配置集羣

創建集羣配置目錄,並拷貝 redid.conf 配置文件到各節點配置目錄:192.168.1.111

# mkdir -p /usr/local/redis-cluster/7111
# cp /usr/local/src/redis3.2/redis.conf /usr/local/redis-cluster/7111/redis-7111.conf

192.168.1.112

# mkdir -p /usr/local/redis-cluster/7112
# cp /usr/local/src/redis3.2/redis.conf /usr/local/redis-cluster/7112/redis-7112.conf

192.168.1.113

# mkdir -p /usr/local/redis-cluster/7113
# cp /usr/local/src/redis3.2/redis.conf /usr/local/redis-cluster/7113/redis-7113.conf

192.168.1.114

# mkdir -p /usr/local/redis-cluster/7114
# cp /usr/local/src/redis3.2/redis.conf /usr/local/redis-cluster/7114/redis-7114.conf

192.168.1.115

# mkdir -p /usr/local/redis-cluster/7115
# cp /usr/local/src/redis3.2/redis.conf /usr/local/redis-cluster/7115/redis-7115.conf

192.168.1.116

# mkdir -p /usr/local/redis-cluster/7116
# cp /usr/local/src/redis3.2/redis.conf /usr/local/redis-cluster/7116/redis-7116.conf

具體配置內容參看(1)中的配置案例。

4 集羣創建

​ 分別啓動6個redis實例,然後檢查是否啓動成功

[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/7111/redis-7111.conf
[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/7112/redis-7112.conf
[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/7113/redis-7113.conf
[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/7114/redis-7114.conf
[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/7115/redis-7115.conf
[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/7116/redis-7116.conf

​ 驗證:

[root@localhost ~]# ps -ef|grep redis
root      1948     1  0 18:52 ?        00:00:00 /usr/local/redis/bin/redis-server 10.0.31.144:7111 [cluster]
root      1956     1  0 18:53 ?        00:00:00 /usr/local/redis/bin/redis-server 10.0.31.144:7112 [cluster]
root      1960     1  0 18:53 ?        00:00:00 /usr/local/redis/bin/redis-server 10.0.31.144:7113 [cluster]
root      1964     1  0 18:53 ?        00:00:00 /usr/local/redis/bin/redis-server 10.0.31.144:7114 [cluster]
root      1968     1  0 18:54 ?        00:00:00 /usr/local/redis/bin/redis-server 10.0.31.144:7115 [cluster]
root      1973     1  0 18:54 ?        00:00:00 /usr/local/redis/bin/redis-server 10.0.31.144:7116 [cluster]
root      1978  1720  0 18:54 pts/0    00:00:00 grep redis

​ 設置集羣關係:

​ 使用/usr/local/src/redis3.2/src/redis-trib.rb命令

[root@localhost src]# ./redis-trib.rb create --replicas 1 10.0.31.144:7111 10.0.31.144:7112 10.0.31.144:7113 10.0.31.144:7114 10.0.31.144:7115 10.0.31.144:7116
>>> Creating cluster
Connecting to node 10.0.31.144:7111: OK
Connecting to node 10.0.31.144:7112: OK
Connecting to node 10.0.31.144:7113: OK
Connecting to node 10.0.31.144:7114: OK
Connecting to node 10.0.31.144:7115: OK
Connecting to node 10.0.31.144:7116: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.0.31.144:7111
10.0.31.144:7112
10.0.31.144:7113
Adding replica 10.0.31.144:7114 to 10.0.31.144:7111
Adding replica 10.0.31.144:7115 to 10.0.31.144:7112
Adding replica 10.0.31.144:7116 to 10.0.31.144:7113
M: 88da0083291b0a732ec9ca502b2cfccfc296dcbb 10.0.31.144:7111
   slots:0-5460 (5461 slots) master
M: 815a0c11695a42cdb46104444f8c29a9ac5ea897 10.0.31.144:7112
   slots:5461-10922 (5462 slots) master
M: 203bc8721443aa8432b9397cfe0daa07f5d603a0 10.0.31.144:7113
   slots:10923-16383 (5461 slots) master
S: c639cce2bbe1334d15e7dcba2635f14b7b0ff4af 10.0.31.144:7114
   replicates 88da0083291b0a732ec9ca502b2cfccfc296dcbb
S: 4f8dd744609a135777d07d18e8faf18c6833e96d 10.0.31.144:7115
   replicates 815a0c11695a42cdb46104444f8c29a9ac5ea897
S: a350fb4762033ded64d6dbb778004889de673e37 10.0.31.144:7116
   replicates 203bc8721443aa8432b9397cfe0daa07f5d603a0
   Can I set the above configuration? (type 'yes' to accept): //輸入yes

集羣創建過程說明:

(1) 給定 redis-trib 程序的命令是 create , 這表示我們希望創建一個新的集羣;

(2) 這裏的 --replicas 1 表示每個主節點下有一個從節點;

(3) 之後跟着的其它參數則是實例的地址列表,程序使用這些地址所指示的實例來創建新集羣;總的來說,以上命令的意思就是讓 redis-trib 程序創建一個包含三個主節點和三個從節點的集羣。接着,redis-trib 會打印出一份預想中的配置給你看,如果你覺得沒問題的話(注意覈對主從關係是否是你想要的),就可以輸入 yes , redis-trib 就會將這份配置應用到集羣當中。

5 集羣測試

使用redis-cli進入集羣環境

5.1 登錄集羣

[root@localhost src]# /usr/local/redis/bin/redis-cli -c -h 10.0.31.144 -p 7111
10.0.31.144:7111> 

​ -c :集羣模式

​ -h:指定ip地址

​ -p:指定端口號

5.2查看集羣信息

​ cluster info :查看集羣信息

​ cluster nodes :查看節點列表

5.3數據驗證

[root@localhost src]# /usr/local/redis/bin/redis-cli -c -h 10.0.31.144 -p 7111
10.0.31.144:7111> set a 1
-> Redirected to slot [15495] located at 10.0.31.144:7113 //將a設置到了7113
OK
10.0.31.144:7113> quit
[root@localhost src]# /usr/local/redis/bin/redis-cli -c -h 10.0.31.144 -p 7112
10.0.31.144:7112> get a
-> Redirected to slot [15495] located at 10.0.31.144:7113 //從7113獲取到了a
"1"
10.0.31.144:7113> 

發佈了24 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章