redis集群搭建(基于redis5.0+)

编程入门 行业动态 更新时间:2024-10-21 16:26:07

redis<a href=https://www.elefans.com/category/jswz/34/1771240.html style=集群搭建(基于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				# 集群密码

其中,portpidfilecluster-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

注意,此处使用的端口是63706380
那么按照官网解释,在开启6370和6380的同时,redis同时会开启1637016380端口供集群选举通信使用(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+)

本文发布于:2024-02-24 16:46:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1695998.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:集群   redis

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!