Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

生产环境部署Redis Cluster集群 #9

Open
johnnian opened this issue Jun 30, 2017 · 0 comments

Comments

1 participant
@johnnian
Copy link
Owner

commented Jun 30, 2017

软件版本: 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

@johnnian johnnian added this to NoSQL in 数据库 Jul 4, 2017

@johnnian johnnian changed the title Redis Cluster 集群配置 生产环境下部署Redis Cluster集群 Jul 7, 2017

@johnnian johnnian changed the title 生产环境下部署Redis Cluster集群 生产环境部署Redis Cluster集群 Jul 7, 2017

@johnnian johnnian added this to NoSQL in 数据库 Aug 2, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.