Centos7 Redis5.0.5 三主三从Cluster集群安装和集群遇到的错误解决

Centos7 Redis5.0.5 三主三从集群安装和环境配置以及错误解决

一.准备

1.下载Redis

可选择从官网下载 地址:http://download.redis.io/releases/redis-5.0.5.tar.gz

或虚拟机中下载

cd /usr/local/
wget http://download.redis.io/releases/redis-5.0.5.tar.gz

2.编译安装Redis

(如果你想安装redis以及集群在/usl/local下边 以下命令可傻瓜式全盘COPY我的)

安装gcc编译器

yum -y install gcc

解压 并编译安装

tar -zxvf /usr/local/redis-5.0.5.tar.gz -C /usr/local
cd /usr/local/redis-5.0.5
#安装在当前目录
make && make install

二. 创建节点

1.在/usr/local下创建了一个redis-cluster文件夹(此文件夹用来存储redis集群配置文件)

mkdir /usr/local/redis-cluster
cd /usr/local/redis-cluster
mkdir 7000 7001 7002 7003 7004 7005

2.拷贝redis配置文件到7000中

cp /usr/local/redis-5.0.5/redis.conf /usr/local/redis-cluster/7000

3.修改配置文件

以下仅仅列出修改的地方 (当前为7000配置文件redis.conf)

bind 0.0.0.0       //开启网络,保证外部可连接

protected-mode no  //关闭保护模式

port 7000         //每个节点的端口号

daemonize yes     //守护线程 ,后台运行redis

pidfile /usr/local/redis-cluster/7000/redis-7000.pid

appendonly yes    //aof日志每一个操作都记录模式

dbfilename dump-7000.rdb  rdb存储的位置

requirepass Redis123 //设置redis访问密码为Redis123

masterauth Redis123 //设置集群节点间访问密码,跟上面一致

cluster-enabled yes//开启集群模式

cluster-config-file nodes-7000.conf  //集群节点的配置

cluster-node-timeout 15000 //节点请求超时时间

复制7000下改好的配置文件到其他节点文件夹下

cp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7001
cp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7002
cp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7003
cp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7004
cp /usr/local/redis-cluster/7000/redis.conf /usr/local/redis-cluster/7005

修改配置文件中7000 端就为自己节点端口

exmple:修改7001 (将7000替换为7001即可)

bind 0.0.0.0       //开启网络,保证外部可连接

protected-mode no  //关闭保护模式

port 7001         //每个节点的端口号

daemonize yes     //守护线程 ,后台运行redis

pidfile /usr/local/redis-cluster/7001/redis-7001.pid

dbfilename dump-7001.rdb  rdb存储的位置

requirepass Redis123 //设置redis访问密码为Redis123

masterauth Redis123 //设置集群节点间访问密码,跟上面一致

appendonly yes    //aof日志每一个操作都记录模式

cluster-enabled yes//开启集群模式

cluster-config-file nodes-7001.conf  //集群节点的配置

cluster-node-timeout 15000 //节点请求超时时间

三.启动各个节点 7000 -7005

cd /usr/local/redis-5.0.5/src

redis-server /usr/local/redis-cluster/7000/redis.conf
redis-server /usr/local/redis-cluster/7001/redis.conf
redis-server /usr/local/redis-cluster/7002/redis.conf
redis-server /usr/local/redis-cluster/7003/redis.conf
redis-server /usr/local/redis-cluster/7004/redis.conf
redis-server /usr/local/redis-cluster/7005/redis.conf

后期可写为脚本 一键启动

验证启动是否成功

ps -ef | grep redis

查看redis版本:

#查看redis-server的版本
redis-server --version
#查看redis-cli的版本
redis-cli --version

开启防火墙

如果没有安装Firewall命令:

yum install firewalld firewalld-config

批量开启防火墙端口

firewall-cmd --zone=public --add-port=7000-7005/udp --permanent
firewall-cmd --zone=public --add-port=7000-7005/tcp --permanent

开启集群总线端口 (节点端口+10000)

firewall-cmd --zone=public --add-port=17000-17005/udp --permanent
firewall-cmd --zone=public --add-port=17000-17005/tcp --permanent

重启防火墙

firewall-cmd --reload

如果是云服务器上搭建 还需要在安全组中加入 7000-7005 17000-17005 端口

四.创建集群

注意copy我的命令记得更换Ip 192.168.10.122 换为自己的IP

集群配置密码时创建方式

#创建集群,--cluster-replicas 1指定从库数量1
cd /usr/local/redis-5.0.5/src

redis-cli -a Redis123 --cluster create 192.168.10.122:7000 192.168.10.122:7001 192.168.10.122:7002 192.168.10.122:7003 192.168.10.122:7004 192.168.10.122:7005 --cluster-replicas 1

集群无密码时创建方式

#创建集群,--cluster-replicas 1指定从库数量1
cd /usr/local/redis-5.0.5/src

redis-cli --cluster create 192.168.10.122:7000 192.168.10.122:7001 192.168.10.122:7002 192.168.10.122:7003 192.168.10.122:7004 192.168.10.122:7005 --cluster-replicas 1

输入指令后会不断打印指令信息

注意出现下方提示时 请输入yes yes yes (重要的事情说三遍)不是y 不然后续会出现不可名状的问题。。。

Can I set the above configuration? (type ‘yes’ to accept): yes

出现以下指令则说明集群创建成功

[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

五.验证集群

1.随意连接一个客户端

# -a访问服务端密码,-c表示集群模式,指定ip地址和端口号  连接时有几率从定向到其他节点如7001 7002等
/usr/local/redis-5.0.5/src/redis-cli -a 密码 -c -h 192.168.10.122 -p 7000
[root@localhost src]# redis-cli -a Redis123 -c -h 192.168.10.122 -p 7000
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.10.122:7000> 

2.查看集群状态以及节点

状态

192.168.10.122:7000> 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:1
cluster_stats_messages_ping_sent:13878
cluster_stats_messages_pong_sent:13619
cluster_stats_messages_publish_sent:5250
cluster_stats_messages_sent:32747
cluster_stats_messages_ping_received:13614
cluster_stats_messages_pong_received:13878
cluster_stats_messages_meet_received:5
cluster_stats_messages_publish_received:5201
cluster_stats_messages_received:32698

节点

192.168.10.122:7000> CLUSTER NODES
a92fb34ddb0c8022e35dad3c491c8cd66b5d94cc 192.168.10.122:7001@17001 master - 0 1579237949546 2 connected 5461-10922
352c4ce0a248ef8776df33f9c38df15e92e58e5d 192.168.10.122:7005@17005 slave a92fb34ddb0c8022e35dad3c491c8cd66b5d94cc 0 1579237949746 6 connected
97badb2a5a4a1a29c91ecf13545bf03c5f4520d8 192.168.10.122:7000@17000 myself,master - 0 1579237949000 1 connected 0-5460
c8db2eb6b26a84285862c967a2230afedb3e05a5 192.168.10.122:7003@17003 slave 1dda00207ada3eb5ae1d85f28936b6c3c72eac87 0 1579237948000 4 connected
bd14a487b4f7132755b51a993dad43b97de4f7e8 192.168.10.122:7004@17004 slave 97badb2a5a4a1a29c91ecf13545bf03c5f4520d8 0 1579237948741 5 connected
1dda00207ada3eb5ae1d85f28936b6c3c72eac87 192.168.10.122:7002@17002 master - 0 1579237948000 3 connected 10923-16383
192.168.10.122:7000>

可以看到 7000 7001 7002 为主 7003 7004 7005 为从

3.进行数据验证

存取数据 节点切换

192.168.10.122:7000> set lei 123
-> Redirected to slot [10074] located at 192.168.10.122:7001
OK
192.168.10.122:7001> get lei
"123"
192.168.10.122:7001>

至此 redis5.0.5三主 三从集群搭建完成

六.优雅的关闭集群

关闭集群则需要逐个进行关闭,使用命令: 一个一个执行 (后续可以写一个shell脚本 一键关闭)

/usr/local/redis-5.0.5/src/redis-cli -a 密码 -c -h 192.168.10.122 -p 7000 shutdown
/usr/local/redis-5.0.5/src/redis-cli -a 密码 -c -h 192.168.10.122 -p 7001 shutdown
/usr/local/redis-5.0.5/src/redis-cli -a 密码 -c -h 192.168.10.122 -p 7002 shutdown
/usr/local/redis-5.0.5/src/redis-cli -a 密码 -c -h 192.168.10.122 -p 7003 shutdown
/usr/local/redis-5.0.5/src/redis-cli -a 密码 -c -h 192.168.10.122 -p 7004 shutdown
/usr/local/redis-5.0.5/src/redis-cli -a 密码 -c -h 192.168.10.122 -p 7005 shutdown

输入上述指定会提示输入a 指令不安全 没影响 继续关闭其他节点即可

再次从启redis 集群

只需要一个一个开启节点即可 因为创建了cluster集群 启动节点 集群自然就启动了 (启动节点也可以写一个脚本)

cd /usr/local/redis-5.0.5/src

redis-server /usr/local/redis-cluster/7000/redis.conf
redis-server /usr/local/redis-cluster/7001/redis.conf
redis-server /usr/local/redis-cluster/7002/redis.conf
redis-server /usr/local/redis-cluster/7003/redis.conf
redis-server /usr/local/redis-cluster/7004/redis.conf
redis-server /usr/local/redis-cluster/7005/redis.conf

七.个人目前遇到的集群问题以及解决方案

先删除节点的rdb nodes.conf 以及aof 三种文件 记得数据做好备份

错误 :Cannot determine a partition to read for slot

首先链接集群尝试(节点检测):

./redis-cli --cluster check 192.168.10.122:7000 -a Redis123

结果

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing Cluster Check (using node 192.168.10.122:7000)
M: 87d66a4ca81b7abfd81b78bbfd2521691f9fbe09 1192.168.10.122:7000
   slots: (0 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[ERR] Not all 16384 slots are covered by nodes.

解决

使用命令进行修复 (每个节点) 节点修复

./redis-cli --cluster fix 192.168.10.122:7000 -a Redis123

中途会出现弹框

Fix these slots by covering with a random node? (type 'yes' to accept):

输入yes 注意是yes yes yes 不是y

解决!!

错误:CLUSTER is down

集群挂掉了

本人解决步骤:

1.使用上方 错误一方式 检测 修复节点

2.首先查看redis 是否启动

ps -aux|grep redis

如未启动则运行命令启动redis各个节点

如redis已启动但仍是redis cluster is down 则运行命令先关闭redis集群,这时候我们可以根据现有节点重新创建集群从而使集群恢复工作。
步骤如下:

(1)
做好备份 ,会清空redis数据
备份命令
首先则是登录到各个节点 ,然后执行save 命令
在这里插入图片描述
其中 xxx.aof以及 rdb结尾的文件则为我们redis储存的数据
(2)
删除/usr/local/redis/src (即src安装目录)下的 appendonly.aof dump,rdb 以及各个节点的rdb nodes (dump-7000.rdb nodes-7000.conf )

删除集群相关文件 命令

rm nodes-7000.conf nodes-7001.conf nodes-7002.conf nodes-7003.conf nodes-7004.conf nodes-7005.conf -rf
rm dump-7000.rdb dump-7001.rdb dump-7002.rdb dump-7003.rdb dump-7004.rdb dump-7005.rdb -rf
rm appendonly.aof -rf

(3)
从新启动各个节点 7000-7005
(4)
从新创建集群

#创建集群,--cluster-replicas 1指定从库数量1
cd /usr/local/redis-5.0.5/src

redis-cli -a Redis123 --cluster create 192.168.10.122:7000 192.168.10.122:7001 192.168.10.122:7002 192.168.10.122:7003 192.168.10.122:7004 192.168.10.122:7005 --cluster-replicas 1

根据提示 输入 yes 即可创建集群了
当然 ,创建完成后 ,还是可以登录一个节点 查看cluster 信息 以及查看自己存储的文件等

(5) redis -cluster 数据恢复
确认集群功能正常后 ,然后关闭集群的各个节点 并在次执行删除命令 删除相关文件

rm dump-7000.rdb dump-7001.rdb dump-7002.rdb dump-7003.rdb dump-7004.rdb dump-7005.rdb -rf
rm appendonly.aof -rf

将之前的备份的文件 还原到 安装目录 我的即在 /usr/local/redis-5.0.5/src 下 ,从新启动集群各个节点
此时 Redis-cluster 集群down掉的问题便修复了

错误:Waiting for the cluster to join

>>> 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
......

出现此错误 原因以及解决

1.每个节点下的redis.config bind 端口没改为0.0.0.0

2.防火墙或者安全组未开放redis集群总线端口(redis 各个节点端口+10000) 例如我的17000-17005

测试集群!!!

附上我的SpringBoot整合Redis Cluster 连接
SpringBoot整合Redis Cluster 集群 以及Redis存储结构 String Hash Set List 的使用

你可能感兴趣的:(linux,redis)