CentOS搭建Redis集群
一、环境准备
1.1 安装gcc
yum install gcc-c++ -y
yum install glibc-devel -y
1.2 升级gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
二、安装redis
2.1 编译安装
在3太机器上都执行:
cd /opt/
wget https://download.redis.io/releases/redis-6.0.9.tar.gz
tar -zxvf redis-6.0.9.tar.gz
cd redis-6.0.9
make
2.2 搭建redis集群
cd /opt/
mkdir redis-cluster
cd redis-cluster/
mkdir 7000 7001
在三台机器上,每台机器运行两个redis节点,分别是7000和7001
2.2.1 7000端口的节点
cd /opt/redis-cluster/7000
cp /opt/redis-6.0.9/redis.conf .
vi redis.conf
修改几个关键的点
bind 192.168.2.101 127.0.0.1 ::1
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
bind的属于可以绑定多个IP,注意在不同的机器上修改成对应的IP
启动脚本
在/opt/redis-cluster
目录
vi start-7000.sh
chmod +x start-7000.sh
#!/bin/bash
redis-server ./7000/redis.conf --daemonize yes
2.2.2 7001端口的节点
cd /opt/redis-cluster/7001
cp /opt/redis-6.0.9/redis.conf .
vi redis.conf
修改几个关键的点
bind 192.168.2.101 0.0.0.0 ::1
port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes
bind的属于可以绑定多个IP,注意在不同的机器上修改成对应的IP
启动脚本
在/opt/redis-cluster
目录
vi start-7001.sh
chmod +x start-7001.sh
#!/bin/bash
redis-server ./7001/redis.conf --daemonize yes
上面的7000和7001在三台机上都准备好,保证一台机器上运行2个节点,一共6个节点。
2.2.3 在第一台机器上创建集群
分别启动6个节点
./start-7000.sh
./start-7001.sh
打开相应的防火墙端口
firewall-cmd --zone=public --add-port=7000-7001/tcp --permanent
firewall-cmd --reload
redis-cli --cluster create 192.168.2.101:7000 192.168.2.101:7001 \
192.168.2.102:7000 192.168.2.102:7001 192.168.2.103:7000 192.168.2.103:7001 \
--cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.2.102:7001 to 192.168.2.101:7000
Adding replica 192.168.2.103:7001 to 192.168.2.102:7000
Adding replica 192.168.2.101:7001 to 192.168.2.103:7000
M: c3b4de1ad612005ac197f0e9e8705864f4ec626d 192.168.2.101:7000
slots:[0-5460] (5461 slots) master
S: ab0460ad85a9409f1f5e7a2400daf2a5cf3d7285 192.168.2.101:7001
replicates c24bd709a49b14c214e48819e4a09fd0f615881a
M: 9d0e185bbc4287191a976ccc8b087db6b46131b8 192.168.2.102:7000
slots:[5461-10922] (5462 slots) master
S: fe83dc0d5583d4d14d33aa4a99c29e906e1d452d 192.168.2.102:7001
replicates c3b4de1ad612005ac197f0e9e8705864f4ec626d
M: c24bd709a49b14c214e48819e4a09fd0f615881a 192.168.2.103:7000
slots:[10923-16383] (5461 slots) master
S: 5798d8c69197df54224152dc11877ead9081edab 192.168.2.103:7001
replicates 9d0e185bbc4287191a976ccc8b087db6b46131b8
Can I set the above configuration? (type 'yes' to accept): yes
根据提示输入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.2.101:7000)
M: c3b4de1ad612005ac197f0e9e8705864f4ec626d 192.168.2.101:7000
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 9d0e185bbc4287191a976ccc8b087db6b46131b8 192.168.2.102:7000
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: c24bd709a49b14c214e48819e4a09fd0f615881a 192.168.2.103:7000
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: fe83dc0d5583d4d14d33aa4a99c29e906e1d452d 192.168.2.102:7001
slots: (0 slots) slave
replicates c3b4de1ad612005ac197f0e9e8705864f4ec626d
S: ab0460ad85a9409f1f5e7a2400daf2a5cf3d7285 192.168.2.101:7001
slots: (0 slots) slave
replicates c24bd709a49b14c214e48819e4a09fd0f615881a
S: 5798d8c69197df54224152dc11877ead9081edab 192.168.2.103:7001
slots: (0 slots) slave
replicates 9d0e185bbc4287191a976ccc8b087db6b46131b8
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
redis一共16384个槽位,从上面的信息可以看到:0-5460是在192.168.2.101:7000上,5461-10922是在192.168.2.102:7000上,10923-16383是在192.168.2.103:7000上
从上面的情形可以看出,槽位的设置都是在Master节点上。
三、重新分配槽位
3.1 查看集群节点信息
redis-cli -c -p 7000
cluster nodes
3.2 模拟重新分配槽位
假设我们在第一台机上分配5000个槽位,第二台机器5000个槽位,第三台机6384
redis-cli --cluster reshard 127.0.0.1:7000
根据提示,输入想移动的槽位数量;输入接收槽位的节点ID,输入源槽位的ID,最后输入done即可。