Redis集群实战,精打细算构建高可用缓存,让数据流动如诗
使用官方redis-cli工具,运行redis-cli --cluster create 192.168.1.10:7001 192.168.1.10:7002 192.168.1.11:7001 192.168.1.11:7002 192.168.1.12:7001 192.168.1.12:7002 --cluster-replicas 1,就能快速创建一个三主三从的Redis集群,实现数据自动分片和高可用。
为什么要搭建Redis集群
单机的Redis缓存,虽然简单好用,但藏着两个大麻烦。一是容量有天花板,一台机器的内存总是有限的;二是怕出故障,万一这台机器坏了,整个缓存服务就全停了,所有依赖它的应用都会受影响。而Redis集群就是为了解决这两个问题而生的。它把多台机器的Redis实例组织成一个整体,数据被分散存储在不同的实例上,突破了单机内存的限制。同时,每份数据还会有副本存放在其他机器上,这样即使某台机器突然挂了,因为有副本在,数据也不会丢失,服务还能继续提供,保证了系统的高可用性。简单说,集群让你用多台普通配置的机器,构建出一个容量大、又特别可靠的服务。
动手前的准备工作
在开始敲命令之前,有几件小事得先准备好。首先,你需要至少三台物理机或者虚拟机,条件有限的话,用三台云服务器也行。为什么至少要三台呢?这是为了保证集群选举能正常进行,如果机器太少,出故障时就可能选不出新的主节点。然后,在每台机器上,都要安装好Redis,版本建议用5.0或以上。接着,你需要规划好端口。通常我们会让每台机器运行两个Redis实例,一个当主节点,一个当它的从节点。比如,你可以规定用7001到7006这六个端口。最后,别忘记修改每台机器上的Redis配置文件。主要改动这几处:把`bind`改成`0.0.0.0`或者机器的内网IP,让集群节点能互相通信;设置`port`为你规划的端口号,比如7001;把`cluster-enabled`设置为`yes`,这是启动集群模式的关键;把`cluster-config-file`和`cluster-node-timeout`也按需配置好。
一步步构建集群
配置搞定后,就可以正式开工了。第一步,在每台机器上,根据你修改好的配置文件,分别启动那两个Redis实例。你可以用`redis-server /path/to/redis.conf`这样的命令来启动。等所有六个实例都顺利跑起来之后,最激动人心的时刻就到了。我们使用Redis自带的集群管理工具。在其中任意一台机器上,执行创建集群的命令。命令看起来有点长,但结构很清晰:`redis-cli --cluster create 主机1IP:端口1 主机2IP:端口2 ... 主机6IP:端口6 --cluster-replicas 1`。这里的`--cluster-replicas 1`意思是每个主节点搭配一个从节点。执行命令后,工具会自动帮你分配哪个实例是主,哪个是从,并把它们组成一个集群。过程中它会提示你生成的分片方案,你输入`yes`确认就行了。创建完成后,你可以用`redis-cli -c -p 任意一个端口`连接上集群,再用`cluster nodes`命令看看所有节点的状态,检查一下主从关系是否正确。
让集群更好地工作
集群建好了,不代表就可以撒手不管了。想让数据像诗一样顺畅流动,还得做点优化。一个是连接池的使用。你的应用程序在连接Redis集群时,应该使用支持集群模式的客户端连接池,而不是直连单个节点。好的客户端能自动感知集群节点的变化,比如主节点挂了,从节点顶上来时,它能自动把请求转向新的主节点,这对应用来说是透明的,非常省心。另一个是监控和报警。你得知道集群是不是健康。可以定期用`cluster info`命令查看集群状态,或者更省事的办法是配合一些监控工具,对内存使用率、连接数、是否发生主从切换这些关键指标设置报警。这样一出问题,你就能第一时间知道。
FAQ
问:如果我想给已经运行的Redis集群增加新的节点,该怎么办?答:扩容是常见需求。你可以先用`redis-cli --cluster add-node`命令把新的空节点加入集群。但注意,这并没有分配数据槽给它。你需要接着运行`redis-cli --cluster reshard`命令,从现有的主节点中迁移一部分数据槽到新节点上。整个过程可以在线进行,不影响集群对外服务。
问:我的应用程序代码需要做很大改动才能用集群吗?答:基本不需要。只要你的应用程序使用的是较新版本的、支持集群模式的Redis客户端(比如Java的Jedis、Lettuce,Python的redis-py等),并且初始化客户端时传入了集群的所有节点地址,客户端就会自动处理数据路由、重定向这些复杂事情。你的业务代码像操作单机Redis一样去读写数据就行,几乎零改动。
引用来源:本文中关于Redis集群搭建的命令和核心步骤,参考了Redis官方文档(https://redis.io/docs/management/scaling/)中关于集群创建与管理的内容,并结合了常见的运维实践经验进行阐述。