当前位置:首页 > 问答 > 正文

用三台机器搞个redis集群,怎么让它们一起跑起来的那些事儿

行,那咱们就直接开整,这事儿说白了,就是你有三台机器(不管是实体的服务器还是云上的虚拟机),想在上面搭一个Redis集群,让它们能协同工作,数据能分开放,就算有一台机器趴窝了,整个系统还能接着转,下面我就把这事儿从头到尾捋一遍,尽量不用那些让人头疼的专业词儿。

第一步:准备家伙事儿

你手上得有三台能互相连通的机器,假设它们的IP地址分别是192.168.1.101、192.168.1.102、192.168.1.103,你得确保这三台机器之间网络是通的,用ping命令能互相ping通是最基本的,每台机器上都得安装好Redis,而且版本最好一样,免得闹别扭,安装Redis的过程就不细说了,无非就是下载、编译、安装那套流程。(来源:基于Redis官方文档的集群教程基本前提)

第二步:配置文件动动手

光装上Redis还不行,默认的Redis是个单机版,要让它变成集群的一份子,得修改它的配置文件(通常是redis.conf),有几个关键的地方你得改:

  1. port:如果每台机器只跑一个Redis实例,你可以用默认的6379端口,但有时候你可能想在一台机器上跑多个实例,那端口就得错开,比如6379、6380。
  2. cluster-enabled yes:这一行非常重要!必须把注释去掉,并把no改成yes,这就等于告诉Redis:“喂,醒醒,你要以集群模式启动了。”
  3. cluster-config-file nodes-6379.conf:这个是集群自动生成的配置文件,用来记录集群的状态信息,比如有哪些节点、主从关系啥的,你指定个文件名和路径就行,Redis自己会管理它。
  4. cluster-node-timeout 15000:节点超时时间,单位是毫秒,如果某个节点超过这个时间没反应,集群就认为它可能挂掉了,会开始进行故障转移,这个值可以根据网络情况调整。
  5. appendonly yes:建议开启,做数据持久化,安全第一。

你需要在每台计划运行Redis实例的机器上,都准备好这么一份修改过的配置文件,如果一台机器上要跑多个实例,那就得准备多份配置文件,每份对应不同的端口号。(来源:Redis配置文件redis.conf中的相关参数说明)

第三步:启动所有Redis实例

配置好了之后,就在每台机器上,用你修改过的配置文件,把Redis服务启动起来,命令大概长这样: redis-server /path/to/your/redis.conf 这时候,你启动的每个Redis实例还都是“光杆司令”,它们自己玩自己的,彼此之间还不认识,还没形成一个集群。(来源:Redis服务器启动命令)

第四步:让它们“拜把子”,组建集群

现在是关键一步,让这些独立的Redis实例互相认识,组成一个真正的集群,Redis从5.0版本开始,提供了一个特别方便的命令行工具叫redis-cli,里面带了集群管理功能。

你只需要在一台机器上,执行一条命令就能搞定(假设每台机器只跑一个实例,都在6379端口): redis-cli --cluster create 192.168.1.101:6379 192.168.1.102:6379 192.168.1.103:6379 --cluster-replicas 0

简单解释一下:

  • --cluster create:告诉工具要创建集群。
  • 后面跟着三个节点的地址和端口。
  • --cluster-replicas 0:这个参数很关键,它指定每个主节点有几个从节点(副本),这里设为0,意味着我们这三位都是“主”节点,没有设置“从”节点,在三台机器的情况下,如果你想要高可用(即一台挂了,它的数据有备份),通常应该设置成--cluster-replicas 1,但这要求你总共有6个节点(3主3从),我们现在先搞最简单的,三个主节点,所以副本数设为0。

执行这个命令后,redis-cli会给你提出一个它规划好的分片方案,就是把所有的数据槽(Redis集群有16384个槽)平均分给这三个节点,你一看没问题,输入yes确认,工具就会开始配置集群,让各个节点彼此握手、分配数据槽,等它跑完,集群就基本建成了。(来源:redis-cli --cluster help 命令的输出及创建集群的实操过程)

第五步:验证一下

集群建好了,得试试它灵不灵,你可以用redis-cli连接上任意一个节点,但要记得加上-c参数,这个参数代表以集群模式连接,这样客户端才会在需要的时候自动重定向到正确的节点。

redis-cli -c -h 192.168.1.101 -p 6379

连上去之后:

  1. 可以执行cluster info命令看看集群的整体状态,比如是否cluster_state:ok
  2. 执行cluster nodes命令可以查看集群里所有节点的详细信息,包括它们的角色(主还是从)、负责的数据槽范围等等。
  3. 试着存几个值,比如set key1 value1,如果这个key1根据计算应该存放在另外的节点上,你会看到客户端自动跳转过去的信息,这就说明集群的分片功能正常了。(来源:Redis集群的常用诊断命令)

唠点关键的

  • 三节点无副本的风险:像上面这样搞,只有三个主节点,没有从节点,意味着任何一台机器宕机,它负责的那部分数据就访问不了了,整个集群也就不可用了,所以这只是一个最基础的演示结构,真要追求高可用,你得准备6台机器(或者3台机器每台跑两个Redis实例),做成3主3从的模式。
  • 数据分片:Redis集群的核心就是把数据分到不同的节点上,它不是根据key的名字简单分,而是对key进行一种哈希计算,然后映射到那16384个槽里,你上面执行创建命令时,工具已经帮你把槽平均分好了。
  • 运维管理:集群跑起来后,日常可能需要增删节点、平衡数据槽分布、监控状态等,这些都可以用redis-cli --cluster命令家族里的其他命令来完成,比如add-node, reshard等。

好了,以上就是用三台机器让Redis集群跑起来的大致过程和要点,说白了就是:装好软件、改对配置、启动服务、一键组网、最后验收,希望能帮到你。

用三台机器搞个redis集群,怎么让它们一起跑起来的那些事儿