centos7+Redis

525 阅读10分钟

安装gcc编译器

yum -y install gcc

解压 并编译安装

tar -zxvf redis-5.0.5.tar.gz -C 

cd redis-5.0.5

把文件编译到指定目录

mkdir /root/redis-server

make && make install PREFIX=/root/redis-server

一般情况我们把应用程序方法/usr/local文件夹下,所以在该目录下创建redis集群文件夹:

mkdir /usr/local/redis-cluster

把编译好的redis程序放到redis集群文件夹内

mv redis-server  /usr/local/redis-cluster/

把我准备好的config文件夹也上传到redis集群文件夹内

把准备好的startRedis.sh也上传到redis集群文件夹内

使用命令是启动脚本可执行:

chmod +x startRedis.sh

使用命令执行启动脚本:

./startRedis.sh

使用命令查看是否启动成功:

netstat -tnlp | grep redis

启动成功后使用命令创建集群:

需要在redis-server文件夹的bin目录下使用redis-cli

cd /usr/local/redis-cluster/redis-server/bin

把下面命令中的ip换成你的ip

./redis-cli --cluster create 192.168.1.134:6601 192.168.1.134:6602 192.168.1.134:6603 192.168.1.134:6604 192.168.1.134:6605 192.168.1.134:6606 --cluster-replicas 1

准备

下载Redis

可选择从官网下载 地址:download.redis.io/releases/re…

或虚拟机中下载

cd /usr/local/

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

编译安装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-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

重启防火墙

fir ewall-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脚本 一键关闭)

pkill redis

再次从启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
测试集群!!!