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

怎么在不同主机上搭建Redis集群,步骤和注意点分享

要搭建一个跨主机的Redis集群,我们指的是Redis官方提供的分布式解决方案——Redis Cluster,它允许数据自动在多个Redis节点间分片,并提供一定程度的故障转移能力,从而实现高可用,假设你有三台或以上的物理机或云服务器,每台服务器上计划运行至少一个Redis实例(为了高可用,通常每台服务器会运行两个实例,主从配对)。

第一步:环境准备与Redis安装

  1. 准备主机:确保你拥有至少三台独立的主机(例如IP地址为192.168.1.10, 192.168.1.11, 192.168.1.12),如果只有三台,你可以构建一个包含三个主节点和三个从节点的最小集群,六台主机(三主三从)是更理想的配置。
  2. 安装Redis:在每一台主机上,安装相同版本的Redis服务器软件,建议使用5.0或以上版本,因为早期版本的工具和稳定性可能有所不同,你可以通过操作系统的包管理器(如apt-get install redis-server for Ubuntu或yum install redis for CentOS)安装,或者从Redis.io官网下载源码编译安装。
  3. 防火墙配置:这是跨主机通信的关键,Redis集群节点之间需要两个端口才能正常工作:
    • 服务端口:默认为6379,用于客户端连接和接收命令。
    • 集群总线端口:在服务端口的基础上加10000,即16379,这个端口用于节点间的心跳检测、故障转移、配置更新等内部通信。
    • 注意点:你必须在所有主机的防火墙(如iptables, firewalld)或云服务商的安全组规则中,同时开放这两个端口,允许其他集群节点的IP地址访问,只开放6379端口会导致集群无法建立。

第二步:配置每个Redis实例

在每台主机上,你都需要为计划启动的每个Redis实例创建一个配置文件,在第一台主机(192.168.1.10)上,你可以创建配置文件 /etc/redis/redis-cluster-6379.conf

配置文件中最关键的几个参数如下(根据你的实际IP和路径修改):

# 绑定本机IP地址,0.0.0.0表示允许所有连接,但生产环境建议绑定内网IP
bind 0.0.0.0
# 服务端口
port 6379
# 启用集群模式,这是核心
cluster-enabled yes
# 集群配置文件的路径,Redis会自动生成和维护这个文件,你只需指定路径和文件名
cluster-config-file nodes-6379.conf
# 节点超时时间(毫秒),超过此时长认为节点故障
cluster-node-timeout 15000
# 开启AOF持久化,建议开启以提高数据安全性
appendonly yes
# 如果设置了密码,所有节点的密码必须一致,且需要以下两行
# requirepass your_secure_password
# masterauth your_secure_password
# 守护进程方式运行
daemonize yes
# 日志文件路径
logfile /var/log/redis/redis-server-6379.log

重要注意点

  • cluster-config-file 这个文件不要手动编辑,Redis会自己管理。
  • 如果设置了密码(requirepass),那么masterauth也必须设置成相同的密码,这样从节点才能正确验证并连接到主节点进行复制。

第三步:启动所有Redis实例

在所有主机上,使用各自的配置文件启动Redis服务。

redis-server /etc/redis/redis-cluster-6379.conf

检查日志文件,确认没有错误,并且看到类似“Ready to accept connections”和“Cluster state changed: ok”相关的信息。

第四步:创建集群

现在所有节点都运行起来了,但它们还是相互独立的,你需要使用Redis自带的命令行工具 redis-cli 将它们组装成一个集群。

选择其中一台主机执行以下命令,假设我们使用三台主机,每台一个实例,构建三主三从的集群需要六台主机,但最小化测试可以用三主节点(无副本)。

  • 如果无密码,创建三主节点集群的命令如下(根据Redis.io文档中的方法):

    redis-cli --cluster create 192.168.1.10:6379 192.168.1.11:6379 192.168.1.12:6379 --cluster-replicas 0

    这里的 --cluster-replicas 0 表示每个主节点不配置从节点,如果要配置一主一从,你有6个节点,则参数应为 --cluster-replicas 1,工具会自动分配主从关系。

  • 如果有密码,需要加上 -a 参数:

    redis-cli -a your_secure_password --cluster create 192.168.1.10:6379 192.168.1.11:6379 192.168.1.12:6379 --cluster-replicas 0

执行命令后,工具会给出一个它规划好的主从分配方案,你输入yes确认,集群创建过程就会开始,工具会自动进行数据分片(分配哈希槽)和主从同步。

第五步:验证集群状态

集群创建完成后,连接到任意一个节点进行验证。

# 连接至某个节点
redis-cli -c -h 192.168.1.10 -p 6379
# 如果有密码,需要认证
# auth your_secure_password
# 查看集群信息
cluster info
# 查看集群节点列表和关系
cluster nodes

cluster info的输出中,检查cluster_state:ok,在cluster nodes的输出中,你会看到所有节点的列表,每个节点前面有一个唯一的ID,以及它们扮演的角色(masterslave)和持有的哈希槽范围。

核心注意点总结

  1. 网络互通是前提:务必确保所有节点的服务端口和集群总线端口能相互通信。
  2. 版本一致性:所有节点应使用相同的主要Redis版本。
  3. 配置准确性:每个实例的配置文件中的集群相关参数要正确,特别是绑定地址和端口。
  4. 密码一致性:如果启用认证,所有节点的requirepassmasterauth必须完全相同。
  5. 节点数量:至少需要三个主节点才能形成集群(因为需要大多数投票来选举),为了高可用,每个主节点至少配一个从节点,因此建议至少6个节点。
  6. 客户端支持:你的应用程序需要使用支持Redis Cluster的客户端库,客户端库能够识别重定向命令(-MOVED-ASK)并自动路由到正确的节点。
  7. 数据备份与监控:集群不等于备份,你仍然需要制定定期备份数据的策略,搭建监控系统来关注集群的状态、内存使用率和节点健康状况。

通过以上步骤,你应该能够成功在不同主机上搭建起一个可用的Redis集群,实际操作中,请根据你的网络环境和具体需求调整IP地址、端口和配置参数。

怎么在不同主机上搭建Redis集群,步骤和注意点分享