Redis5.0+——集群搭建,水平扩容

Redis集群

容量不够,redis如何进行扩容?
并发写操作,redis如何分摊?
使用redis集群:三个服务器均可作为集群入口,多个服务器之间可以相互请求

1.1前期准备

1.准备三台服务器,在redis同级目录中新建redis-cluster目录。
2.三个服务器中的redis-cluster目录中再分别新建8001,8004;8002,8005;8003,8006目录
架构图
在这里插入图片描述
或者架构如下
在这里插入图片描述

若使用相关云服务器(笔者此处使用腾讯云),需要在防火墙中放行端口
在这里插入图片描述

1.2.编辑配置文件

安装目录说明:
在这里插入图片描述

redis集群需要至少三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,这里用三台机器部署6个redis实例,每台机器一主一从

第一步:在第一台机器的/usr/local下创建文件夹redis-cluster,然后在其下面分别创建2个文件夾如下
(1)mkdir -p /usr/local/redis-cluster
(2)mkdir 8001 8004

第一步:把之前的redis.conf配置文件copy到8001下,修改如下内容:
 (1)# bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
 (2)protected-mode  no   (关闭保护模式)
(3)port 8001(分别对每个机器的端口号进行设置)
(4)daemonize yes # 后台启动
(5)pidfile /var/run/redis_8001.pid  # 把pid进程号写入pidfile配置的文件
(6)logfile "8001.log"
(7)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
(8)cluster-enabled yes(启动集群模式)
(9)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)
(10)cluster-node-timeout 10000
 (11)appendonly yes

 
如果要设置密码需要增加如下配置:
 (11)requirepass kuku    (设置redis访问密码)
 (12)masterauth kuku      (设置集群节点间访问密码,跟上面一致)

第三步:把修改后的配置文件,copy到8004,修改第3、5、6、7、9项里的端口号,
--------------
可以用批量替换:
:%s/源字符串/目的字符串/g 
--------------
第四步:另外两台机器也需要做上面几步操作,第二台机器用8002和8005,第三台机器用8003和8006

第五步:分别启动6个redis实例,然后检查是否启动成功
(1)/usr/local/redis-5.0.14/src/redis-server /usr/local/redis-cluster/800*/redis.conf
(2)ps -ef | grep redis 查看是否启动成功
    
第六步:用redis-cli创建整个redis集群(redis5以前的版本集群是依靠ruby脚本redis-trib.rb实现)
# 下面命令里的1代表为每个创建的主服务器节点创建一个从服务器节点
# 执行这条命令需要确认三台机器之间的redis实例要能相互访问,可以先简单把所有机器防火墙关掉,如果不关闭防火墙则需要打开redis服务端口和集群节点gossip通信端口16379(默认是在redis端口号上加1W)
# 关闭防火墙
# systemctl stop firewalld # 临时关闭防火墙
# systemctl disable firewalld # 禁止开机启动
# 注意:下面这条创建集群的命令大家不要直接复制,里面的空格编码可能有问题导致创建集群不成功
(1)/usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster create --cluster-replicas 1 192.168.0.61:8001 192.168.0.62:8002 192.168.0.63:8003 192.168.0.61:8004 192.168.0.62:8005 192.168.0.63:8006 
(默认会将配置的前三台配置为主节点,后三台为从节点)

第七步:验证集群:
(1)连接任意一个客户端即可:./redis-cli -c -h -p (-a访问服务端密码,-c表示集群模式,指定ip地址和端口号)
    如:/usr/local/redis-5.0.14/src/redis-cli -a kuku -c -h 192.168.0.61 -p 800*
(2)进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)
(3)进行数据操作验证
(4)关闭集群则需要逐个进行关闭,使用命令:
/usr/local/redis-5.0.3/src/redis-cli -a kuku -c -h 192.168.0.60 -p 800* shutdown
# 注意:集群关闭以后不能再使用第六步方式启动,需要挨着将所有节点启动集群会自动完成搭建,redis会读取nodes.800x.conf中的信息自动搭建

完成配置进行到第六步后成功界面
在这里插入图片描述
输入yes 然后回车继续,此时集群内部会进行一些通讯,若是服务器通讯第一次可能会很慢
在这里插入图片描述
登录进入集群查看集群信息
在这里插入图片描述

2.redis集群水平扩容

需求:在业务高峰期比如双11需要增加一个集群缓解系统压力,这样情况下可以采取水平扩容的方式,在前面配置的三台基础上再新增集群(本文水平拓展一个集群)

2.1前期准备

1.新的主机上新建redis-cluster目录新增8007和8009(笔者此处8008被占用)目录,本文基于8001的主机完成,目录结构配置如下
在这里插入图片描述
2.将之前8001和redis.conf拷贝到8007和8009

cd  /usr/local/redis-cluster/8001/
cp redis.conf /usr/local/redis-cluster/8007/
cp redis.conf /usr/local/redis-cluster/8009/

2.2环境搭建

修改涉及到端口号的配置

(3)port 8001(分别对每个机器的端口号进行设置)
(5)pidfile /var/run/redis_8001.pid  # 把pid进程号写入pidfile配置的文件
(6)logfile "8001.log"
(7)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
(9)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)

启动新搭建的redis

/usr/local/redis-5.0.14/src/redis-server /usr/local/redis-cluster/8007/redis.conf
/usr/local/redis-5.0.14/src/redis-server /usr/local/redis-cluster/8009/redis.conf
ps -el | grep redis # 查看是否启动成功,若启动失败查看对应800x目录下的800x.log日志文件排错

将搭建的redis加入集群

 /usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster add-node 124.220.0.192:8007 124.220.0.192:8001 # 将8007加入集群
/usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster add-node 124.220.0.192:8009 124.220.0.192:8001 # 将8009加入集群

启动成功界面
在这里插入图片描述
在之前集群的客户端使用cluster nodes查看节点
在这里插入图片描述
当添加节点成功以后,新增的节点不会有任何数据,因为它还没有分配任何的slot(hash槽),我们需要为新节点手工分配hash槽,在主机上使用命令

[root@VM-12-8-centos 8009]# /usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster reshard 124.xxx.0.xxx:8001

在这里插入图片描述
分配多少给那个ID,all用所有的节点作为源节点迁移给slots
在这里插入图片描述
在这里插入图片描述
迁移以上槽位给8007,若槽位中有数据也会一起迁移
redis-cli客户端查看节点信息,可以发现0-198,5461-5661,10923-11121这三个段的槽位分配给了8007
在这里插入图片描述
添加从节点8009到集群中去并查看集群状态

[root@VM-12-8-centos ~] # /usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster add-node xxx.xxx.0.1x:8009 xxx.xx.0.1x:8001

此时8009是master主节点(任何节点开始加入集群都是master)
将8009设置为8007的从节点,我们使用replicate命令来指定当前节点(从节点)的主节点id为哪个
1.连接8009客户端,然后使用集群命令操作修改为8007的从节点

[root@VM-12-8-centos ~] # /usr/local/redis-5.0.14/src/redis-cli -a kuku -c -h 124.220.0.192 -p 8009
124.220.0.192:8009> cluster replicate b71cbb038b3176425043219d1f223ee21cf8dd94
#b71cbb038b3176425043219d1f223ee21cf8dd94为8007的id可以通过redis-cli客户端中使用cluster nodes查看节点

2.3 拓展集群删除

1.删除8009从节点

[root@VM-12-8-centos 8009]# /usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster del-node xx.xx.x.1xx:8009 f75485721a1c4bd49869e6c56a7799765f5faf1d

在这里插入图片描述
redis-cli客户端查看nodes信息(cluster nodes命令查看),8009已经被删除

2.删除8007主节点
删除8007master之前,因为主节点的里面是有分配了hash槽的,所以我们这里必须先把8007里的hash槽放入到其他的可用主节点中去,然后再进行移除节点操作,不然会出现数据丢失问题。

/usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster reshard xxx.xx.0.xx:8007

需要注意会提示以下操作

How many slots do you want to move (from 1 to 16384)? 600 # 迁移多少数据
What is the receiving node ID? dfca1388f124dec92f394a7cc85cf98cfa02f86f  #把数据移动到哪?8001的主节点id
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node 1:2728a594a0498e98e4b83a537e19f9a0a3790f38 #需要的数据源id,也就是我们的8007节点id
Source node 2:done # 直接输入done 开始生成迁移计划
 ... ...
Do you want to proceed with the proposed reshard plan (yes/no)? Yes # 输入yes开始迁移

数据迁移完以后执行删除

/usr/local/redis-5.0.14/src/redis-cli -a kuku --cluster del-node xxx.xx.0.1xx:8007 b71cbb038b3176425043219d1f223ee21cf8dd94

在这里插入图片描述
再到其他集群redis-cli客户端cluster-node查看8007已经被移除

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值