redis主从复制
Redis主从复制(Redis replication)是Redis提供的一种数据备份和故障转移机制。通过主从复制,可以将一个Redis服务器(主节点)的数据复制到一个或多个Redis服务器(从节点)。这样做的好处包括:
- 数据冗余:从节点作为主节点的数据副本,提供了数据冗余,可以在主节点发生故障时快速恢复数据。
- 负载均衡:可以将读操作分散到多个从节点上,减轻主节点的压力,提高整体性能。
- 故障转移:在主节点不可用时,可以自动或手动将从节点升级为新的主节点,继续提供服务。
主从复制的配置
Master节点:192.168.20.10
Slave1节点:192.168.20.20
Slave2节点:192.168.20.30
安装Redis
systemctl stop firewalld.service
setenforce 0
mkdir /usr/local/redis/{conf,log,data}
cd /opt
yum install -y gcc gcc-c++ make
wget /opt http://download.redis.io/releases/redis-5.0.7.tar.gz
tar xfv redis-5.0.7.tar.gz
cd /opt/redis-5.0.7/
make
make install
cd utils/
./install_server.sh
安装完成
配置主服务器
修改主服务器文件
/etc/redis/6379.conf
bind 0.0.0.0 #70行,修改监听地址为0.0.0.0
daemonize yes #137行,开启守护进程
logfile /var/log/redis_6379.log #172行,指定日志文件目录
dir /var/lib/redis/6379 #264行,指定工作目录
appendonly yes #700行,开启AOF持久化功能
一般只用修改bind 0.0.0.0和appendonly yes ,其他保持默认
/etc/init.d/redis_6379 restart
重启服务
配置从服务器
修改从服务器配置文件
/etc/redis/6379.conf
bind 0.0.0.0 #70行,修改监听地址为0.0.0.0
daemonize yes #137行,开启守护进程
logfile /var/log/redis_6379.log #172行,指定日志文件目录
dir /var/lib/redis/6379 #264行,指定工作目录
replicaof 192.168.20.10 6379 #288行,指定要同步的Master节点IP和端口
appendonly yes #700行,开启AOF持久化功能
验证主从效果
从服务器重启服务
/etc/init.d/redis_6379
主服务器
tail -f /var/log/redis_6379.log
或者所有服务器使用
redis-cli info replication
可以看到主从复制成功
哨兵模式
Redis哨兵(Redis Sentinel)是一种高可用解决方案,用于监控Redis主服务器和从服务器,并在主服务器不可用时自动将其中一个从服务器提升为新的主服务器。哨兵系统由一组哨兵进程组成,它们相互通信以保持一致性,并监视主服务器和从服务器的状态。
- 监控主从状态:哨兵进程定期与主服务器和从服务器通信,以确认它们是否正常运行。
- 自动故障转移:如果主服务器不可用,哨兵会自动将一个从服务器提升为新的主服务器,并通知其他从服务器连接到新的主服务器。
- 配置提供者:哨兵进程还提供配置信息,例如主服务器地址、从服务器地址等,以便客户端可以连接到新的主服务器。
- 手动故障转移:哨兵允许管理员手动指定一个从服务器作为新的主服务器。
- 消息通知:哨兵可以配置为在发生故障时通过各种方式(如发送邮件、短信等)通知管理员。
- 数据持久化:哨兵可以与Redis的持久化功能一起使用,以实现数据的高可用性和持久性。
为了实现哨兵模式,需要启动至少三个哨兵进程,并确保它们能够相互通信。
哨兵的工作机制
在Redis哨兵模式中,故障转移(Failover)是指当主服务器不可用时,哨兵进程能够自动将一个从服务器提升为新的主服务器,以保持Redis集群的可用性。以下是Redis哨兵模式中故障转移的步骤:
- 监控:哨兵进程不断地监控主服务器和从服务器的运行状态,确保它们都处于正常工作状态。
- 心跳检测:哨兵之间以及哨兵与Redis服务器之间通过心跳检测来确认对方的存活状态。
- 发现故障:如果主服务器没有在指定的时间内响应心跳,或者主服务器在指定时间内没有与从服务器同步数据,哨兵会认为主服务器发生了故障。
- 投票选举:哨兵之间通过通信,对故障的主服务器进行投票,确定哪个从服务器将被提升为新的主服务器。
- 故障转移:一旦从服务器被选定,哨兵会向其他从服务器发送命令,将它们指向新的主服务器。
- 配置更新:客户端和其他哨兵会更新它们的配置,以指向新的主服务器。
- 同步数据:新的主服务器开始与从服务器同步数据,确保它们之间的数据一致性。
- 完成故障转移:当新的主服务器与所有从服务器都同步完成后,故障转移完成,Redis集群恢复正常工作。
在整个故障转移过程中,Redis哨兵会确保数据的一致性和集群的可用性。故障转移通常是自动完成的,但在某些情况下,管理员也可以手动干预,例如在主服务器发生故障时手动选择一个从服务器作为新的主服务器。
Redis哨兵的故障转移机制是一个高度可靠和自动化的过程,它确保了Redis集群即使在主服务器发生故障的情况下也能继续提供服务,从而保证了系统的稳定性和高可用性。
哨兵模式的搭建
搭建哨兵模式必须先搭建主从模式
1关闭Redis
/etc/init.d/redis_6379
2 修改哨兵模式配置文件
vim /opt/redis-5.0.7/sentinel.conf
protected-mode no #17行,关闭保护模式
port 26379 #21行,Redis哨兵默认的监听端口
daemonize yes #26行,指定sentinel为后台启动
logfile "/var/log/sentinel.log" #36行,指定日志存放路径
dir "/var/lib/redis/6379" #65行,指定数据库存放路径
sentinel monitor mymaster 192.168.20.10 6379 2 #84行,修改
设置完成
启动哨兵
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
查看哨兵信息
redis-cli -p 26379 info Sentinel
故障模拟
ps -ef | grep redis
关闭主服务器的redis服务
/etc/init.d/redis_6379 stop
成功
集群
Redis集群是一种分布式Redis实现,它允许您将多个Redis实例组织在一起,以提供跨多个节点的数据一致性和高可用性。Redis集群的设计允许它自动在多个Redis实例之间分配数据,并且能够自动处理节点的故障。
以下是Redis集群的一些关键特点:
- 自动故障转移:当集群中的一个节点出现故障时,Redis集群能够自动将故障节点的数据转移到其他健康的节点上,以保持服务的高可用性。
- 数据分区:Redis集群将数据自动分布在不同的节点上,每个节点负责一部分数据的存储。
- 数据一致性:Redis集群提供了强一致性的数据存储,确保所有节点的数据都是最新的。
- 自动节点添加和删除:当有新的节点加入或离开集群时,Redis集群能够自动调整数据分布,以保持集群的可用性和一致性。
- 负载均衡:Redis集群能够自动将客户端请求分配到不同的节点上,以实现负载均衡。
- 数据分片:Redis集群使用虚拟节点(共16384个)(也称为哈希槽)来将数据平均分布在多个节点上。每个虚拟节点负责一部分数据的存储。 (分布式存储)
当一个节点丢失时,会导致缺少部分哈希槽而无法正常工作。
- 故障转移:如果一个节点出现故障,集群会自动将该节点的数据转移到其他健康的节点上。
分布式集群的搭建
redis集群一般来说需要六个节点,但这里为了方便我使用三个虚拟机分别设置不同端口来区分结点每台虚拟机一主一从
主192.168.20.10:4320
192.168.20.20:4320
192.168.20.30:4320
从192.168.20.10:4321
192.168.20.20:4321
192.168.20.30:4321
在etc/redis目录下创建redis-cluster/redis4320和redis4321并且考入配置文件
cd /etc/redis/
mkdir -p redis-cluster/redis432{0..1}
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis4320
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis4321
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis4320
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis4321
开启群集功能:
修改各个Redis配置文件,以主为例
cd /etc/redis/redis-cluster/redis4320
vim redis.conf
#bind 127.0.0.1 #69行,注释掉bind 项,默认监听所有网卡
protected-mode no #88行,修改,关闭保护模式
port 4320 #92行,修改,redis监听端口,
daemonize yes #136行,开启守护进程,以独立进程启动
cluster-enabled yes #832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf #840行,取消注释,群集名称文件设置
appendonly yes #700行,修改,开启AOF持久化
在这里插入图片描述
分别进入那六个文件夹,执行命令:redis-server redis.conf ,来启动redis节点
启动集群
redis-cli --cluster create 192.168.20.10:4320 192.168.20.20:4320 192.168.20.30:4320 192.168.20.10:4321 192.168.20.20:4321 192.168.20.30:4321 --cluster-replicas 1
部署完成
测试
进入192.168.20.10 添加一对数据