現在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 10月 21 16:06 7111 drwxr-xr-x 2 root root 4096 10月 21 16:06 7112 drwxr-xr-x 2 root root 4096 10月 21 16:06 7113 drwxr-xr-x 2 root root 4096 10月 21 16:06 7114 drwxr-xr-x 2 root root 4096 10月 21 16:06 7115 drwxr-xr-x 2 root root 4096 10月 21 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>