集群搭建(基于redis5.0+)"/>
redis集群搭建(基于redis5.0+)
一、前戏
1.1 下载软件
去官网下载软件: ,笔者使用的是5.0.12,理由就是本人公司使用的也是这个版本。
1.2 物理机配置
本人搭建的是 3主3从
。使用3台虚拟机,保证主从分配不在一台机器上,避免某台机器挂掉而影响整个集群的运行。
物理配置:
1. 192.168.37.133:6370
2. 192.168.37.133:63803. 192.168.37.130:6370
4. 192.168.37.130:63805. 192.168.37.131:6370
6. 192.168.37.131:6380
二、安装redis
2.1 安装核心步骤
这里只记录关键指令,读者执行动手尝试,指令都是本人操作过程中使用的指令,保证其正确性和顺序性。
// 解压刚下载的文件,文件自行上传至物理机上,不会的可以使用FileZilla Client,再不会就扇自己嘴巴子
[root@localhost ~]# tar -zxvf redis-5.0.12.tar.gz
// 切换到解压目录
[root@localhost ]# cd redis-5.0.12
// 编译,如如编译问题,可以自行安装一些以来的软件,比如 gcc等
[root@localhost redis-5.0.12]# make
// 切换目录
[root@localhost redis-5.0.12]# cd src/
// 编译 安装,这步运行成功,整个redis就安装成功了
[root@localhost src]# make install
// 复制核心文件到自己心仪的目录下
[root@localhost src]# cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server /home/redis-cluster/redis6370/
// 复制核心文件到自己心仪的目录下
[root@localhost src]# cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server /home/redis-cluster/redis6380/
最后一步复制出来的文件未核心文件,每台机器按照物理机设计的那样,复制两份。笔者以其中一台机器为例,如下:
[root@localhost redis-cluster]# ll
drwxr-xr-x. 2 root root 130 6月 26 12:29 redis6370
drwxr-xr-x. 2 root root 130 6月 26 12:29 redis6380
-rwxr-xr-x. 1 root root 917 6月 26 12:48 run.sh
[root@localhost redis-cluster]# pwd
/home/redis-cluster
如上,还多余了一份 run.sh
,没错,为了启动方便,下面看下其脚本。
2.2 启动脚本
#!/bin/bash
if [[ -n "$1" ]] ; thenaction=$1
fi
# 启动服务
start(){echo "welcome,coder!"./redis6370/redis-server ./redis6370/redis.confecho "redis is running on 6370"./redis6380/redis-server ./redis6380/redis.confecho "redis is running on 6380"service iptables restartecho "redis is running..."
}
# 停止服务
stop(){./redis6370/redis-cli -a "123456" -p 6370 shutdown echo "redis is shutdown on 6370"./redis6380/redis-cli -a "123456" -p 6380 shutdown echo "redis is shutdown on 6380"echo "goodbye!"
}case "$action" instart)start;;stop)stop;;restart)stopsleep 1secho "............." sleep 1secho "............." start;;*)echo "Please use start|stop|restart as first argument";;
esac
其中,"123456"
为redis密码。
三、redis集群实现
3.1 redis.conf配置项
本着最少配置的原则,列出如下配置,其它的可以保持默认。
# redis参数:
port 6370
protected-mode no
# bind 127.0.0.1 # 去掉,表示所有客户端都可以链接
dir ./ # 数据文件的路径
daemonize yes
requirepass 123456
appendonly yes
pidfile /var/run/redis_6370.pid# 集群参数:
cluster-enabled yes
cluster-config-file node-6370.conf # redis自动维护
cluster-node-timeout 5000 # 集群超时
masterauth 123456 # 集群密码
其中,port
、pidfile
、cluster-config-file
由于每台机器有两个redis,所以此处要修改成不同的端口,按照上面物理机设计的来就行了。
3.2 执行脚本
先要保证,所有的三台上的机器redis 都启动完成了。
// 先要保证,所有的三台上的机器redis都启动完成了。
[root@localhost redis6370]# ps -ef | grep redis
root 13220 1 0 12:50 ? 00:00:18 ./redis6370/redis-server *:6370 [cluster]
root 13225 1 0 12:50 ? 00:00:18 ./redis6380/redis-server *:6380 [cluster]// 创建集群, --cluster-replicas 1 :表示1主1从。
[root@localhost redis6370]# ./redis-cli --cluster create 192.168.37.133:6370 192.168.37.130:6380 192.168.37.130:6370 192.168.37.131:6380 192.168.37.131:6370 192.168.37.133:6380 --cluster-replicas 1
[ERR] Node 192.168.37.133:6370 NOAUTH Authentication required.// 因为我们设置了masterauth参数,所以要使用带密码创建集群
[root@localhost redis6370]# ./redis-cli -a 123456 --cluster create 192.168.37.133:6370 192.168.37.130:6380 192.168.37.130:6370 192.168.37.131:6380 192.168.37.131:6370 192.168.37.133:6380 --cluster-replicas 1
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> 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.37.130:6370 to 192.168.37.133:6370
Adding replica 192.168.37.131:6370 to 192.168.37.130:6380
Adding replica 192.168.37.133:6380 to 192.168.37.131:6380
M: 353de564f1d2d3c1ff43d784d2c1e39afeb69106 192.168.37.133:6370slots:[0-5460] (5461 slots) master
M: 5719c8542dc4b6ebf7c46c48ff16a805cfaf620a 192.168.37.130:6380slots:[5461-10922] (5462 slots) master
S: 818c6f50d8c201885403112ad0b15bac8df82019 192.168.37.130:6370replicates 353de564f1d2d3c1ff43d784d2c1e39afeb69106
M: be4f9cb19bf3b71d00509702a7b2ac01a264e579 192.168.37.131:6380slots:[10923-16383] (5461 slots) master
S: ad6b9f169aabc806b091cbeac38faecee51a5513 192.168.37.131:6370replicates 5719c8542dc4b6ebf7c46c48ff16a805cfaf620a
S: 8567395f6efbc2757e99f0027addcadf1534eafa 192.168.37.133:6380replicates be4f9cb19bf3b71d00509702a7b2ac01a264e579
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.37.133:6370)
M: 353de564f1d2d3c1ff43d784d2c1e39afeb69106 192.168.37.133:6370slots:[0-5460] (5461 slots) master1 additional replica(s)
S: ad6b9f169aabc806b091cbeac38faecee51a5513 192.168.37.131:6370slots: (0 slots) slavereplicates 5719c8542dc4b6ebf7c46c48ff16a805cfaf620a
M: be4f9cb19bf3b71d00509702a7b2ac01a264e579 192.168.37.131:6380slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: 5719c8542dc4b6ebf7c46c48ff16a805cfaf620a 192.168.37.130:6380slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 8567395f6efbc2757e99f0027addcadf1534eafa 192.168.37.133:6380slots: (0 slots) slavereplicates be4f9cb19bf3b71d00509702a7b2ac01a264e579
S: 818c6f50d8c201885403112ad0b15bac8df82019 192.168.37.130:6370slots: (0 slots) slavereplicates 353de564f1d2d3c1ff43d784d2c1e39afeb69106
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost redis6370]#
到这,集群就基本上创建完成了。
3.3 必要查看命令
链接 其中一台redis机器,执行以下命令。
3.3.1 cluster info
// 查看集群信息,可以查看集群状态等关键信息
37.130:6380(jenkins):0>cluster info
"cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:2
cluster_stats_messages_ping_sent:1159
cluster_stats_messages_pong_sent:1162
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:2326
cluster_stats_messages_ping_received:1162
cluster_stats_messages_pong_received:1135
cluster_stats_messages_received:2297
"
3.3.2 cluster nodes
可以查看 16384
slot都分配到那个主节点上了。
// 集群节点详细信息
37.130:6380(jenkins):0>cluster nodes
"5719c8542dc4b6ebf7c46c48ff16a805cfaf620a 192.168.37.130:6380@16380 myself,master - 0 1624700563000 2 connected 5461-10922
ad6b9f169aabc806b091cbeac38faecee51a5513 192.168.37.131:6370@16370 slave 5719c8542dc4b6ebf7c46c48ff16a805cfaf620a 0 1624700564000 5 connected
8567395f6efbc2757e99f0027addcadf1534eafa 192.168.37.133:6380@16380 slave be4f9cb19bf3b71d00509702a7b2ac01a264e579 0 1624700563517 6 connected
818c6f50d8c201885403112ad0b15bac8df82019 192.168.37.130:6370@16370 slave 353de564f1d2d3c1ff43d784d2c1e39afeb69106 0 1624700563000 3 connected
be4f9cb19bf3b71d00509702a7b2ac01a264e579 192.168.37.131:6380@16380 master - 0 1624700563000 4 connected 10923-16383
353de564f1d2d3c1ff43d784d2c1e39afeb69106 192.168.37.133:6370@16370 master - 0 1624700564952 1 connected 0-5460
"
3.3.3 cluster slots
37.130:6380(jenkins):0>cluster slots1) 1) "5461" // slot 起点2) "10922" // slot 终点3) 1) "192.168.37.130" // master 节点ip2) "6380" // master 节点端口3) "5719c8542dc4b6ebf7c46c48ff16a805cfaf620a" // master 节点 hash4) 1) "192.168.37.131" // slave 节点ip2) "6370" // slave 节点端口3) "ad6b9f169aabc806b091cbeac38faecee51a5513" // slave 节点 hash2) 1) "10923"2) "16383"3) 1) "192.168.37.131"2) "6380"3) "be4f9cb19bf3b71d00509702a7b2ac01a264e579"4) 1) "192.168.37.133"2) "6380"3) "8567395f6efbc2757e99f0027addcadf1534eafa"3) 1) "0"2) "5460"3) 1) "192.168.37.133"2) "6370"3) "353de564f1d2d3c1ff43d784d2c1e39afeb69106"4) 1) "192.168.37.130"2) "6370"3) "818c6f50d8c201885403112ad0b15bac8df82019"
四、可能遇到的问题
4.1 [ERR] Node 192.168.37.133:6370 NOAUTH Authentication required.
// 因为设置了masterauth密码,所以加上密码参数 -a 123456./redis-cli -a 123456 --cluster create 192.168.37.133:6370 192.168.37.130:6380 192.168.37.130:6370 192.168.37.131:6380 192.168.37.131:6370 192.168.37.133:6380 --cluster-replicas 1
4.2 Sending CLUSTER MEET messages to join the cluster
可能会报这个错误:>>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join
,然后一直卡在这里进行不下去了。
解决办法就是链接每一个redis的客户端,向执行安装集群的命令客户端发送如下命令:
// 192.168.37.131 为 执行安装集群的机器
CLUSTER MEET 192.168.37.131 6370
如果还是卡住进行不下去,可能是端口没有开启,启动如下端口:
// 开启端口,在这其之前 要注意防火墙是否开启 ,如果没有设置firewall,可以不进行开启端口的操作
#systemctl status firewalld
firewall-cmd --zone=public --add-port=16370/tcp --permanent
firewall-cmd --zone=public --add-port=16380/tcp --permanent
firewall-cmd --zone=public --add-port=6370/tcp --permanent
firewall-cmd --zone=public --add-port=6380/tcp --permanent
firewall-cmd --reload
注意,此处使用的端口是6370
和6380
那么按照官网解释,在开启6370和6380的同时,redis同时会开启16370
和16380
端口供集群选举通信使用(CLUSTER MEET
),即使用端口的大小加上10000(端口是XXXX,那么通信窗口是1XXXX)。
ps: 想直接使用笔者 REDIS 配置的,请移步 直接下载。包含以下文件,可直接使用:
├── redis6370
│ ├── mkreleasehdr.sh
│ ├── redis-benchmark
│ ├── redis-check-aof
│ ├── redis-cli
│ ├── redis.conf
│ └── redis-server
├── redis6380
│ ├── mkreleasehdr.sh
│ ├── redis-benchmark
│ ├── redis-check-aof
│ ├── redis-cli
│ ├── redis.conf
│ └── redis-server
└── run.sh
更多推荐
redis集群搭建(基于redis5.0+)
发布评论