johnnian/Blog

生产环境部署Redis Cluster集群

Opened this issue · 0 comments

软件版本: redis版本3.2.9(官方稳定版本)

说明:redis对应的包,是我在CentOS 6.8上编译过,并且编写了一些脚本,方便快速配置Redis Cluster。
该包已经开源,感兴趣的可以点击前往:EasyRedisCluster

在生产的服务器上,使用3台服务器,每台服务器开启两个Redis 实例,组成Redis Cluster:

qq20170707-211234 2x

下面是 Redis Cluster 的安装步骤:

步骤1:拷贝安装包到 home 目录

1、拷贝 redis_cluster.tar.gz 到 home目录;

2、解压到 home 目录:

[root@ec7e56056c01 ~]# tar -zxvf redis_cluster.tar.gz

3、添加到环境变量

[root@ec7e56056c01 bin]# vi /etc/bashrc

#Redis Cluster config
REDIS_CLUSTER_HOME=/root/redis_cluster
PATH=$REDIS_CLUSTER_HOME/bin:$PATH
export PATH REDIS_CLUSTER_HOME

[root@ec7e56056c01 bin]# source /etc/bashrc

步骤2:安装 Ruby 环境

[root@ec7e56056c01 ~]# yum -y install ruby
[root@ec7e56056c01 ~]# yum -y install rubygems
[root@ec7e56056c01 ~]# gem install redis  #这一步安装会慢一些

步骤3:配置集群

1、修改每个节点的配置信息
注:假设需要在同一台机子上部署更多节点,可以复制一份为nodeX,修改对应的端口,nodes.conf 位置。

[root@ec7e56056c01 ~]# vi redis_cluster/node1/redis.conf
port 7000
cluster-enabled yes
cluster-config-file /root/redis_cluster/node1/nodes.conf
cluster-node-timeout 5000
appendonly yes
bind <内网IP>

[root@ec7e56056c01 ~]# vi redis_cluster/node2/redis.conf
port 7001
cluster-enabled yes
cluster-config-file /root/redis_cluster/node2/nodes.conf
cluster-node-timeout 5000
appendonly yes
bind <内网IP>

配置文件的 bind 默认是 bind 本机,因为在局域网部署集群,设置成 局域网的本机IP,如 172.17.0.1

2、设置服务器的防火墙端口

在生产情况下,服务器的防火墙是开着的,因此需要设置防火墙端口,让集群中的节点间可以彼此通讯。

上面的配置中,把redis的端口设置成 7000,因此防火墙需要开通 7000 对外端口。

但是在实际部署的过程中发现,单单开 7000 端口,无法顺利搭建集群,发现集群脚本一直处于等待状态...

组建集群报错

看到这个,想到平时在自己本地用Docker搭建,都是秒速创建完成,于是推测: 应该是防火墙没开某个端口。

查了一些资料,发现, Redis 集群的搭建,默认情况下会另外开一个端口用于节点之间通讯( 新端口号 = 开通的端口 +10000,即 我原先的端口是7000, 节点之间通讯的端口就是 17000),开通之后,集群就搭建成功了~

下面是配置防火墙的命令:

[root@c43bfab6f744 ~] vi /etc/sysconfig/iptables
# 在 -A INPUT -i lo -j ACCEPT 后添加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7001 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 17000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 17001 -j ACCEPT

[root@c43bfab6f744 ~] service iptables restart

3、分别启动每个节点的Redis
注:请根据实际的节点,修改下 start.sh 的内容

[root@ec7e56056c01 ~]# ./redis_cluster/start.sh

4、选择任意一个节点,配置集群启动脚本信息,并且执行脚本
注:将下面的IP改为真实的内网IP地址

[root@ec7e56056c01 ~]# vi redis_cluster/first_init_cluster.sh
#!/bin/sh
redis-trib.rb create --replicas 1 172.17.0.1:7000 172.17.0.1:7001 172.17.0.2:7002 172.17.0.2:7003 172.17.0.3:7004 172.17.0.3:7005

[root@ec7e56056c01 ~]# ./redis_cluster/first_init_cluster.sh