1、集群规划
要让Redis4.0.1集群正常工作至少需要3个Master节点,每个 Master 节点要配备至少 1 个 Slave 节点。 根据以上特点和要求, 进行如下的集群实施规划:使用 6 台服务器(物理机或虚拟机) 部署 3 个 Master + 3 个 Slave;
IP | 端口 | 集群端口(服务端口+10000) |
---|---|---|
192.168.199.249 | 6382 | 16382 |
192.168.199.249 | 6383 | 16383 |
192.168.199.249 | 6384 | 16384 |
192.168.199.126 | 6379 | 16379 |
192.168.199.126 | 6380 | 16380 |
192.168.199.126 | 6381 | 16381 |
2、开启端口
使用如下命令启用端口
firewall-cmd --zone=public --add-port={端口号}/tcp --permanent
重启防火墙
firewall-cmd --reload
3、安装Redis
在/data目录下创建redis目录,进入redis目录,使用wget命令下载Redis并解压
# mkdir /data/redis
# cd /data/redis
# wget http://download.redis.io/releases/redis-4.0.1.tar.gz
# tar -zxvf redis-4.0.1.tar.gz
# cd redis-4.0.1
安装(使用 PREFIX 指定安装目录)
# make PREFIX=/data/redis install
安装完成后, 可以看到/data/redis 目录下有一个 bin 目录, bin 目录里就是 redis 的命令脚本:
redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server
4、创建集群目录
创建集群配置目录,因为我们分了两台机器,在249的机器上和126的机器上创建有点差别。
在两台机器上都新建集群目录(两台一样):
mkdir /data/redis/cluster
在126这台机器上,在cluster目录中建三个目录,并拷贝redis配置文件到对应目录并重新命名:
# cd /data/redis/cluster
# mkdir -p 6379
# cp /data/redis/redis-4.0.1/redis.conf /data/redis/cluster/6379/redis-6379.conf
# mkdir -p 6380
# cp /data/redis/redis-4.0.1/redis.conf /data/redis/cluster/6380/redis-6380.conf
# mkdir -p 6381
# cp /data/redis/redis-4.0.1/redis.conf /data/redis/cluster/6381/redis-6381.conf
在249这台机器上,在cluster目录中建三个目录,并拷贝redis配置文件到对应目录并重新命名:
# cd /data/redis/cluster
# mkdir -p 6382
# cp /data/redis/redis-4.0.1/redis.conf /data/redis/cluster/6382/redis-6382.conf
# mkdir -p 6383
# cp /data/redis/redis-4.0.1/redis.conf /data/redis/cluster/6383/redis-6383.conf
# mkdir -p 6384
# cp /data/redis/redis-4.0.1/redis.conf /data/redis/cluster/6384/redis-6384.conf
5、配置.conf
进入上面所创建的文件,分别修改配置文件中的下面选项:
6 个节点的 .conf 配置文件内容,注意修改下面加粗字体部分的内容即可(注意注释掉的要去掉注释),其他都相同:
配置选项 | 选项值 | 说明 |
---|---|---|
daemonize | yes | 默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。 |
pidfile | /data/redis/cluster/6379/redis-6379.pid | 当redis作为守护进程运行的时候,默认情况下它会写一个 pid 到 /var/run/redis.pid 文件里面 |
port | 6379 | 监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。 |
database | 1 | 设置数据库的数目。 |
cluster-enabled | yes | 启用或停用集群 |
cluster-config-file | /data/redis/cluster/6379/nodes-6379.conf | 集群配置文件,启动时自动生成 |
cluster-node-timeout | 15000 | 节点互联超时时间,单位毫秒 |
cluster-migration-barrier | 1 | 这个参数表示的是,一个主节点在拥有多少个好的从节点的时候就要割让一个从节点出来。 |
cluster-require-full-coverage | yes | 如果集群中某些key space没有被集群中任何节点覆盖,集群将停止接受写入 |
appendonly | yes | 启用aof持久化方式 |
dir | /data/redis/cluster/6379/ | 节点数据持久化存放目录 |
6、启动Redis实例
192.168.199.249机器:
# cd /data/redis/bin
# ./redis-server /data/redis/cluster/6382/redis-6382.conf
# ./redis-server /data/redis/cluster/6383/redis-6383.conf
# ./redis-server /data/redis/cluster/6384/redis-6384.conf
192.168.199.126机器:
# cd /data/redis/bin
# ./redis-server /data/redis/cluster/6379/redis-6379.conf
# ./redis-server /data/redis/cluster/6380/redis-6380.conf
# ./redis-server /data/redis/cluster/6381/redis-6381.conf
启动之后用 PS 命令查看实例启动情况:
root 13646 1 0 16:20 ? 00:00:10 ./redis-server 192.168.199.249:6382 [cluster]
root 13651 1 0 16:20 ? 00:00:10 ./redis-server 192.168.199.249:6383 [cluster]
root 13656 1 0 16:20 ? 00:00:10 ./redis-server 192.168.199.249:6384 [cluster]
root 16600 1 0 16:21 ? 00:00:10 ./redis-server 192.168.199.126:6379 [cluster]
root 16605 1 0 16:21 ? 00:00:10 ./redis-server 192.168.199.126:6380 [cluster]
root 16610 1 0 16:21 ? 00:00:10 ./redis-server 192.168.199.126:6381 [cluster]
注意: 启动完毕后, 6 个 Redis 实例尚未构成集群。
7、创建集群
接下来准备创建集群
安装 ruby 和 rubygems(注意:我们安装的是Ruby 2.4.2版本)
在/data目录下创建ruby目录,下载并安装ruby
# mkdir /data/ruby
# wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.gz
# tar -zxvf ruby-2.4.2.tar.gz
# cd ruby-2.4.2
# ./configure --prefix=/usr/local --disable-install-doc --with-opt-dir=/usr/local/lib
# make && make install
检查 ruby 版本:
# ruby -v
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]
安装过程中可能会出一些问题,如果安装不成功,请参考(Redis集群配置-配置过程中出现的问题及解决方案)解决。
gem 安装 redis ruby 接口:
# gem install redis
安装成功。
安装过程中可能会出一些问题,如果安装不成功,请参考(Redis集群配置-配置过程中出现的问题及解决方案)解决。
执行 Redis 集群创建命令(只需要在其中一个节点上执行一次则可)
redis-trib create --replicas 1 192.168.199.249:6382 192.168.199.249:6383 192.168.199.249:6384 192.168.199.126:6379 192.168.199.126:6380 192.168.199.126:6381
结果为:
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.199.249:6382
192.168.199.126:6379
192.168.199.249:6383
Adding replica 192.168.199.126:6380 to 192.168.199.249:6382
Adding replica 192.168.199.249:6384 to 192.168.199.126:6379
Adding replica 192.168.199.126:6381 to 192.168.199.249:6383
M: b575ef6a2ffc2e7e2b977d1bcb3587f97f957828 192.168.199.249:6382
slots:0-5460 (5461 slots) master
M: a0977842f5194d16f427419b401243e49fb2ba48 192.168.199.249:6383
slots:10923-16383 (5461 slots) master
S: aa92a3c7a08d29019402a36a2b7fb3bc0c73cf79 192.168.199.249:6384
replicates cf01b1a4aca0ba77f23707a52b20018b0f29dda9
M: cf01b1a4aca0ba77f23707a52b20018b0f29dda9 192.168.199.126:6379
slots:5461-10922 (5462 slots) master
S: f1b2d5d22f76a75036e6dffad8a7ae416eeac22e 192.168.199.126:6380
replicates b575ef6a2ffc2e7e2b977d1bcb3587f97f957828
S: c37f94975d579f438393c8882ec1341ec7bbc44b 192.168.199.126:6381
replicates a0977842f5194d16f427419b401243e49fb2ba48
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.199.249:6382)
M: b575ef6a2ffc2e7e2b977d1bcb3587f97f957828 192.168.199.249:6382
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: c37f94975d579f438393c8882ec1341ec7bbc44b 192.168.199.126:6381
slots: (0 slots) slave
replicates a0977842f5194d16f427419b401243e49fb2ba48
S: aa92a3c7a08d29019402a36a2b7fb3bc0c73cf79 192.168.199.249:6384
slots: (0 slots) slave
replicates cf01b1a4aca0ba77f23707a52b20018b0f29dda9
M: a0977842f5194d16f427419b401243e49fb2ba48 192.168.199.249:6383
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: f1b2d5d22f76a75036e6dffad8a7ae416eeac22e 192.168.199.126:6380
slots: (0 slots) slave
replicates b575ef6a2ffc2e7e2b977d1bcb3587f97f957828
M: cf01b1a4aca0ba77f23707a52b20018b0f29dda9 192.168.199.126:6379
slots:5461-10922 (5462 slots) master
1 additional replica(s)
一切正常的情况下输出以下信息:
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
最后一行信息表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。
集群创建过程说明:
根据集群创建信息,其主从结构如下:
主 | 从 |
---|---|
192.168.199.249:6382 | 192.168.199.126:6380 |
192.168.199.126:6379 | 192.168.199.249:6384 |
192.168.199.249:6383 | 192.168.199.126:6381 |