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.gz2.编译安...
文章目录
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 的使用
更多推荐
所有评论(0)