Linux系统搭建redis-cluster集群案例

Linux系统搭建redis-cluster集群案例

(一)redis下载及安装

【1】前言介绍

本文是在一台服务器上搭建多个redis的伪集群方式来进行讲解,后续要换成多台步骤类似。

Redis5.0前采用redis-trib进行集群的创建和管理,需要ruby支持

Redis5.0可以直接使用Redis-cli进行集群的创建和管理。本文用的是redis版本5.0.5

【2】redis下载以及安装

(1)首先要进入Linux系统的根目录
cd /
(2)安装redis所需的环境
yum install -y gcc-c++
yum install -y wget

请添加图片描述

(3)下载redis源码包
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
(4)解压redis到根目录下
tar -zxf redis-5.0.5.tar.gz

请添加图片描述

(5)安装redis

安装之前,先创建好/redis/redis-cluster/7001的文件
进入src目录

make install PREFIX=/redis/redis-cluster/7001
(6)拷贝配置文件 并修改
cp /redis-5.0.5/redis.conf /redis/redis-cluster/7001/bin

修改配置文件
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

(7)启动并操作

进入到redis的bin目录中进行启动

./redis-server redis.conf

客户端连接进行操作

./redis-cli -h 192.168.0.102 -p 7001

请添加图片描述测试安装并启动成功

(二)集群搭建-三主三从

【1】复制配置文件

(1)在redis-cluster目录下创建多个文件7002-7008
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005
mkdir 7006
mkdir 7007
mkdir 7008

请添加图片描述

(2)开始复制配置好的7001文件夹下的文件
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7002
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7003
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7004
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7005
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7006
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7007
cp -r /redis/redis-cluster/7001/* /redis/redis-cluster/7008
(3)修改配置文件的端口

复制完成后,对每个目录下的配置文件进行修改,修改对应端口就可以了
请添加图片描述

【2】创建启动脚本进行启动

(1)创建启动文件

回到redis-cluster目录下创建启动文件

创建启动文件
touch start.sh
编辑启动文件
vim start.sh

在这里插入图片描述

(2)启动文件start.sh的内容
cd 7001/bin
./redis-server redis.conf
cd ..
cd ..
cd 7002/bin
./redis-server redis.conf
cd ..
cd ..
cd 7003/bin
./redis-server redis.conf
cd ..
cd ..
cd 7004/bin
./redis-server redis.conf
cd ..
cd ..
cd 7005/bin
./redis-server redis.conf
cd ..
cd ..
cd 7006/bin
./redis-server redis.conf
cd ..
cd ..
(3)给启动文件授权
#授权
chmod u+x start.sh
(4)启动

启动前可以检查一下redis的线程是不是有已经启动的了,使用kill命令全部关闭。

./start.sh

请添加图片描述

(5)查看启动后的线程
#查看启动的线程情况
ps -ef|grep redis

请添加图片描述

【3】创建Redis集群(创建时Redis里不要有数据)

(1)创建redis集群

进入到一个redis,bin目录下执行命令。cluster-replicas后面的1表示一个主机有几个从机,因为现在只有一个因此是1,工作中是2。

./redis-cli --cluster create 192.168.0.102:7001 192.168.0.102:7002 192.168.0.102:7003 192.168.0.102:7004 192.168.0.102:7005 192.168.0.102:7006 --cluster-replicas 1

请添加图片描述
请添加图片描述

(2)槽位分配的原理

【4】客户端连接集群并使用

(1)以redis集群方式进行连接

注意:-c 表示是以redis集群方式进行连接

./redis-cli -h 192.168.0.102 -p 7001 -c
(2)查看集群状态
cluster info

请添加图片描述

(3)查看集群中的节点
cluster nodes

请添加图片描述

(4)添加数据并查看

从7001添加数据看看(如何选择和分配槽位slot的原理看一下)
请添加图片描述
从7002查询数据
请添加图片描述

(三)集群扩容

【1】数据迁移

(1)新节点加入
(2)节点下线
(3)负载不均衡需要调整slot分布

【2】添加7077节点作为新节点,并且启动

进入7007/bin/目录,并且启动redis

./redis-server redis.conf

【3】7007申请加入集群

添加节点 7007 去meet7001申请加入集群

./redis-cli --cluster add-node 192.168.0.102:7007 192.168.0.102:7001

请添加图片描述
连接7007的redis,查看是否已经加入集群

#连接集群
./redis-cli -h 192.168.0.102 -p 7007 -c

#查看集群信息
cluster info

#查看是否加入集群
cluster nodes

请添加图片描述在集群的节点中能看到7007,但是现在已经连接,还没有分配hash槽

【4】给7007节点分配hash槽,这样主节点才能存储数据

./redis-cli --cluster reshard 192.168.0.102:7007

(1)输入要分配槽数量
在这里插入图片描述(2)输入接收槽的节点id
这里根据自己机器上的7007的id进行填写
在这里插入图片描述在这里插入图片描述
(3)输入节点id后再输入all就完事了
在这里插入图片描述
(4)输入yes开始移动槽到目标结点id
在这里插入图片描述
(5)查询节点

#连接集群
./redis-cli -h 192.168.0.102 -p 7007 -c

#查看集群信息
cluster info

#查看是否加入集群
cluster nodes

请添加图片描述

【5】添加7008从结点,将7008作为7007的从结点

(1)首先启动7008

#进入7008/bin/目录
#启动
./redis-server redis.conf

(2)添加7008从结点,将7008作为7007的从结点

./redis-cli --cluster add-node 新节点的ip和端口 旧节点ip和端口 --cluster-slave -cluster-master-id 主节点id

./redis-cli --cluster add-node 192.168.0.102:7008 192.168.0.102:7007 --cluster-slave --cluster-master-id 2d17e4ccce0e5bf54ab893782d81d21214662ce1

请添加图片描述
请添加图片描述

(3)7008节点登入集群,查看节点信息

#连接集群
./redis-cli -h 192.168.0.102 -p 7008 -c

#查看集群信息
cluster info

#查看是否加入集群
cluster nodes

请添加图片描述

(四)集群缩容

【1】删除已经占有hash槽的结点会失败

(1)缩容命令

./redis-cli --cluster del-node 192.168.0.102:7008 5cc3b1ef0bf018435e65f93939d81acba6fbd603

删除已经占有hash槽的结点会失败,必须先分出去否则报错如下:

[ERR] Node 127.0.0.1:7008 is not empty! Reshard data away and try again.

【2】7008的槽位释放

进入7008/bin/目录,开始hash槽重新分配—参考上面hash槽分配步骤

./redis-cli --cluster reshard 192.168.0.102:7008

在这里插入图片描述当出现这个错误代表要删除的节点不是master节点,重新到主节点7007去执行删除

*** The specified node (5cc3b1ef0bf018435e65f93939d81acba6fbd603) is not known or not a master, please retry.

【3】7007的槽位释放

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

【4】删除主节点7007

./redis-cli --cluster del-node 192.168.0.102:7007 2d17e4ccce0e5bf54ab893782d81d21214662ce1

可以看到集群中已经没有7007了
在这里插入图片描述

【5】删除节点7008

./redis-cli --cluster del-node 192.168.0.102:7008 5cc3b1ef0bf018435e65f93939d81acba6fbd603

可以看到集群中已经没有7008了
在这里插入图片描述

(五)搭建一主多从集群+哨兵模式

【1】删除之前已经搭建的三主三从集群

(1)关闭所有redis进程

#查看所有redis进程
ps -ef|grep redis

#直接杀死所有进程(直接暴力)
kill -9 $(pidof redis-server)

#停止所有节点(这个关闭也行,不暴力)
redis-cli -h 172.17.97.2 -p 7001 shutdown
redis-cli -h 172.17.97.2 -p 7002 shutdown
redis-cli -h 172.17.97.2 -p 7003 shutdown
redis-cli -h 172.17.97.2 -p 7004 shutdown
redis-cli -h 172.17.97.2 -p 7005 shutdown
redis-cli -h 172.17.97.2 -p 7006 shutdown

(2)删除每个节点对应的配置文件
集群节点的配置信息文件node*.conf,aof和 rdb是存储文件,都删除。

如果不知道自己的文件在哪儿 ,可以使用find命令全局进行查找

 find / -name node*.conf

在这里插入图片描述挨个删除

rm -rf /redis/redis-cluster/7001/bin/nodes.conf
rm -rf /redis/redis-cluster/7002/bin/nodes.conf
rm -rf /redis/redis-cluster/7003/bin/nodes.conf
rm -rf /redis/redis-cluster/7004/bin/nodes.conf
rm -rf /redis/redis-cluster/7005/bin/nodes.conf
rm -rf /redis/redis-cluster/7006/bin/nodes.conf
rm -rf /redis/redis-cluster/7007/bin/nodes.conf
rm -rf /redis/redis-cluster/7008/bin/nodes.conf

也可以使用批量删除

#删除节点下面的所有相关文件(这个是批量删除的操作)
rm -f ./*/nodes-*.conf ./*/appendonly.aof ./*/dump.rdb

【2】主从复制配置

(1)配置两台从redis服务(7007和7008)

分别进入7007和7008的bin目录,修改配置文件redis.conf,添加内容如下

# 指定主服务器
replicaof 192.168.0.102 7001

在这里插入图片描述

(2)分别启动7001、7007、7008三台redis服务器

在这里插入图片描述

./redis-server redis.conf

可以看到从服务器的启动报错了,因为在集群模式下不允许使用replicaof指令,可以在配置文件里把集群模式关掉,把三台服务器的都设置为no

在这里插入图片描述再启动7007、7008就可以了
在这里插入图片描述

(3)连接主机7001的客户端,查看主从复制配置的结果
./redis-cli -h 192.168.0.107 -p 7001

在这里插入图片描述使用info命令查看,可以看到有两个slave从redis服务器了
在这里插入图片描述

(4)测试主从复制的案例

(1)主服务器7001存入值
在这里插入图片描述(2)从服务器7007和7008分别测试查询
在这里插入图片描述
到此,主从复制配置成功,测试成功

【3】哨兵模式配置

在上面的主从关系中,如果主机宕机了,需要手动皮质一个从机顶替上来,并且还要修改其他从机与其他服务器的关系,配置新的主从关系。

通过哨兵模式我们可以实现自动替换主机。

(1)配置sentinel.conf文件

哨兵主要是用来监听主服务器的,所以一般把哨兵部署在从服务器上监听,哨兵只需要配置其中一个从机即可!

在7008/bin/目录下新建文件sentinel.conf,在其中添加如下内容

#关闭保护模式,使外网能访问
protected-mode no
#后台运行 
daemonize yes
#配置哨兵需要监控的主节点ip和端口,最后的2代表,如果有2个哨兵主观认为主节点down了,那么就客观认为主节点down掉了,开始发起投票选举新主节点的操作。多个主节点配置多个
sentinel monitor master 192.168.0.107 7001 1
#配置多少毫秒后没收到主节点的反馈,则主观认为主节点down了
sentinel down-after-milliseconds master 5000
#failover过期时间。当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel将会认为此次failoer失败。  
sentinel failover-timeout master 30000

mastername 监控主数据的名称,自定义
192.16.0.107:监控主数据库的IP;
7001:端口
1:最低通过票数

(2)启动哨兵

在启动哨兵之前保证redis服务器已经启动。

哨兵可以理解为一个监控的进程。既然要监控,那么首先需要先有监控的对象,即主从机需要先启动。就按照先前的启动方式启动即可。

./redis-sentinel sentinel.conf

启动之后同样查看进程,如果出现sentinel进程说明已经启动成功!
在这里插入图片描述

(3)启动哨兵后的变化

(1)查询配置文件sentinel.conf中生成的内容
启动后可观察sentinel.conf,可以发现,sentinel会向sentinel.conf文件中拼接主从信息,哨兵节点信息。
在这里插入图片描述

(4)模拟主服务器宕机

首先查看哨兵日志sent.log,现在是空的。
在这里插入图片描述
在这里插入图片描述执行

kill -9 1449

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44823875/article/details/128330363
今日推荐