redis高可用性
一台redis服务器:内存16g,一个进程挂了--------->redis服务挂-------------------->系统不可用 那么就会导致项目不可用

避免redis宕机采用多台redis服务器,
1、一主二从集群模式架构(rdb模式)
三台服务器:
上海 北京 杭州
模式1: 一主二从架构,一个主机,两个从机,主机进行读写,从机进行读取(数据),主机可以把数据同步到从机上,相当于在从机上有一个备份数据,主机故障的情况下,从机数据与主机数据一致,可以把从机当作一个新的主机
增量同步
全量同步
读写分离我的理解就是一个主机进行写入操作(增删改),然后主机可以将数据同步到从机上,就算主机损坏也可以保留数据,从机上主要就是进行读的操作。
数据支持全量同步和增量同步
- 全量同步是指原本主机数据库里有内容,给他配置从机时会进行全量同步将数据全部都同步上去
- 增量同步指的是在配置好一主二从结构之后在主机上进行写入操作之后,从机进行数据同步时候进行的就是增量同步。
豆师傅真言
主节点负责写操作,写操作会实时记录到复制积压缓冲区;从节点负责读操作,首次连接 / 断连过久时会从主节点全量同步 RDB + 缓冲数据,正常情况下会通过偏移量拉取增量数据;若主节点故障,从节点不仅能保留数据,还能升级为新主节点,实现 “读写不中断 + 数据不丢失”。
手动切换主机从机
一个主机两个从机,读写分离,主机进行写入,从机进行读,主机将数据通过全量同步同步到从机上,再有指令的时候通过增量同步同步上去。
在配置文件中将主机密码配置上去,在集群环境上需要把每一台服务器的requirepass密码设置一致,一台主机崩溃时可以另一台从机当主机直接连接
一主二从结构实现
1. 手动实现
我对这个实现过程的理解
主要是通过复制粘贴生成多个配置文件,然后设置不同的端口,开启redis服务的时候可以开启三个不同端口的客户端
redis-cli -h 端口号
然后在里面通过slaveof IP地址 端口号
设置某一个端口奴隶于另一个端口,相当于把一个端口设置成了从节点;如果一个主机崩溃或者被关闭的时候需要进行手动处理设置一个新的主节点,同样使用
slaveof IP地址 端口号
选择一个新的主节点此时原本关闭或崩溃的节点重新启动只能作为从节点使用,并且奴隶于新的主节点在redis-cli客户端中使用一个命令可以查看当前redis的情况
info replication
2. 详细的配置实现
- 复制redis.conf文件为三份
cp redis.conf redis6380.conf
- 修改配制文件(多个端口需要复制修改多个配置文件)
dbfilename dump6380.rdb # 配置文件pidfile 6380 # 配置文件端口requirepass MZZasd123... # 设置自身密码,客户端登录密码masterauth MZZasd123... # 配置主机密码,主节点崩了,从节点换成主节点验证的密码appendonly no # 取消aof模式port 6380 #改端口
- 分别启动三个服务
redis-server redis6380.conf
redis-server redis6382.conf
redis-server redis6381.conf
- 登录到三个节点,查询节点状态,每个节点都是一个master
info replcation
# 可以查看每个节点自身的状态
- 让6381和6382变成从机
slaveof ip地址 端口号slaveof 127.0.0.1 6380
- 测试 主从复制
master主机可读可写 slave从机只读
主机(master)可写(增删改)
从机(slave)只可以读全量同步
增量同步
7、哨兵启动
redis-sentinel sentinel.conf
反客为主(主机)
主机故障,从机变主机
6380: shutdown6381: slaveof no one # 从机变主机(手动切换)
6382: slaveof ip(127.0.0.1) 6381 # 其他从机守护新主机
手动操作有延迟,所以说还得
哨兵服务(自动切换主机)
自动实现主机
烧饼集群监控节点主节点信息,一般都是三个烧饼,烧饼维护master主节点信息。master主节点知道所有的slave节点信息,会把知道从节点的都告诉烧饼,烧饼间接的获取到所有的从节点的信息
当哨兵发现master故障,烧饼会选取一个slave变为master,让其他slave和故障的master守护新的master
哨兵内部有一个选举模式
测试自动故障切换
第一行:sentinel monitor mymaster 127.0.0.1 6381 1
sentinel
:Redis 哨兵模式的指令前缀,用于标识这是哨兵的配置项。monitor
:哨兵的核心操作指令,意为 “监控”,表示要对后面指定的主节点进行状态监控。mymaster
:自定义的主节点名称,用于标识这个被监控的主从集群,可根据业务自定义。127.0.0.1
:主节点的 IP 地址,这里是本地回环地址,表示主节点与哨兵在同一台服务器上。6381
:主节点的 Redis 服务端口,哨兵通过该端口与主节点通信。1
:投票阈值(quorum),表示至少需要 1 个哨兵节点确认主节点 “客观下线”,才会触发故障转移流程。
第二行:sentinel auth-pass mymaster MZZasd123...
sentinel
:同样是哨兵模式的指令前缀。auth-pass
:“认证密码” 的配置指令,用于设置连接主节点的认证密码。mymaster
:要认证的主节点名称,需与sentinel monitor
中定义的主节点名称保持一致。MZZasd123...
:主节点的认证密码,需与主节点redis.conf
中requirepass
配置的密码完全一致,否则哨兵无法正常连接主节点进行监控和故障转移。
运行哨兵配置文件运行
redis-sentinel sentinel.conf
晚上再敲一遍烧饼
只有一个master可以支持写入,
2、三主三从集群模式(用得较多)
无中心节点,谁说得都不算
先把数据文件从主机到从机进行
三主三从集群举例
前提是在服务器上开放12个端口
7001
17001
7002
17002
7003
17003
7004
17004
7005
17005
7006
17006
1、创建一个集群文件夹
cd /usr/local/bin# 创建文件夹
mkdir redis-cluster
2、集群文件夹内部创建6个子文件夹
drwxr-xr-x 2 root root 4096 Sep 24 15:41 7001
drwxr-xr-x 2 root root 4096 Sep 24 15:42 7002
drwxr-xr-x 2 root root 4096 Sep 24 15:43 7003
drwxr-xr-x 2 root root 4096 Sep 24 15:43 7004
drwxr-xr-x 2 root root 4096 Sep 24 15:44 7005
drwxr-xr-x 2 root root 4096 Sep 24 15:44 7006
3、7001-7006每一个文件夹里面都是一份独立的redis服务
在原有的usr/local/bin下复制redis对应的可执行文件到7001目录下面
# 复制语句
cp redis-server redis-cli redis.conf redis-sentinel redis-check-rdb redis-check-aof redis-cluster/7001/-rwxr-xr-x 1 root root 5197712 Sep 24 15:33 redis-benchmark
-rwxr-xr-x 1 root root 11421880 Sep 24 15:31 redis-check-aof
-rwxr-xr-x 1 root root 11421880 Sep 24 15:31 redis-check-rdb
-rwxr-xr-x 1 root root 5411032 Sep 24 15:31 redis-cli
-rw-r--r-- 1 root root 106621 Sep 24 15:41 redis.conf
-rwxr-xr-x 1 root root 11421880 Sep 24 15:31 redis-sentinel
-rwxr-xr-x 1 root root 11421880 Sep 24 15:31 redis-server
4、修改redis.conf配置文件
port 7001pidfile ./redis.pid# 主密码
masterauth 密码# 集群设置
cluster-enabled yes# 关闭aof模式
addpendonly no
5、复制7001内容到7002、7003....7006
cp -r 7001 7002
cp -r 7001 7003
cp -r 7001 7004
cp -r 7001 7005
cp -r 7001 7006
并修改对应的port端口
6、创建一个启动脚本redis-cluster下(startAll.sh),一次性启动六个redis节点
脚本内容
cd 7001
./redis-server redis.conf
cd ../7002
./redis-server redis.conf
cd ../7003
./redis-server redis.conf
cd ../7004
./redis-server redis.conf
cd ../7005
./redis-server redis.conf
cd ../7006
./redis-server redis.conf
7、给startAll.sh文件执行权限
chmod 777 startAll.sh# 执行脚本文件
./startAll.sh
8、通过ps查看6个节点信息
ps -ef|grep redis
9、基于六个节点组件集群
cd 7001./redis-cli --cluster create 114.55.242.34:7001 114.55.242.34:7002 114.55.242.34:7003 114.55.242.34:7004 114.55.242.34:7005 114.55.242.34:7006 --cluster-replicas 1 -a MZZasd123...-a后面跟密码
--cluster-replicas 1指的是每个主节点后面一个从节点
10、客户端连接测试集群
redis-cli -h 114.55.242.34 -p 7001 -c -a MZZasd123...