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

 

原文地址:https://www.cnblogs.com/tchua/p/12394473.html