Redis集群搭建

Posted by Sunfy on 2019-11-23
Words 1.7k and Reading Time 6 Minutes
Viewed Times
Viewed Times
Visitors In Total

Redis集群架构搭建。

Windows搭建基本步骤

打开redis文件路径,打开cmd.exe,在相应路径下运行

redis-server --service-install redis.windows.conf --loglevel verbose --service-name Redis6379

执行完成后会在服务中添加一个redis6379的服务

复制redis6379,粘贴分别命名为redis6380,redis6381然后修改端口和配置主从即可。

image-20220510092347887

image-20220510092428743

修改配置,改端口号port,slaveof

给从服务器加密码masterauth 配置(忘记了从服务器会没有数据)
格式分别为
port 6380
slaveof 127.0.0.1 6379
masterauth +主redis的密码。

然后分别创建6380和6381服务

redis-server --service-install redis.windows.conf --loglevel verbose --service-name Redis638x

image-20220510092612918

Linux搭建基本步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
第一步:在第一台机器的/usr/local下创建文件夹redis-cluster,然后在其下面分别创建2个文件夾如下
(1)mkdir -p /usr/local/redis-cluster
(2)mkdir 8001 8004
第一步:把之前的redis.conf配置文件copy到8001下,修改如下内容:
(1)daemonize yes
(2)port 8001(分别对每个机器的端口号进行设置)
(3)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
(4)cluster-enabled yes(启动集群模式)
(5)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)
(6)cluster-node-timeout 5000
(7)# bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
(8)protected-mode no (关闭保护模式)
(9)appendonly yes
设置密码需要增加如下配置:
(10)requirepass zhuge (设置redis访问密码)
(11)masterauth zhuge (设置集群节点间访问密码,跟上面一致)
第三步:把修改后的配置文件,copy到8004,修改第2、3、5项里的端口号,可以用批量替换:
:%s/源字符串/目的字符串/g
第四步:另外两台机器也需要做上面几步操作,第二台机器用8002和8005,第三台机器用8003和8006
第五步:分别启动6个redis实例,然后检查是否启动成功
(1)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)/src/redis-cli -a [password] --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地址和端口号)
如:/src/redis-cli -a zhuge -c -h 192.168.0.61 -p 800*
(2)进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)
(3)进行数据操作验证
(4)关闭集群则需要逐个进行关闭,使用命令:
/src/redis-cli -a zhuge -c -h 192.168.0.60 -p 800* shutdown

构建集群确认截图

image-20201106095855589

集群搭建确认

任意链接一台集群内客户端,cluster info 查看信息

image-20201106100219837

节点信息查看

使用命令 cluster nodes,也可以在对应的配置目录下找到nodes.conf文件中查看,集群内的所有服务都会有一个对应的nodes 文件

image-20201106100305703

集群横向扩容

配置文件如上,把对应的端口号修改即可

向集群内添加节点

1
src/redis-cli -a [password] --cluster add-node [要添加的ip:端口号] [集群内任一节点ip:端口号]

此刻可以查看集群节点信息内已经可以看到新增节点信息,新加入节点都是master节点

image-20201106112240260

新加入节点并不能直接使用,因为新加入节点没有hash槽,接下来就是分配hash槽

1
2
3
4
5
6
7
8
9
10
src/redis-cli -a [password] --cluster reshard [集群内任一节点ip:端口号]
How many slots do you want to move (from 1 to 16384)? [输入要给新加入节点分配的槽位个数]
What is the receiving node ID? [待分配槽位节点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.
  [输入all会从所有主节点中抽取槽位,分配给新节点]
Source node 1:all
Do you want to proceed with the proposed reshard plan (yes/no)? yes
随后等待分配槽位完成

分配槽位完成后查看节点信息如下:

image-20201106112529469

然后将8008节点加入集群,加入后同样默认为主节点,然后将8008修改为8007的从节点

1
2
3
4
# 连接要变更节点信息的节点
src/redis-cli -a zhuge -c -h [变更节点信息的ip] -p [变更节点信息的端口]
# 执行如下命令
cluster replicate [将当前节点分配给哪个主节点的id]

节点分配前后节点信息对比查看

image-20201106115432547

添加节点的工作就完成了


删除节点

删除从节点可以直接进行删除,但是主节点不可以,如果直接删除主节点会造成数据丢失

1
src/redis-cli -a [password] --cluster del-node [要删除节点ip:端口] [删除节点id]

删除主节点之前需要将主节点的槽位转移给别的槽位,如下操作

1
2
3
4
5
6
7
8
9
10
11
12
src/redis-cli -a [password] --cluster reshard [要转移槽位节点ip:端口] [转移槽位节点id]
How many slots do you want to move (from 1 to 16384)? [转移槽位个数]
What is the receiving node ID? [将槽位转移到哪个节点的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:[待转移槽位的id]
Source node 2:done
(ps:这里直接输入done 开始生成迁移计划)
 ... ...
Do you want to proceed with the proposed reshard plan (yes/no)? Yes
(ps:这里输入yes开始迁移)

槽位转移前后节点信息对比

image-20201106120214347

转移槽位完成后就可以通过上面删除槽位的命令删除对应的槽位即可


Copyright 2021 sunfy.top ALL Rights Reserved

...

...

00:00
00:00