相关介绍:
Redis从3.0版本开始支持集群!
集群一般由多个节点组成,节点数量至少6个才能保证组成完整高可用的集群。
每个节点需要开启配置文件中的cluster-enabled yes,让Redis运行在集群模式下。
测试环境:
资源有限,这里使用3台虚拟机模拟6个节点(用端口区分),每台虚机2个节点,如下图:
注:Redis默认端口:6379,这里方便起见,设定从7001~7006来区分6个节点。
操作步骤:
Redis下载官网:https://redis.io/
1. 节点准备
每台机器都先编译安装Redis (经测试,redis-3.2.9 集群搭建方法一样)
[root@server-1 ~]# tar zxvf redis-4.0.1.tar.gz
[root@server-1 ~]# cd redis-4.0.1
[root@server-1 redis-4.0.1]# make && make install //不需要configure,直接make,别忘了系统先装好gcc和zlib-devel
[root@server-1 redis-4.0.1]# redis-server -v //检查一下版本
server-2和server-3操作同上;
2. 配置每个节点
在server-1上:
[root@server-1 redis-4.0.1]# mkdir -p /opt/redis-cluster/{7001,7004} //在/opt目录下新建一个redis-cluster文件夹,并在里面新建2个文件夹,用来区分节点
[root@server-1 redis-4.0.1]# cp redis.conf /opt/redis-cluster/7001/redis-7001.conf
[root@server-1 redis-4.0.1]# vim /opt/redis-cluster/7001/redis-7001.conf //必要需要修改如下,其他细化优化的配置项可暂时保持默认
bind 192.168.1.21 #本机IP
port 7001 #改为设定的端口
daemonize yes #后台启动
cluster-enabled yes #启动集群模式
cluster-config-file nodes-7001.conf #集群内部配置文件,改掉端口号
cluster-node-timeout 15000 #节点超时时间,单位:毫秒
[root@server-1 redis-4.0.1]# cp redis.conf /opt/redis-cluster/7004/redis-7004.conf
[root@server-1 redis-4.0.1]# vim /opt/redis-cluster/7004/redis-7004.conf
bind 192.168.1.21 #本机IP
port 7004 #改为设定的端口
daemonize yes #后台启动
cluster-enabled yes #启动集群模式
cluster-config-file nodes-7004.conf #集群内部配置文件,改掉端口号
cluster-node-timeout 15000 #节点超时时间,单位:毫秒
在server-2上:
[root@server-2 redis-4.0.1]# mkdir -p /opt/redis-cluster/{7002,7005}
......参考server-1......
在server-3上:
[root@server-3 redis-4.0.1]# mkdir -p /opt/redis-cluster/{7003,7006}
......参考server-1......
3. 启动每个节点
在server-1上:
[root@server-1 redis-4.0.1]# redis-server /opt/redis-cluster/7001/redis-7001.conf
[root@server-1 redis-4.0.1]# redis-server /opt/redis-cluster/7004/redis-7004.conf
在server-2上:
[root@server-1 redis-4.0.1]# redis-server /opt/redis-cluster/7002/redis-7002.conf
[root@server-1 redis-4.0.1]# redis-server /opt/redis-cluster/7005/redis-7005.conf
在server-3上:
[root@server-1 redis-4.0.1]# redis-server /opt/redis-cluster/7003/redis-7003.conf
[root@server-1 redis-4.0.1]# redis-server /opt/redis-cluster/7006/redis-7006.conf
4. redis-trib.rb环境准备(该文件存在于redis-4.0.1/src/目录中) //只需要在其中一台上执行此步骤!!
redis-trib.rb是采用Ruby实现的Redis集群管理工具。内部通过Cluster相关命令帮助
我们简化集群创建、检查、槽迁移和均衡等常见操作,使用之前需要安装Ruby依赖环境。
注:以下安装Ruby的方法如果觉得麻烦,可以参考另一篇文章:centos7/rhel7安装较高版本ruby2.2/2.3/2.4+
①安装Ruby
~]# wget http://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.5.tar.gz
~]# tar zxvf ruby-2.3.5.tar.gz
~]# cd ruby-2.3.5
ruby-2.3.5]# ./configure --prefix=/opt/ruby
ruby-2.3.5]# make && make install
ruby-2.3.5]# ln -s /opt/ruby/bin/ruby /usr/bin/ruby
ruby-2.3.5]# ln -s /opt/ruby/bin/gem /usr/bin/gem
~]#ruby -v //查看一下
②安装rubygem redis依赖
~]# wget http://rubygems.org/downloads/redis-3.3.0.gem
~]# gem install -l redis-3.3.0.gem
如果这步报错,如下:
~]# gem install -l redis-3.3.0.gem
ERROR: Loading command: install (LoadError)
cannot load such file -- zlib
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClass
解决办法如下:
yum -y install zlib-devel
进入ruby源码文件夹,安装ruby自身提供的zlib包
cd ruby-2.3.5/ext/zlib
ruby ./extconf.rb
make
make install
然后再次执行gem install -l redis-4.0.1.gem,正常通过显示Successfully... 。
③检查redis-trib.rb的可用性
~]# ./redis-4.0.1/src/redis-trib.rb //如下图所示代表可用了
5. 创建集群
只需要执行一条长命令,如下:
~]#./redis-4.0.1/src/redis-trib.rb create --replicas 1 192.168.1.21:7001 192.168.1.22:7002 192.168.1.23:7003 192.168.1.21:7004 192.168.1.22:7005 192.168.1.23:7006
说明:--replicas参数指定集群中每个主节点配备几个从节点,这里设置为1。
这里因为测试,只用了3台机器,如果部署节点使用不同的IP地址,redis-trib-rb会尽可能保证主从节点不分配在同一台机器下,
因此会重新排序节点表顺序。节点列表顺序用于确定主从角色,先主节点之后是从节点。
创建过程中首先会给出主从节点角色分配的计划,如下图:
最后的输出报告说明:16384个槽全部被分配完,集群创建成功。
这里需要注意给redis-trib.rb的节点地址必须是不包含任何槽/数据的节点,否则会拒绝创建集群。
6. 集群完整性检查
集群完整性指所有的槽都分配到存活的主节点上,只要16384个槽中有一个没有分配给节点则表示集群不完整。
可以用redis-trib.rb check命令检测之前创建的集群是否成功,check命令只需要给出集群中任意一个节点地址就可以
完成整个集群的检查工作,命令使用如下所示:
[root@server-1 ~]# ./redis-4.0.1/src/redis-trib.rb check 192.168.1.22:7002