Redis 3.2 生產環境集群部署


一、 概述

Redis從3.0開始支持集群模式。

1.1   架構圖

架構細節:

  1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.

  2)節點的fail是通過集群中超過半數的節點檢測失效時才生效.

  3)客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集群所有節點,連接集群中任何一個可用節點即可

    4)redis-cluster把所有的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->value

  1.2   集群特點

  1) 節點自動發現:所有節點相互連接

  2) 集群消息通信通過集群總線通信,集群總線端口為客戶端服務端口+10000(自動生成)

  3) 節點與節點之間通過二進制協議進行通信

  4) 數據按照Slot存儲分布在多個Redis實例上

  5) 集群節點掛掉會自動故障轉移

一、 集群安裝

本文采用2台主機,三主三從集群模式部署,每台機器部署三個節點。

  2.1 服務器規划

主機

IP

端口

node-10

172.10.10.10

6385、6386、6387

node-11

172.10.10.11

6385、6386、6387

 

2.2 下載(以下步驟先以node-10機器為例,node11機器步驟一樣按照執行一遍即可)

[root@node-10 ~]# cd tools/
[root@node-10 tools]# wget http://download.redis.io/releases/redis-3.2.3.tar.gz
[root@node-10 tools]# tar -xf redis-3.2.3.tar.gz
[root@node-10 tools]# cd redis-3.2.3

 2.3 編譯

[root@node-10 redis-3.2.3]# make
[root@node-10 redis-3.2.3]# make MALLOC=libc
[root@node-10 redis-3.2.3]# make install PREFIX=/opt/redis-cluster
執行完這一步可以看到默認生成以下redis相關命令
[root@node-10 ~]# ll /opt/redis-cluster/bin/
total 6864
-rwxr-xr-x 1 root root  337424 Feb 28 14:06 redis-benchmark
-rwxr-xr-x 1 root root   24992 Feb 28 14:06 redis-check-aof
-rwxr-xr-x 1 root root 3083072 Feb 28 14:06 redis-check-rdb
-rwxr-xr-x 1 root root  490264 Feb 28 14:06 redis-cli
lrwxrwxrwx 1 root root      12 Feb 28 14:06 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 3083072 Feb 28 14:06 redis-server

  

2.4 為三個節點創建對應的根目錄及每個節點數據、日志、配置文件目錄

[root@node-10 ~]# mkdir -p /opt/redis-cluster/{6385,6386,6387}
[root@node-10 ~]# mkdir /opt/redis-cluster/6385/{data,conf,logs}
[root@node-10 ~]# mkdir /opt/redis-cluster/6386/{data,conf,logs}
[root@node-10 ~]# mkdir /opt/redis-cluster/6387/{data,conf,logs}

2.5 編輯配置文件

注意:不同節點端口不同,需要根據實際情況修改對應的實例數據的相應目錄位置信息(這里以6385實例為例,其它按照這個修改即可)。

 

[root@node-10 ~]# vim /opt/redis-cluster/6385/conf/6385_redis.conf
bind 0.0.0.0
protected-mode yes
port 6385
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6385.pid
loglevel notice
logfile "/opt/redis-cluster/6385/logs/redis_6385.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir "/opt/redis-cluster/6385/data"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
cluster-enabled yes
cluster-config-file "/opt/redis-cluster/6385/conf/nodes.conf"
cluster-node-timeout 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes 

2.6 編輯統一啟動腳本

[root@node-10 ~]# vim /opt/redis-cluster/start_rediscluster.sh
#!/bin/bash
REDIS_HOME=/opt/redis-cluster
$REDIS_HOME/bin/redis-server $REDIS_HOME/6385/conf/6385_redis.conf
$REDIS_HOME/bin/redis-server $REDIS_HOME/6386/conf/6386_redis.conf
$REDIS_HOME/bin/redis-server $REDIS_HOME/6387/conf/6387_redis.conf
[root@node-10 ~]# chmod +x /opt/redis-cluster/start_rediscluster.sh

2.7 啟動

[root@node-10 ~]# cd /opt/redis-cluster/
[root@node-10 redis-cluster]# ./start_rediscluster.sh 
[root@node-10 redis-cluster]# ps -ef|grep redis
root       5247      1  0 14:22 ?        00:00:00 /opt/redis-cluster/bin/redis-server 0.0.0.0:6385 [cluster]
root       5249      1  0 14:22 ?        00:00:00 /opt/redis-cluster/bin/redis-server 0.0.0.0:6386 [cluster]
root       5251      1  0 14:22 ?        00:00:00 /opt/redis-cluster/bin/redis-server 0.0.0.0:6387 [cluster]
root       5260   1507  0 14:22 pts/1    00:00:00 grep --color=auto redis

  

注:這里只是部署好一台機器的三個redis實例,另一台機器部署與這一台一樣,執行相應的命令即可,這里不再進行演示。

三、 創建集群(隨便一台機器執行)

以上部署只是把單個節點部署好,需要把所有節點整合成一個集群,這樣一個三主三從的Redis集群才算部署完成。

3.1 安裝ruby

集群創建我們使用redis自帶的redis-trib工具,該工具為ruby開發,需要安裝ruby。

[root@node-10 ~]# yum install ruby -y
[root@node-10 ~]# gem install redis

  

如果出現以上安裝錯誤信息。我們需要升級ruby版本:

## 安裝ruby管理工具rvm
[root@node-10 ~]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB 
[root@node-10 ~]# curl -sSL https://get.rvm.io | bash -s stable
## 加載
[root@node-10 ~]# source /etc/profile.d/rvm.sh
## 查看ruby版本
[root@node-10 ~]# rvm list known
## 安裝2.4.6
[root@node-10 ~]# rvm install 2.5.1

  

[root@node-10 ~]# rvm use 2.5.1 –default
## 安裝redis-trib.rb即redis集群工具
[root@node-10 ~]# gem install redis -v 3.3.5
## 啟動集群
[root@node-10 ~]# cd tools/redis-3.2.3/src/
[root@node-10 src]# ./redis-trib.rb create --replicas 1 172.16.10.10:6385 172.16.10.10:6386 172.16.10.10:6387 172.16.10.11:6385 172.16.10.11:6386 172.16.10.11:6387

 

--replicas 1:表示我們想為每個master指定一個slave

## 驗證
[root@node-10 bin]# cd /opt/redis-cluster/bin/
[root@node-10 bin]# ./redis-cli -p 6385 -c

  

11服務器:6385,10服務器:6385、6386為主節點

3.2 集群重啟

由於redis-trib的功能還比較弱,重啟集群的話需要kill各個節點進程,然后再執行啟動腳本
## kill命令
[root@node-10 ~]# ps -ef | grep redis |grep -v grep|awk '{print $2}'|xargs kill
## 啟動
[root@node-10 ~]# cd /opt/redis-cluster/
[root@node-10 redis-cluster]# ./start_rediscluster.sh

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM