Redis 集群部署
admin
2023-01-27 16:37:46
0

Redis Cluster 部署文档

updated: 09/05/2019

1 说明

Redis Cluster 的主要特点如下:

  • 无中心结构,客户端与 redis 节点直连,不需要中间代理层
  • 节点冗余设计,slave->master 选举,集群容错
  • 数据分片存储,且支持在线分片
  • ASK / MOVED 转向机制,可通过任意节点,读写不属于本节点的数据

本文以部署一个可实现高可用的最小集群为例,集群部署在三台主机上,包含 M1、M2、M3、S1、S2、S3 六个节点。

M1、M2、M3 为主节点对应 Redis 实例:7000,7001,7002
S1、S2、S3 为从节点对应 Redis 实例:7003,7004,7005

主从节点交叉连接,对应关系为:

M1 -> S2
M2 -> S3
M3 -> S1

2 环境准备

系统环境

主机 IP 节点-角色-实例(端口)
redis1 192.168.0.100 M1-master-7000、S1-slave-7003
redis2 192.168.0.101 M2-master-7001、S2-slave-7004
redis3 192.168.0.102 M3-master-7002、S3-slave-7005

3 安装软件

分别在三台主机上编译安装 redis 5.0.4 版本。

安装完毕建议将 redis bin 目录加入 PATH 环境变量

4 配置集群

参考步骤 4.1 - 4.3,分别在三台主机上进行 Redis 集群配置。

4.1 创建集群目录

创建集群各节点配置和数据目录。

mkdir -p /data/redis-cluster/{7000,7001}

以 redis1 为例,目录结构如下:

/data/redis-cluster/
├── 7000
│   ├── redis.conf  # redis 实例配置文件
│   └── nodes.conf  # redis 集群节点的配置文件(由集群自动创建)
└── 7003
│   ├── redis.conf  # redis 实例配置文件
│   └── nodes.conf  # redis 集群节点的配置文件(由集群自动创建)
4.2 创建实例配置文件

分别复制 redis 源码目录下的 redis.conf 至节点配置和数据目录。

编辑 redis 实例配置文件中的各项配置。redis 默认未开启集群功能,需修改下面几个配置开启:

port 7000
bind 0.0.0.0                    # 允许其他主机连接
dir /data/redis-cluster/7000    # 节点实例配置目录
cluster-enabled yes             # 开启集群
cluster-config-file nodes.conf  # 集群配置文件
cluster-node-timeout 5000       # 超时时间
appendonly yes                  # 并开启AOF模式

请根据生产环境性能需求和实际部署情况修改相关配置项,注意每个节点的实例配置文件中端口不同。

4.3 防火墙设置

根据情况修改服务器防火墙配置,允许 Redis 主机互相连接 7000-7005, 17000-17005 端口,允许所有业务服务器连接 Redis 服务器的 7000-7005 端口。

5 启动集群

5.1 启动实例

分别在三台主机上启动全部 6 个 redis 节点实例,启动时指定配置文件为各自节点配置目录中的 redis.conf。

5.2 启动集群

在任意一台 redis 节点主机上执行如下命令启动集群:

redis-cli --cluster create \
    --cluster-replicas 1 \
    192.168.0.100:7000 \
    192.168.0.100:7001 \
    192.168.0.101:7002 \
    192.168.0.101:7003 \
    192.168.0.102:7004 \
    192.168.0.102:7005

注意修改命令中的 IP 为 redis 节点实例端口对应的真实主机 IP。

根据提示输入yes,出现下列信息则表示集群创建成功。

[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

6 测试

查看集群信息

在任意一个 redis 节点的主机上执行以下命令:

# redis-cli -c -h 192.168.0.100 -p 7000 cluster info

应输出类型以下信息:

cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:101
cluster_stats_messages_pong_sent:98
cluster_stats_messages_sent:199
cluster_stats_messages_ping_received:93
cluster_stats_messages_pong_received:101
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:199

列出集群节点

在任意一个 redis 节点的主机上执行以下命令,列出集群当前已知的所有节点(node),以及这些节点的相关信息。

# redis-cli -c -h 192.168.0.100 -p 7000 cluster nodes

输出类似以下信息:

50725018cd7f5f20214b0ed462975258397dfe29 192.168.0.102:7005@17005 slave 39e335386bb48f012f433287ed853174009114e5 0 1554876136000 6 connected
8874f69c2f5747cce3a02387167a00cdaba43d3c 192.168.0.100:7001@17001 master - 0 1554876137380 2 connected 5461-10922
c9cb48efbc1a83098cb730a5295402d9cdb343c2 192.168.0.101:7003@17003 slave 917301c74a9ed1ed52918b8e4c7f88de9743c361 0 1554876136375 4 connected
5633e918818033552b1adc089d99fbe9bcf36589 192.168.0.102:7004@17004 slave 8874f69c2f5747cce3a02387167a00cdaba43d3c 0 1554876136072 5 connected
917301c74a9ed1ed52918b8e4c7f88de9743c361 192.168.0.100:7000@17000 myself,master - 0 1554876136000 1 connected 0-5460
39e335386bb48f012f433287ed853174009114e5 192.168.0.101:7002@17002 master - 0 1554876136878 3 connected 10923-16383

查看集群数据槽分配

在任意一个 redis 节点的主机上执行以下命令,显示集群当前所有数据槽的分配情况。

# redis-cli -c -h 192.168.0.100 -p 7000 cluster slots

输出类似以下信息:

1) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 7001
   4) 1) "127.0.0.1"
      2) (integer) 7004
2) 1) (integer) 0
   2) (integer) 5460
   3) 1) "127.0.0.1"
      2) (integer) 7000
   4) 1) "127.0.0.1"
      2) (integer) 7003
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 7002
   4) 1) "127.0.0.1"
      2) (integer) 7005

相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...