1. 引言
从3.0版本开始,redis具备了集群功能,实现了分布式、容错、去中心化等特性,在生产环境中对于保证数据一致性和安全性、提高系统响应能力都有着很必要的意义。 本文我们就来介绍 redis 集群的三种搭建模式和搭建方法。
目前Redis 7.0对其管理的几乎每个子系统都进行了多项改进,包括内存、计算、网络和存储
详见:Releases · redis/redis · GitHub
1.1. redis 集群的特性
redis 集群的目标是线性可扩展性和保证最终一致性,因此,redis 集群不存在中心节点或代理节点。 同时,一致性的保证是建立在一部分容错性牺牲的基础上的,系统通过主从节点的模式在保证对节点失效具有有限抵抗力的前提下,尽可能保证数据的一致性。 redis 集群实现了节点的自动发现、master 的自动选举、热分片、ASK 转向和 MOVED 转向等机制。 可以参考官方文档: https://redis.io/topics/cluster-tutorial。
1.2. 集群端口
无论是哪种模式的 redis 集群,都需要指定服务端口(默认为 6379),但 redis 实际上是通过服务端口 + 10000 的端口来进行数据同步的。 因此,如果集群无法建立或同步无法进行,除了需要考虑服务端口是否连通以外,还需要检测同步端口的可用性
2. 集群
2.1 主从模式集群
1. 概念
主从复制模型中,有多个redis节点。 其中,有且仅有一个为主节点Master。从节点Slave可以有多个。只要网络连接正常,Master会一直将自己的数据更新同步给Slaves,保持主从同步 。
优点:读写分离,将Redis读操作分摊到多个节点,大大提高redis服务器的并发量
缺点:不支持容错,master宕机后没有可写节点,可能会数据丢失,较难支持扩容
2.3.1 准备服务器(最少俩台,都安装redis)192.168.10.10 master 192.168.10.11 slave192.168.10.13 slave2.3.2 修改redis配置文件master redis.confbind 192.168.10.10 #绑定地址port 6379daemonize yes #后台启动protected-mode yes #打开保护模式appendonly yes #开启AOF持久化存储requirepass 123 #启用密码认证pidfile /usr/local/redis-6379/logs/redis-6379.pidlogfile /usr/local/redis-6379/logs/redis.logdirmasterauto 123slave1 redis.confbind 192.168.10.11 #绑定地址port 6379daemonize yes #后台启动protected-mode yes #打开保护模式appendonly yes #开启AOF持久化存储requirepass 123 #启用密码认证pidfile /usr/local/redis-6379/logs/redis-6379.pidlogfile /usr/local/redis-6379/logs/redis.logdirmasterauto 123 #master节点密码replicaof 192.168.10.10 6379 #定义master信息slave2 redis.confbind 192.168.10.13 #绑定地址port 6379daemonize yes #后台启动protected-mode yes #打开保护模式appendonly yes #开启AOF持久化存储requirepass 123 #启用密码认证pidfile /usr/local/redis-6379/logs/redis-6379.pidlogfile /usr/local/redis-6379/logs/redis.logdirmasterauto 123 #master节点密码replicaof 192.168.50.10 6379 #定义master信息
2.2 Sentinel(哨兵集群)
2.1 主从模式的缺陷
当主节点宕机了,整个集群就没有可写的节点了。
由于从节点上备份了主节点的所有数据,那在主节点宕机的情况下,如果能够将从节点变成一个主节点,就可以解决这个问题了。这就是Sentinel哨兵的作用。
2.2 哨兵的任务
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
2.2.1 监控(Monitoring)
1.Sentinel可以监控任意多个Master和该Master下的Slaves。(即多个主从模式)
2.同一个哨兵下的、不同主从模型,彼此之间相互独立。
3.Sentinel会不断检查Master和Slaves是否正常。
2.3 配置Sentinel
1.在/usr/local目录下,创建/redis/sentinels/目录
mkdir -p sentinels
2.在/sentinels目录下,以次创建s1、s2、s3三个子目录中
mkdir s1 s2 s3
3.依次拷贝redis解压目录下的sentinel.conf文件,到这三个子目录中
cp -v /opt/soft/redis-3.2.9/sentinel.conf ./s1cp -v /opt/soft/redis-3.2.9/sentinel.conf ./s2cp -v /opt/soft/redis-3.2.9/sentinel.conf ./s3 4.依次修改s1、s2、s3子目录中的sentinel.conf文件,修改端口,并指定要监控的主节点。(从节点不需要指定,sentinel会自动识别)
3.Redis-cluster集群
3.1 哨兵模式的缺陷
在哨兵模式中,仍然只有一个Master节点。当并发写请求较大时,哨兵模式并不能缓解写压力。只有主节点才具有写能力,那如果在一个集群中,能够配置多个主节点,就可以缓解写压力了,这就是redis-cluster集群模式。
3.2 Redis-cluster集群概念
1.由多个Redis服务器组成的分布式网络服务集群;
2.集群之中有多个Master主节点,每一个主节点都可读可写;
3.节点之间会互相通信,两两相连;
4.Redis集群无中心节点。
3.3 集群配置(Scaling with Redis Cluster | Redis)
1、Redis集群官方建议最好使用6个节点
本次搭建在一台主机上创建伪分布式集群,不同的端口表示不同的redis节点,如下:
主节点:192.168.58.1:7001 192.168.58.1:7002 192.168.58.1:7003
从节点:192.168.58.1:7004 192.168.58.1:7005 192.168.58.1:7006
2、在/usr/local/redis下创建redis-cluster目录,在其下创建7001、7002......7006目录,如下:
mkdir -p redis/redis-clustermkdir -v 7001 7002 7003 7004 7005 7006
3、将redis解压路径下的配置文件redis.conf,依次拷贝到每个700X目录内,并修改每个700X目录下的redis.conf配置文件:
必选配置:
port 700X
bind ip(当前主机ip:192.168.xxx.xxx)
cluster-enabled yes (启动redis-cluster集群模式)
建议配置:
daemonized yes
logfile /usr/local/redis/redis-cluster/700X/node.log
4、启动每个结点redis服务
依次以700X下的redis.conf,启动redis节点。(必须指定redis.conf文件)
cd 700x && redis-server ./redis.conf
5 执行创建集群命令
进入到redis源码存放目录redis/redis-4.10.3/src下,执行redis-trib.rb,此脚本是ruby脚本,它依赖ruby环境。
./redis-trib.rb create --replicas 1 192.168.58.1:7001 192.168.58.1:7002 192.168.58.1:7003 192.168.58.1:7004 192.168.58.1:7005 192.168.58.1:7006
完成集群搭建