实现 Redis-6.0.8 cluster 操作过程

实现 Redis-6.0.8 cluster 操作过程

这里我采用的是 redis 二进制安装,二进制安装 redis 见第三章文章,或者 4.1.3.1 章节通过 tar 包安装 redis 在本节不做过多演示

4.2.2.3.1 修改所有 redis 集群服务器配置文件,开启集群功能

我们只需在一台 redis 服务器上配置即可,等会通过 scp命令分发至后端多个 redis 服务器上

1、修改 A7 服务器 redis 配置文件,找到下面几行参数进行修改

[15:25:16 root@a7 apps]#vim /apps/redis/etc/redis.conf 

dir /apps/redis/data/               # 指定快照文件保存路径
cluster-enabled yes                 # 开启集群
cluster-config-file zgy-6379.conf   # 集群配置文件,我这里修改为了 zgy-6379.conf 在工作中自行修改
masterauth 12345                    # 集群 master 节点密码

2、重启 redis

[17:14:14 root@a7 ~]#systemctl restart redis.service 

3、通过 ss 命令查看端口 16379 已经打开

这个端口是用来监听集群服务的端口,这个端口是用来进行集群服务通讯的。这个端口是为了让数据和访问端口之间进行分开。访问端口是用来供客户端使用的,数据访问时用来内部集群访问的

[17:15:45 root@a7 ~]#ss -ntl | grep 16379
LISTEN     0      511          *:16379                    *:*                  
LISTEN     0      511       [::]:16379                 [::]:*

4、将 A7 上的配置文件分发至后端各个 redis 服务器上

# 拷贝至 B7 服务器
[17:18:10 root@a7 ~]#scp /apps/redis/etc/redis.conf 10.0.0.17:/apps/redis/etc/redis.conf

# 拷贝至 C7 服务器
[17:18:10 root@a7 ~]#scp /apps/redis/etc/redis.conf 10.0.0.27:/apps/redis/etc/redis.conf

# 拷贝至 D7 服务器
[17:18:10 root@a7 ~]#scp /apps/redis/etc/redis.conf 10.0.0.37:/apps/redis/etc/redis.conf

# 拷贝至 E7 服务器
[17:18:10 root@a7 ~]#scp /apps/redis/etc/redis.conf 10.0.0.47:/apps/redis/etc/redis.conf

# 拷贝至 F7 服务器
[17:18:10 root@a7 ~]#scp /apps/redis/etc/redis.conf 10.0.0.57:/apps/redis/etc/redis.conf

5、重启后端 redis 服务器所有 redis 服务

# B7 重启
[17:21:09 root@B7 redis-6.0.8]#systemctl restart redis.service 

# C7 重启
[17:21:09 root@C7 redis-6.0.8]#systemctl restart redis.service 

# D7 重启
[17:21:09 root@D7 redis-6.0.8]#systemctl restart redis.service 

# E7 重启
[17:21:09 root@E7 redis-6.0.8]#systemctl restart redis.service 

# F7 重启
[17:21:09 root@F7 redis-6.0.8]#systemctl restart redis.service 

6、查看所有 redis 节点 cluster 是否开启,登录至 redis 终端通过INFO cluster 命令查看

# A7 主机登录查看
[17:20:31 root@a7 ~]#redis-cli -a 12345
127.0.0.1:6379> INFO cluster
# Cluster
cluster_enabled:1           # 已经开启集群功能

# B7 主机登录查看
[17:20:31 root@b7 ~]#redis-cli -a 12345
127.0.0.1:6379> INFO cluster
# Cluster
cluster_enabled:1           # 已经开启集群功能

# C7 主机登录查看
[17:20:31 root@c7 ~]#redis-cli -a 12345
127.0.0.1:6379> INFO cluster
# Cluster
cluster_enabled:1           # 已经开启集群功能

# D7 主机登录查看
[17:20:31 root@d7 ~]#redis-cli -a 12345
127.0.0.1:6379> INFO cluster
# Cluster
cluster_enabled:1           # 已经开启集群功能

# E7 主机登录查看
[17:20:31 root@e7 ~]#redis-cli -a 12345
127.0.0.1:6379> INFO cluster
# Cluster
cluster_enabled:1           # 已经开启集群功能

# F7 主机登录查看
[17:20:31 root@f7 ~]#redis-cli -a 12345
127.0.0.1:6379> INFO cluster
# Cluster
cluster_enabled:1           # 已经开启集群功能

4.2.2.3.2 开始部署 redis 集群

6 版本与他们不一样。因为在3和4版本中需要使用到集群管理工具redis-trib.rb,而在 redis 5 版本往上这个就是自带功能

做好了 redis-cluster 准备工作之后我就开始部署 redis 集群

1、在 A7 节点上输入下面命令,实现对 redis-cluster 的部署

创建集群,–cluster-replicas 1代表3主3从,前3个代表3个master,后3个代表3个slave。通过该方式创建的带有从节点的机器不能够自己手动指定主节点

他就会提示创建是否创建redis集群。

其中M开头的为master主节点redis服务。而S开头的为slave节点。然后我们可以通过观察每个slave主机的 replicates后面跟的id来进行区分他的的master节点主机ip

[17:35:48 root@a7 ~]#redis-cli -a 12345 --cluster create 10.0.0.7:6379 10.0.0.17:6379 10.0.0.27:6379 10.0.0.37:6379 10.0.0.47:6379 10.0.0.57:6379 --cluster-replicas 1

-a 12345# 输入 redis 登录密码

4.2.2.3.3 查看 redis 集群配置文件确认状态

通过查看集群的配置文件/apps/redis/data/zgy-6379.conf 这个集群文件是我们在写redis的配置文件中定义的。里面是该集群中每个主机的状态

[17:40:28 root@a7 ~]#cat /apps/redis/data/zgy-6379.conf

4.2.2.4 Redis 集群的使用

1、在 A7 主机上链接到 redis 中,并且在 redis 集群中写入数据,输入set redis-cluster-key1 vlaue1

# 登录 redis 终端
[17:42:49 root@a7 ~]#redis-cli -a 12345

# 向集群中写入 redis-cluster-key1 vlaue1 的键值数据
127.0.0.1:6379> SET redis-cluster-key1 vlaue1
(error) MOVED 13662 10.0.0.27:6379      # 报错,将这个key移动到了13662 的槽位后面的是跟的10.0.0.27:6379 这个主机,所以我们就要去10.0.0.27:6379 这个主机的 redis 服务上写这个 key 的内容,因为是三主三从

# 通过查看并没有写入任何数据
127.0.0.1:6379> KEYS *
(empty array)

2、然后我们到10.0.0.27这个主机上去写这个 KEY 的值就写进去了

[17:48:48 root@C7 redis-6.0.8]#redis-cli -a 12345

# 写入 redis-cluster-key1 vlaue1 键值
127.0.0.1:6379> SET redis-cluster-key1 vlaue1
OK

# 通过查看已经写入
127.0.0.1:6379> KEYS *
1) "redis-cluster-key1"

# 通过得到这个 key 里面的值正是 vlaue
127.0.0.1:6379> GET redis-cluster-key1
"vlaue1"

3、在 C7 主机上通过INFO replication查看到后端从节点是 10.0.0.37 D7 服务器

# 登录 redis 
[17:52:26 root@C7 redis-6.0.8]#redis-cli -a 12345
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

# 输入 info replication 查看主从信息
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=10.0.0.37,port=6379,state=online,offset=1221,lag=1    # 从节点信息
master_replid:252d595f214b96c42df5aec382a35dca430b6a87
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1221
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1221

4、到 10.0.0.37 D7 主机上查看确实有这个 key,但是我们不能get这个值 (因为从的话没有读写。他会告诉我们要去10.0.0.27这个主机上去读写数据)

[17:55:31 root@D7 apps]#redis-cli -a 12345

# 查看所有的 key
127.0.0.1:6379> KEYS *
1) "redis-cluster-key1"

# 但是并不能 get
127.0.0.1:6379> GET redis-cluster-key1
(error) MOVED 13662 10.0.0.27:6379

4.2.2.5 测试 redsi-cluster 是否能自动提权 slave 为新的 master

然后我们做一个小测试来测试集群中的master主机宕机后slave主机是否会顶替master的角色

1、接着我们将 C7 服务器上 redis 服务宕机

[17:59:49 root@C7 ~]#systemctl stop redis

2、在 D7 服务器上登录 redis ,通过info replication 命令查看 D7 服务器上的 redis 已经将角色变为了 master,从而实现了集群的同步

# 登录 redis
[17:55:31 root@D7 apps]#redis-cli -a 12345

# 查看辅助状态
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:0
master_replid:56f9a97d79ea7e84293bb71b433120d87bbb8806
master_replid2:252d595f214b96c42df5aec382a35dca430b6a87
master_repl_offset:1837
second_repl_offset:1838
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1837

3、 并且在将 C7 服务器上 redis 启动,它会将 10.0.0.37(D7服务器)默认指定为自己的 master 节点

# 启动 redis
[17:59:58 root@C7 ~]#systemctl start redis

# 登录 redis
[18:03:25 root@C7 ~]#redis-cli -a 12345
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

# 查看复制信息
127.0.0.1:6379> INFO replication
# Replication
role:slave                      # 角色默认边为了 slave
master_host:10.0.0.37           # 指定 10.0.0.37 为自己的 master 节点
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:1879
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:56f9a97d79ea7e84293bb71b433120d87bbb8806
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1879
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1838
repl_backlog_histlen:42

以上就是 Redis 集群的部署

点赞