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

Redis集群搭建里头自定义端口那些事儿,怎么弄才不出错

说到在搭建Redis集群时自定义端口,这事儿说简单也简单,但要是没注意几个关键点,那真是会掉进坑里爬半天,咱们就按着实际操作顺序,一步步捋清楚,确保你弄的时候不出错。

为啥要自定义端口? 最常见的情况就是你在一台机器上搞伪集群,也就是用多个Redis实例来模拟一个集群,默认端口是6379,你总不能开六个实例都用同一个端口吧?那肯定打起来,你得给每个实例分配一个独一无二的端口号,比如6380、6381一直到6385,另一种情况是,可能你公司有端口规范,或者6379端口已经被别的服务占用了,这时候也得改。

第一步:规划是重中之重,别上来就瞎改 动手之前,拿张纸或者开个文档,把规划写清楚,这是最笨但最不容易出错的方法,你要明确:

Redis集群搭建里头自定义端口那些事儿,怎么弄才不出错

  1. 集群规模: 你打算开几个主节点,几个从节点?通常最小规模是3主3从。
  2. 端口分配: 给每个节点分配一个端口号,主节点用6380、6381、6382,对应的从节点用6383、6384、6385,记下来,别搞混了。
  3. 配置文件: 每个节点都必须有自己独立的配置文件,最好按端口号命名,redis.6380.conf, redis.6381.conf,这样一目了然,管理起来也方便,千万别用一个配置文件去启动多个实例,那是绝对要出问题的。

第二步:修改配置文件,细节决定成败 现在开始修改每个节点的配置文件,关键参数就这几个,一个都不能错:

  1. port: 这个最简单,就是把你规划好的端口号写进去。port 6380
  2. daemonize: 如果想让它后台运行,设为 yes
  3. pidfile: 每个实例的进程ID文件也要独立,改成和端口关联的,pidfile /var/run/redis_6380.pid,不然的话,后启动的实例会把先启动的pid文件覆盖掉,导致你管理进程的时候找不对对象。
  4. logfile: 日志文件也要分开。logfile "/path/to/redis_6380.log",这样出问题了,你才知道去哪个文件里找日志。
  5. dir: 数据目录,你可以让所有节点共用一个大目录,但更清晰的做法是每个节点有自己的子目录,dir /redis/data/6380,这样数据不会混在一起,备份和迁移都清楚。
  6. cluster-enabled: 这个必须设为 yes,不然它就是个单机实例,不参与集群。
  7. cluster-config-file: 这是集群自动生成的配置文件,非常重要。这里是个大坑! 你必须为每个节点指定不同的文件名,nodes-6380.conf,如果你不设置,或者所有节点都写成一样的,那么集群启动时,不同节点的集群配置信息会互相覆盖,导致集群状态彻底混乱,永远也创建不成功。
  8. bind: 如果你需要远程连接,记得把默认的127.0.0.1改成服务器IP或者0.0.0.0,但要注意安全。
  9. requirepassmasterauth:如果你设置了密码,不仅要配置 requirepass,还得配置 masterauth,并且确保集群中所有节点的这两个密码完全一致,因为主从节点之间也要通信,密码不对,主从复制就失败了。

第三步:启动节点和创建集群,别手滑

Redis集群搭建里头自定义端口那些事儿,怎么弄才不出错

  1. 启动: 用各自的配置文件,一个一个地把节点启动起来。
    redis-server /path/to/redis.6380.conf
    redis-server /path/to/redis.6381.conf
    ... # 以此类推

    启动后,马上用 ps -ef | grep redis 检查一下,是不是每个端口对应的进程都起来了,再去看看每个节点的日志文件,有没有报错信息,这时候发现问题,解决起来最容易。

  2. 创建集群: 节点都正常启动后,用Redis官方给的 redis-cli 命令创建集群,注意,这里要使用你自定义的端口号
    redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1

    这个命令里,你把规划好的所有节点IP和端口按顺序列出来,--cluster-replicas 1 表示每个主节点带一个从节点,命令会给出一个主从分配方案,你输入 yes 确认就行了。 特别注意: 如果你设置了密码,命令需要加上 -a yourpassword 参数,redis-cli -a yourpassword --cluster create ...

    Redis集群搭建里头自定义端口那些事儿,怎么弄才不出错

第四步:验证和排查,做完不等于成功 集群创建命令跑完,它会告诉你 [OK] All 16384 slots covered,这还不算完,你得亲自验证一下。

  1. 连接测试:redis-cli 随便连一个节点(记住用 -c 参数,表示集群模式,它会自动重定向)。
    redis-cli -c -p 6380

    set 几个 key,get 几个 key,看看能不能正常跳转和读写。

  2. 检查集群状态:
    redis-cli -p 6380 cluster nodes

    这个命令会列出集群所有节点的信息,你要仔细看:是不是所有节点都 connected 了?主从关系对不对?哈希槽(slots)是不是已经全部分配好了没有遗漏?

最容易出错的总结:

  1. 配置文件混用: 最大的错误就是图省事,用一个配置文件启动多个实例,务必每个实例独立配置。
  2. cluster-config-file 重复: 这是隐形杀手,所有节点如果指向同一个集群配置文件,会导致集群信息损坏。
  3. 密码配置不全: 只设了 requirepass 忘了 masterauth,导致主从同步失败。
  4. 防火墙没开端口: 如果你用的是服务器IP而不是127.0.0.1,别忘了服务器防火墙要开放你自定义的这一系列端口(比如6380-6385),以及集群总线端口(自定义端口+10000,如16380),总线端口不通,节点间就无法通信,集群也就废了。
  5. 创建集群时命令写错端口: 手一抖,命令里写错一个端口号,集群就少一个节点,创建失败。

核心就是规划清晰、配置独立、仔细验证,把这些点都注意到了,自定义端口搭建Redis集群就是个按部就班的活儿,基本不会出啥大错。