Centos7的Redis cluster集群搭建

目录

一、集群节点搭建

1、安装c++相关服务

2、获取redis的tar.gz文件

3、解压安装包

4、进行编译

5、复制redis.conf配置文件

5、复制集群节点

6、修改每个节点下的redis.conf 配置文件

7、启动各个节点

8、开放端口 

二、集群节点链接

1、安装Ruby

2、执行Ruby脚本

三、测试集群是否可用


一、集群节点搭建

    当前使用redis版本为3.2.11,但是已经上传多个版本至阿里云 https://pan.baidu.com/s/1mY_kLZxwCqHrJ_ZCL6sfIw 密码: 0117。准备三台服务器,搭建6个节点的redis分片集群,端口分别为 7001 ~ 7006。为方便理解,服务器和端口信息分别如下:

192.168.31.1    启用7001、7002、17001、17002端口

192.168.31.2    启用7003、7004、17003、17004端口

192.168.31.3    启用7005、7006、17005、17006端口

 服务器节点的目录分别为:

/usr/local/redis-cluster

                                   /redis-1

                                   /redis-2

 

将下载是tar.gz包上传到三台服务器后,都执行如下安装过程(Centos7都安装了yum,非常的方便):

1、安装c++相关服务

# 安装c相关的服务,否则后面不能进行

yum install gcc-c++

2、获取redis的tar.gz文件

    可以从上面的百度云盘获取并上传到服务器,也可以使用 wget 获取 http://download.redis.io/releases/下的不同版本的redis安装包,如:http://download.redis.io/releases/redis-3.2.11.tar.gz,若没有wget命令,可以使用yum install wget进行安装。

wget http://download.redis.io/releases/redis-3.2.11.tar.gz

3、解压安装包

tar -zxvf redis-3.2.11.tar.gz

4、进行编译

    现在cd到解压包redis-3.2.11目录下,进行编译,若没有执行第一步安装c++相关包则会编译报错

cd ....../redis-3.2.11

# 直接执行编译,并且安装到目录 /usr/local/redis下:

make & make install --prefix=/usr/local/redis

5、复制redis.conf配置文件

cp .../redis-3.2.11/redis.conf /usr/local/redis/bin

5、复制集群节点

    集群节点安装在 /usr/local/redis-cluster/redis-1这样的目录下,所以先创建节点目录:

cd /usr/local

mkdir redis-cluster

cd redis-cluster

mkdir redis-1 redis-2

将安装的redis(/usr/local/redis/)下的bin全部复制到刚创建的节点目录下:

cp -r /usr/local/redis /usr/local/redis-cluster/redis-1

cp -r /usr/local/redis /usr/local/redis-cluster/redis-2

6、修改每个节点下的redis.conf 配置文件

bind 192.168.31.1                    # 这里需要改成自己虚拟机的ip即可,安装到一台服务器上就可以不改了

port 7001                      # 端口后依次从 7001 到 7006进行配置

pidfile    /usr/local/redis_7001.pid    # 每个节点的pid文件

# 这个我是在每个节点目录下创建了一个端口号名的文件夹,只要每个节点不适用不同一个地址就行
dir /usr/local/redis-cluster/redis-1/7001 

cluster-enabled yes      # 启动redis cluster模式

# 该配置可以配置也可以使用节点自身的,我没有配置该项
cluster-config-file /etc/redis-cluster/node-7001.conf

cluster-node-timeout 15000            # 节点之间会有心跳,这是超时时间
daemonize    yes                             # 是否后台启动,默认配置为 no
logfile /var/log/redis/7001.log          # 日志文件地址一样,只要不同就行
appendonly yes 

7、启动各个节点

    cd 到6个 [/usr/local/redis-cluster/redis-1] bin目录下, 启动命令为:

# 启动redis集群节点服务
./redis-server redis.conf
# 查看是否启动成功 
ps -ef|grep redis

若服务是以节点方式启动成功,则后面会跟一个 [cluster] 的标识,如下:

[root@localhost bin]# ps -ef|grep redis
root      25477      1  0 10:43 ?        00:00:11 ./redis-server 192.168.31.220:7001 [cluster]
root      25496      1  0 10:47 ?        00:00:11 ./redis-server 192.168.31.220:7002 [cluster]
root      25915  25842  0 15:14 pts/4    00:00:00 grep --color=auto redis

8、开放端口 

    可能启动后没有问题,但是后续各个节点需要进行心跳时,则需要能够访问端口。一般生产环境肯定是不能直接关闭防火墙的,则需要开启防火墙端口。由于redis cluster集群的通信是通过总线端口,则还需要开启总线端口,一般若端口为7001则总线端口为17001。 一共开启12个端口。

firewall-cmd --zone=public --add-port=7001/tcp --permanent

 

     到目前为止,各个节点以集群的模式进行启动了,但是各个节点之间还没有相互知道各种的存在,需要将他们组成一个集群,这就需要使用解压目录 ....../redis-3.2.11/src/redis-trib.rb 的ruby脚本,如下第二部分。该部分在任意一个节点执行即可。

 

二、集群节点链接

1、安装Ruby

    由于Centos7的yum支持的最高版本的ruby为2.0.0, 而运行redis的ruby版本则必须高于2.2.2(redis requires Ruby version >= 2.2.2),则直接安装高版本的ruby。一般安装方式可以使用yum、tar包,或者rvm。网上很多使用rvm去安装的,麻烦不说还一大堆问题,所以还是直接使用yum安装。自己安装的时候走了一些坑,最后看到了http://www.cnblogs.com/ding2016/p/7903147.html

yum install centos-release-scl-rh # 会在/etc/yum.repos.d/目录下多出一个CentOS-SCLo-scl-rh.repo源

yum install rh-ruby23  -y      # yum安装ruby

scl  enable  rh-ruby23 bash      # 必要一步

ruby -v                                 # 查看安装版本

gem install redis

[root@localhost data]# ruby -v
ruby 2.3.8p459 (2018-10-18 revision 65136) [x86_64-linux]

2、执行Ruby脚本

    ./redis-trib.rb文件放在了解压目录的src目录下, 在执行ruby脚本之前,请一定先保证各服务器之间开启了上面说的12个端口。都在会一直处于链接中.......。

./redis-trib.rb create --replicas 1 192.168.31.1:7001 192.168.31.1:7002 192.168.31.2:7003 192.168.31.2:7004 192.168.31.3:7005 192.168.31.3:7006

当看到下面的部分时,表示启动成功:

[root@localhost src]# ./redis-trib.rb create --replicas 1 192.168.31.220:7001 
192.168.31.220:7002 192.168.31.147:7003 192.168.31.147:7004 192.168.31.109:7005 192.168.31.109:7006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.31.220:7001
192.168.31.147:7003
192.168.31.109:7005
Adding replica 192.168.31.147:7004 to 192.168.31.220:7001
Adding replica 192.168.31.220:7002 to 192.168.31.147:7003
Adding replica 192.168.31.109:7006 to 192.168.31.109:7005
M: 94fbbeba149e6a2173f5bdca67172c146a905895 192.168.31.220:7001
   slots:0-5460 (5461 slots) master
S: c511fa8328b339f56d4be1b028ecef731ea909f0 192.168.31.220:7002
   replicates ce9c7eba97475450332a121843ec3a125efe1dcd
M: ce9c7eba97475450332a121843ec3a125efe1dcd 192.168.31.147:7003
   slots:5461-10922 (5462 slots) master
S: 987d268f8172305942c5b18ead8fafa03d359eef 192.168.31.147:7004
   replicates 94fbbeba149e6a2173f5bdca67172c146a905895
M: ca14e60a255922b4e05a02361e8476b4310422d3 192.168.31.109:7005
   slots:10923-16383 (5461 slots) master
S: eb085c7254ec3a04a3941282c7b465baccea9d4d 192.168.31.109:7006
   replicates ca14e60a255922b4e05a02361e8476b4310422d3
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join......
>>> Performing Cluster Check (using node 192.168.31.220:7001)
M: 94fbbeba149e6a2173f5bdca67172c146a905895 192.168.31.220:7001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: ca14e60a255922b4e05a02361e8476b4310422d3 192.168.31.109:7005
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: c511fa8328b339f56d4be1b028ecef731ea909f0 192.168.31.220:7002
   slots: (0 slots) slave
   replicates ce9c7eba97475450332a121843ec3a125efe1dcd
S: 987d268f8172305942c5b18ead8fafa03d359eef 192.168.31.147:7004
   slots: (0 slots) slave
   replicates 94fbbeba149e6a2173f5bdca67172c146a905895
M: ce9c7eba97475450332a121843ec3a125efe1dcd 192.168.31.147:7003
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: eb085c7254ec3a04a3941282c7b465baccea9d4d 192.168.31.109:7006
   slots: (0 slots) slave
   replicates ca14e60a255922b4e05a02361e8476b4310422d3
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

可以看见16384个hash槽初始化完成,可以看到 7002 是 7003的从节点,7003的hash槽是从5461 ~ 10922。

三、测试集群是否可用

    cd到刚才安装的任意bin目录下,使用redis-cli的客户端,连接两个不同的服务器节点,连接方式如下:

# 使用redis客户端链接 指定ip的端口的服务器节点
./redis-cli -c -h 192.168.31.220 -p 7001

一个节点使用set命令设置一个值, 如: set kevin kevin。另一个节点进行get命令获取,看是否进行了redis 去中心化的分片集群的moved机制,如下:

[root@localhost bin]# ./redis-cli -c -h 192.168.31.220 -p 7001
192.168.31.220:7001> set kevin kevin
OK

192.168.31.109:7005> get kevin
-> Redirected to slot [1734] located at 192.168.31.220:7001
"kevin"

finish!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值