Redis集群部署--- Cluster模式

EMQX 企业版技术支持发表于:2022年03月17日 15:01:28更新于:2022年03月17日 15:15:36

一、安装redis

可以到官网进行下载,这里我下载的是redis6.2.6版本,下载完成后解压安装:

wget https://download.redis.io/releases/redis-6.2.6.tar.gz 
tar xvf redis-6.2.6.tar.gz 
cd redis-6.2.6/src
make && make install

安装编译完成后,修改redis.conf

vi redis.conf
#搜索 daemonize no 这⾥把no 修改为yes,这样可以让redis后台运⾏
[root@ecs-3950 redis-6.2.6]# redis-server redis.conf 
[root@ecs-3950 redis-6.2.6]# redis-cli 
127.0.0.1:6379>

二、redis集群部署

  1. 集群环境

    系统版本:Centos7.8

    Redis版本:6.2.6

    Redis集群模式:Cluster模式

    三台云服务器地址:10.0.0.71、10.0.0.4、10.0.0.152

    Redis使用端口号:每台服务器两个实例,分别用5001,5002

  2. cluster集群的特点

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

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

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

  3. 集群部署

    服务器:10.0.0.71 做如下配置:

    创建集群文件夹,把redis的数据文件复制到集群文件夹001中

    [root@ecs-2ede-0001 ~]# mkdir -p cluster/{001,002}
    [root@ecs-2ede-0001 ~]# cp -r redis-6.2.6/ cluster/001
    [root@ecs-2ede-0001 cluster]# cd 001
    [root@ecs-2ede-0001 001]# ls
    00-RELEASENOTES     
    CONDUCT     COPYING     INSTALL     MANIFESTO         redis.conf         runtest-cluster         runtest-sentinel         src         TLS.mdBUGS 
    CONTRIBUTING         deps         Makefile         README.md         runtest         runtest-moduleapi         sentinel.conf         tests         utils

    修改redis.conf配置文件内主要如下参数:

    [root@ecs-2ede-0001 001]# vim redis.conf
    daemonize yes #后台启动
    port 5001 #每台服务器中两个redis实例的端口,主为5001,从为5002 
    cluster-enabled yes #配置yes开启redis-cluster
    pidfile /var/run/redis_5001.pid  #pidfile文件对应5001,5002
    bind 10.0.0.71  #登陆服务器的ip白名单,这里设为服务器的内网ip

    在把redis的数据文件复制到集群文件夹002中

    [root@ecs-2ede-0001 ~]# cp -r redis-6.2.6/ cluster/002
    [root@ecs-2ede-0001 cluster]# cd 002
    [root@ecs-2ede-0001 001]# ls
    00-RELEASENOTES     
    CONDUCT     COPYING     INSTALL     MANIFESTO         redis.conf         runtest-cluster         runtest-sentinel         src         TLS.mdBUGS 
    CONTRIBUTING         deps         Makefile         README.md         runtest         runtest-moduleapi         sentinel.conf         tests         utils

    同理如001修改redis.conf配置中如下参数:

    [root@ecs-2ede-0001 001]# vim redis.conf
    daemonize yes #后台启动
    port 5002 #每台服务器中两个redis实例的端口,主为5001,从为5002 
    cluster-enabled yes #配置yes开启redis-cluster
    pidfile /var/run/redis_5002.pid  #pidfile文件对应5001,5002
    bind 10.0.0.71  #登陆服务器的ip白名单,这里设为服务器的内网ip

    同理在另外两台服务器同样创建cluster文件夹和子文件夹001、002,将服务器10.0.0.71下cluster文件夹拷贝到另外两台服务器:

    scp -r cluster/ root@10.0.0.4:/root
    scp -r cluster/ root@10.0.0.152:/root
  4. 启动redis(这里只贴了其中一台云服务器的启动,其他两台同理)

    [root@ecs-2ede-0001 ~]# cd cluster/001
    [root@ecs-2ede-0001 001]# redis-server redis.conf
    [root@ecs-2ede-0001 001]# cd ..
    [root@ecs-2ede-0001 cluster]# cd 002
    [root@ecs-2ede-0001 002]# redis-server redis.conf
    [root@ecs-2ede-0001 002]# netstat -tunlp|grep redis #查看服务是否正常启动

    image.png

  5. 创建redis集群

    [root@ecs-2ede-0001 ~]# redis-cli --cluster create 10.0.0.71:5001 10.0.0.71:5002 10.0.0.4:5001 10.0.0.4:5002 10.0.0.152:5001 10.0.0.152:5002 --cluster-replicas 1

    image.png

    中途需要输入yes到下一步,出现下图则集群创建成功

    image.png

    连接集群并查看集群信息:

    [root@ecs-2ede-0001 cluster]# redis-cli -c -h 10.0.0.71 -p 5001
    10.0.0.71:5001> cluster info

    image.png

    查看集群节点:

    10.0.0.71:5001> cluster nodes

    image.png

    测试存取值,客户端连接集群redis-cli需要带上 -c,才能在节点间跳转

    10.0.0.71:5001> Keys *
    (empty array)
    10.0.0.71:5001> set name test1
    -> Redirected to slot [5798] located at 10.0.0.4:5001
    OK
    10.0.0.4:5001> get name
    "test1"

    根据redis-cluster的key值分配,name应该分配到节点10.0.0.4:5001[5461-10922]上,上面显示redis cluster自动从10.0.0.71:5001跳转到了10.0.0.4:5001节点。

至此集群已经完成

    您需要登录后才可以回复