Redis-Cluster集群模式部署

Cluster模式介绍

sentinel模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,主从模式或sentinel模式就不能满足需求了,这个时候需要对存储的数据进行分片,将数据存储到多个Redis实例中。cluster模式的出现就是为了解决单机Redis容量有限的问题,将Redis的数据根据一定的规则分配到多台机器。

cluster可以说是sentinel和主从模式的结合体,通过cluster可以实现主从和master重选功能,所以如果配置两个副本三个分片的话,就需要六个Redis实例。因为Redis的数据是根据一定规则分配到cluster的不同机器的,当数据量过大时,可以新增机器进行扩容。

使用集群,只需要将redis配置文件中的cluster-enable配置打开即可。每个集群中至少需要三个主数据库才能正常运行,新增节点非常方便。

cluster集群特点

  • 多个redis节点网络互联,数据共享
  • 所有的节点都是一主一从(也可以是一主多从),其中从不提供服务,仅作为备用
  • 不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上, 并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为
  • 支持在线增加、删除节点
  • 客户端可以连接任何一个主节点进行读写

Cluster模式搭建

环境准备:
三台机器,分别开启两个redis服务(端口)

192.168.30.128 端口:7001,7002

192.168.30.129 端口:7003,7004

192.168.30.130 端口:7005,7006

Redis安装

安装Redis软件

去官网找自己需要的版本 https://download.redis.io/releases/
说明:3.0.0之前的版不支持cluster集群模式,我用的版是4.0.8

三台机器上分别执行

服务器上先安装好gcc环境
yum install gcc gcc-c++

[root@k8s-master01 ~]# wget https://download.redis.io/releases/redis-4.0.8.tar.gz  
--2021-05-18 09:19:02--  https://download.redis.io/releases/redis-4.0.8.tar.gz
正在解析主机 download.redis.io (download.redis.io)... 45.60.125.1
正在连接 download.redis.io (download.redis.io)|45.60.125.1|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1729973 (1.6M) [application/octet-stream]
正在保存至: “redis-4.0.8.tar.gz”

redis-4.0.8.tar.gz             100%[=======================>]   1.65M  1004KB/s  用时 1.7s    

2021-05-18 09:19:13 (1004 KB/s) - 已保存 “redis-4.0.8.tar.gz” [1729973/1729973])

[root@k8s-master01 ~]# tar -xf redis-4.0.8.tar.gz 
[root@k8s-master01 ~]# cd redis-4.0.8/
[root@k8s-master01 redis-4.0.8]# ls
00-RELEASENOTES  CONTRIBUTING  deps     Makefile   README.md   runtest          runtest-sentinel  src    utils
BUGS             COPYING       INSTALL  MANIFESTO  redis.conf  runtest-cluster  sentinel.conf     tests
[root@k8s-master01 redis-4.0.8]# make PREFIX=/data/redis install  #服务器上没有gcc环境会报错
.
.
.
过程省略
[root@k8s-master01 redis-4.0.8]# cd /data/redis/
[root@k8s-master01 redis]# ll
total 0
drwxr-xr-x. 2 root root 134 May 18 08:54 bin
[root@k8s-master01 redis]# mkdir conf data logs
[root@k8s-master01 redis]# ll
total 0
drwxr-xr-x. 2 root root 134 May 18 08:54 bin
drwxr-xr-x. 2 root root   6 May 18 08:57 conf
drwxr-xr-x. 2 root root   6 May 18 08:57 data
drwxr-xr-x. 2 root root   6 May 18 08:57 logs
[root@k8s-master01 redis]# 
[root@k8s-master01 redis]# echo 'export PATH=/data/redis/bin:$PATH' >> /etc/profile
[root@k8s-master01 redis]# source /etc/profile

修改配置文件

192.168.30.128

# cp /root/redis-4.0.8/redis.conf /data/redis/conf/redis_7001.conf
# cp /root/redis-4.0.8/redis.conf /data/redis/conf/redis_7002.conf

# vim /data/redis/conf/redis_7001.conf
bind 192.168.30.128
port 7001
daemonize yes
pidfile "/data/redis/redis_7001.pid"
logfile "/data/redis/logs/redis_7001.log"
dir "/data/redis/data/redis_7001"
masterauth 123456
requirepass 123456
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7001.conf
cluster-node-timeout 15000

# vim /data/redis/conf/redis_7002.conf
bind 192.168.30.128
port 7002
daemonize yes
pidfile "/data/redis/redis_7002.pid"
logfile "/data/redis/logs/redis_7002.log"
dir "/data/redis/data/redis_7002"
masterauth 123456
requirepass 123456
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7002.conf
cluster-node-timeout 15000

192.168.30.129

# cp /root/redis-4.0.8/redis.conf /data/redis/conf/redis_7003.conf
# cp /root/redis-4.0.8/redis.conf /data/redis/conf/redis_7004.conf

# vim /data/redis/conf/redis_7003.conf
bind 192.168.30.129
port 7003
daemonize yes
pidfile "/data/redis/redis_7003.pid"
logfile "/data/redis/logs/redis_7003.log"
dir "/data/redis/data/redis_7003"
masterauth 123456
requirepass 123456
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7003.conf
cluster-node-timeout 15000

# vim /data/redis/conf/redis_7004.conf
bind 192.168.30.129
port 7004
daemonize yes
pidfile "/data/redis/redis_7004.pid"
logfile "/data/redis/logs/redis_7004.log"
dir "/data/redis/data/redis_7004"
masterauth 123456
requirepass 123456
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7004.conf
cluster-node-timeout 15000

192.168.30.130

# cp /root/redis-4.0.8/redis.conf /data/redis/conf/redis_7005.conf
# cp /root/redis-4.0.8/redis.conf /data/redis/conf/redis_7006.conf

# vim /data/redis/conf/redis_7005.conf
bind 192.168.30.130
port 7005
daemonize yes
pidfile "/data/redis/redis_7005.pid"
logfile "/data/redis/logs/redis_7005.log"
dir "/data/redis/data/redis_7005"
masterauth 123456
requirepass 123456
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7005.conf
cluster-node-timeout 15000

# vim /data/redis/conf/redis_7006.conf
bind 192.168.30.130
port 7006
daemonize yes
pidfile "/data/redis/redis_7006.pid"
logfile "/data/redis/logs/redis_7006.log"
dir "/data/redis/data/redis_7006"
masterauth 123456
requirepass 123456
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7006.conf
cluster-node-timeout 15000

启动redis服务

192.168.30.128

# redis-server /data/redis/conf/redis_7001.conf
# tail -f /data/redis/logs/redis_7001.log
# redis-server /data/redis/conf/redis_7002.conf
# tail -f /data/redis/logs/redis_7002.log

192.168.30.129

# redis-server /data/redis/conf/redis_7003.conf
# tail -f /data/redis/logs/redis_7003.log
# redis-server /data/redis/conf/redis_7004.conf
# tail -f /data/redis/logs/redis_7004.log

192.168.30.130

# redis-server /data/redis/conf/redis_7005.conf
# tail -f /data/redis/logs/redis_7005.log
# redis-server /data/redis/conf/redis_7006.conf
# tail -f /data/redis/logs/redis_7006.log

创建cluster集群

上面我把Redis服务全部单独启动了,现在要把他们关联起来

在任意一台服务器上执行下面操作
说明一下:这台服务器上要有ruby环境

[root@k8s-master01 redis]# cp /root/redis-4.0.8/src/redis-trib.rb /data/redis/bin/
[root@k8s-master01 redis]# redis-trib.rb create --replicas 1 192.168.30.128:7001 192.168.30.128:7002 192.168.30.129:7003 192.168.30.129:7004 192.168.30.130:7005  192.168.30.130:7006  #创建

如果有以下报错
WARNING: redis-trib.rb is not longer available!You should use redis-cli instead.

很明显,这是一个过时已不再支持的方式,在Redis5.0中创建集群已经使用“redis-cli”来实现。

也可以使用下面命令来创建
./redis-cli --cluster create 192.168.30.128:7001 192.168.30.128:7002 192.168.30.129:7003 192.168.30.129:7004 192.168.30.130:7005 192.168.30.130:7006 --cluster-replicas 1

查看集群

192.168.30.128:7001> CLUSTER NODES                  #列出节点信息

6788453ee9a8d7f72b1d45a9093838efd0e501f1 192.168.30.130:7005@17005 master - 0 1557455176000 5 connected 10923-16383
277daeb8660d5273b7c3e05c263f861ed5f17b92 192.168.30.130:7006@17006 slave 4d74ec66e898bf09006dac86d4928f9fad81f373 0 1557455174000 6 connected
b4d3eb411a7355d4767c6c23b4df69fa183ef8bc 192.168.30.128:7002@17002 slave 6788453ee9a8d7f72b1d45a9093838efd0e501f1 0 1557455175000 5 connected
80c80a3f3e33872c047a8328ad579b9bea001ad8 192.168.30.128:7001@17001 myself,master - 0 1557455175000 1 connected 0-5460
b6331cbc986794237c83ed2d5c30777c1551546e 192.168.30.129:7004@17004 slave 80c80a3f3e33872c047a8328ad579b9bea001ad8 0 1557455174989 4 connected
4d74ec66e898bf09006dac86d4928f9fad81f373 192.168.30.129:7003@17003 master - 0 1557455175995 3 connected 5461-10922

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原创文章,作者:老C,如若转载,请注明出处:https://www.code404.icu/620.html

发表评论

登录后才能评论