一、Redis集群三种方式的优缺点
Redis集群主要有三种方式,分别是:一主一从、一主多从、三主三从。它们各自有优缺点:
一主一从:利用主从复制来实现数据备份,当主节点宕机时,从节点可以顶替主节点成为主节点,实现高可用性。这种方式的优点是部署简单,不需要考虑负载均衡、数据拆分等问题。缺点则是数据容灾能力有限,扩展性不够。
一主多从:一个主节点可以配多个从节点,实现读写分离和负载均衡,即主节点可读写,从节点只读。这种方式的优点是可扩展性较好,可根据需求调整从节点数量以满足负载需求;能够有效利用多台机器的计算资源,提高系统整体吞吐量;同时主节点出现故障时,从节点之间可以选举出一台作为主节点,实现高可用性。缺点是容灾能力相对一主一从模式也有限,而且主节点过多时容易导致节点间通信负担加重。
三主三从:与一主多从类似,三个主节点通过Paxos算法协商确定,主节点之间进行复制,从节点对主节点进行读写分离。三主三从的优点是数据容灾能力强,可扩展性较好,同时也能够容忍多个主节点之间出现故障,具备高可用性。
二、Redis集群三种方式的配置
Redis集群的三种方式都需要在配置文件redis.conf中进行相应的配置。
1、一主一从配置
# Master节点配置 port 6379 daemonize yes bind 127.0.0.1 pidfile /var/run/redis_6379.pid loglevel notice logfile /var/log/redis/redis_6379.log dir /var/lib/redis/6379 requirepass xyqzyh5678 # Slave节点配置 slaveof 127.0.0.1 6379 port 6380 daemonize yes bind 127.0.0.1 pidfile /var/run/redis_6380.pid loglevel notice logfile /var/log/redis/redis_6380.log dir /var/lib/redis/6380
2、一主多从配置
# Master节点配置 port 6379 daemonize yes bind 127.0.0.1 pidfile /var/run/redis_6379.pid loglevel notice logfile /var/log/redis/redis_6379.log dir /var/lib/redis/6379 requirepass xyqzyh5678 # Slave节点配置 slaveof 127.0.0.1 6379 port 6380 daemonize yes bind 127.0.0.1 pidfile /var/run/redis_6380.pid loglevel notice logfile /var/log/redis/redis_6380.log dir /var/lib/redis/6380 slaveof 127.0.0.1 6379 port 6381 daemonize yes bind 127.0.0.1 pidfile /var/run/redis_6381.pid loglevel notice logfile /var/log/redis/redis_6381.log dir /var/lib/redis/6381
3、三主三从配置
# 节点1的配置 port 7001 daemonize yes pidfile /var/run/redis_7001.pid cluster-enabled yes cluster-config-file /etc/redis/7001.conf cluster-node-timeout 15000 appendonly yes # 节点2的配置 port 7002 daemonize yes pidfile /var/run/redis_7002.pid cluster-enabled yes cluster-config-file /etc/redis/7002.conf cluster-node-timeout 15000 appendonly yes # 节点3的配置 port 7003 daemonize yes pidfile /var/run/redis_7003.pid cluster-enabled yes cluster-config-file /etc/redis/7003.conf cluster-node-timeout 15000 appendonly yes # 节点4的配置 port 7004 daemonize yes pidfile /var/run/redis_7004.pid cluster-enabled yes cluster-config-file /etc/redis/7004.conf cluster-node-timeout 15000 appendonly yes # 节点5的配置 port 7005 daemonize yes pidfile /var/run/redis_7005.pid cluster-enabled yes cluster-config-file /etc/redis/7005.conf cluster-node-timeout 15000 appendonly yes # 节点6的配置 port 7006 daemonize yes pidfile /var/run/redis_7006.pid cluster-enabled yes cluster-config-file /etc/redis/7006.conf cluster-node-timeout 15000 appendonly yes
三、Redis集群三种方式原理
1、一主一从原理:主从复制
主从复制是Redis提供的一种高可用性方案,它的实现原理是主节点将自身的数据以异步方式复制到从节点中,同时从节点可以在不影响主节点的情况下,对复制过来的数据进行读取操作。
主从复制的实现利用的是Redis的RDB文件,当主节点执行写操作时,Redis会将同步方式同时将命令更新到AOF文件和内存数据库中,随后向绑定的所有从节点发送同步命令,从节点根据同步命令更新自己的内存数据库。
2、一主多从原理:主从复制+读写分离
一主多从结构与一主一从类似,在此不再详细阐述。它的读写分离实现原理是将写操作全部交给主节点处理,而读操作则可以由主节点和从节点共同承担。当从节点发起读操作时,Redis会将同步命令发送到主节点,让主节点将最新的数据同步到从节点中,然后从节点就能够对数据进行读操作了。
3、三主三从原理:Paxos算法实现数据同步
三主三从模式是Redis集群的最佳实践,它使用Paxos算法实现数据同步,从而保证在任意节点故障或网络分区的情况下,系统仍然能够正常运行。
Paxos算法是由Leslie Lamport于1990年提出的一种基于消息传递的一致性算法。它的实质是通过消息传递机制,保证多个进程在数值上的一致性。在Redis中,三个主节点通过Paxos算法协商确定数据的一致性,从节点对主节点进行读写分离,每个主节点都会将数据复制到其他两个主节点和它们的从节点,从而实现数据的同步和备份。
四、Redis集群节点
在Redis集群中,节点可以分为主节点和从节点两种类型。主节点负责数据的存储和管理,从节点则通过主节点进行数据的同步和读写分离。
Redis集群中有三种角色,分别是:主节点、从节点和无状态节点。在三主三从结构中,每个主节点绑定两个从节点,同时充当无状态节点以处理请求。
主节点的职责是负责数据的写入和同步。当它的一个从节点崩溃时,它会自动选出一个从节点充当备份。
从节点则负责数据的读取,并通过心跳机制与主节点保持同步。当主节点故障时,从节点之间会选举出一台作为新的主节点,其他从节点则成为新的从节点。
无状态节点(Non-Data-Sharing Node)既不保存数据,也不影响数据的分割和分发,仅用于处理客户端发来的请求。每个主节点在接收到请求时,会通过哈希函数将其转发给对应的无状态节点,该节点负责将请求的变更同步到主节点和从节点中。
五、Redis集群搭建
1、Redis单节点搭建
首先安装Redis并执行以下命令启动服务:
sudo apt install redis-server sudo systemctl start redis-server
然后在redis.conf配置文件中添加以下内容:
dbfilename dump.rdb appendonly yes
运行以下命令重启Redis:
sudo systemctl restart redis-server
至此,Redis单节点搭建完成。
2、Redis三主三从集群搭建
首先下载安装Redis,并将其安装在三个不同的服务器上。安装完成后在每个节点的redis.conf配置文件中添加以下内容:
port 7000 pidfile /var/run/redis_7000.pid cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000 appendonly yes
然后启动三个节点的Redis,使用以下命令创建集群:
redis-cli --cluster create 192.168.1.2:7000 192.168.1.3:7000 192.168.1.4:7000
在通过正常的Redis客户端进行连接和操作前,需要先进行节点验证:
redis-cli --cluster check 192.168.1.2:7000 redis-cli --cluster check 192.168.1.3:7000 redis-cli --cluster check 192.168.1.4:7000
至此,Redis三主三从集群搭建完成。
六、Redis集群原理
Redis集群的工作方式是,将数据按一定规则分散到多个节点上,同时每个节点维护一份部分数据的拷贝,当需要访问数据时,会先计算出该数据应该在哪个节点上,然后进行访问。
Redis集群内部采用的哈希槽分配算法,将哈希值在0~16383之间的整数划分为16384个桶,每个桶对应一个槽。当执行SET、GET等操作时,根据操作的key计算出哈希值,并根据哈希值计算出对应的槽,然后将数据存储在该槽对应的节点上。如果对应节点宕机,则由备份节点接管槽的数据。
Redis集群的节点之间使用Gossip通信,用于集群的成员发现和状态更新。每个节点都会向集群中的一部分节点发送PING消息,在收到PING消息时,节点会回复PONG消息,用于确认集群中的节点是否正常工作。当节点感知到集群中有节点宕机时,会将宕机信息广播给其他节点。
七、Redis Cluster集群
Redis Cluster是Redis官方提供的集群方案,它基于Redis的多节点模型,以一定规则将数据分散到多个节点上,从而保证数据的高可用性和负载均衡。
Redis Cluster的主要特点是:
- 分布式:数据在多个节点之间分