Redis(2):四种模式(单机、哨兵、集群、主从复制)部署

ShineLee / 2023-08-15 / 原文

学习自:Redis 的四种模式 - 何童鞋 - 博客园

深入理解Redis的部署模式四种模式的探索(redis部署四种模式)-数据库运维技术服务

redis部署和运行原理 redis的三种部署方式_小咪咪的技术博客_51CTO博客

上一节:Redis(1):四种模式(单机、哨兵、集群、主从复制)原理

0、所写

m:master,主服务器

s:slave,从服务器

1、单机模式

学习自:redis部署和运行原理 redis的三种部署方式_小咪咪的技术博客_51CTO博客

数据库部署在一台服务器上,只有一个redis服务实例

当安装部署了一个Redis后,默认模式就是单机模式。

redis-server & /usr/local/redis/redis-6.2.13/redis.conf

这种模式下,redis服务器的IP和端口默认为127.0.0.1和6379。

也可以定制IP和端口:

redis-cli -h IP地址 -p 端口

 

此时可以用redis-cli去进行一些指令,验证redis服务器是否连接成功:

ping:检测连接

127.0.0.1:6379> ping // 检测连接是不是好的
PONG
127.0.0.1:6379> ping "hello the world" // 也可以发送指定消息
"hello the world"

set、get:存取K-V对

127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379>  ttl key1
(integer) -1
127.0.0.1:6379> set key1 value1 EX 1000
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> ttl key1
(integer) 990
127.0.0.1:6379> ttl key1
(integer) 984
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> get key1

备注: 其他命令实际操作,可以参考:http://redisdoc.com/

 

2、主从复制模式

学习自:Redis(主从复制、哨兵模式、集群)概述及部署_redis主从模式部署_超级驼鹿️的博客-CSDN博客(主要)

Redis 主从模式部署步骤(参考)

服务器部署在多台服务器上,形成m和s的结构。

m承担所有客户端请求处理所有数据备份的任务;s只负责备份数据不处理客户端请求。

实现

现在有3台机器(为了保证主从,这三台机器必须是同一个网段,相互可以连通):

192.168.10.11 #s
192.168.10.12 #s
192.168.10.20 #m

默认s和m上都已经安装了redis

1、在m上修改配置文件redis.conf

vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0                       #监听地址 0.0.0.0
protected-mode no                    #本机访问保护模式 no
port 6379                            #监听6379端口
daemonize yes                        #设置为守护进程,后台启动
pidfile /usr/local/redis/log/redis_6379.pid     #PID 文件
logfile "/usr/local/redis/log/redis_6379.log"   #日志文件
dir /usr/local/redis/data                       #指定持久化文件所在目录
requirepass Wrt65536                             #可选,设置redis密码
appendonly yes                                  #开启AOF

2、在s上修改redis.conf

vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0                       #监听地址 0.0.0.0
protected-mode no                    #本机访问保护模式 no
port 6379                            #监听6379端口
daemonize yes                        #设置为守护进程,后台启动
pidfile /usr/local/redis/log/redis_6379.pid     #PID 文件
logfile "/usr/local/redis/log/redis_6379.log"   #日志文件
dir /usr/local/redis/data                       #指定持久化文件所在目录
requirepass Wrt65536                            #可选,设置redis密码
appendonly yes                                  #开启AOF
#相比m的附加项
replicaof 192.168.10.20 6379            #指定要同步的m节点的ip和端口
masterauth Wrt65536                  #指定m的密码,仅在m节点设置了requirepass时起作用

3、启动s和m上的redis

sudo redis-server /路径/redis.conf &

4、验证主从关系

在master上添加K-V对

redis-cli -h 192.168.10.20 -p 6379 -a Wrt65536

在两台slave上查看K(这里我为了方便,将三台机器的密码设为统一了)

redis-cli -h 192.168.10.11 -p 6379 -a Wrt65536
redis-cli -h 192.168.10.12 -p 6379 -a Wrt65536

 

3、哨兵模式

学习自:Redis哨兵模式

redis哨兵模式来进行主从替换以及故障恢复_redis 主服务恢复后依然是主服务_Rapig1的博客-CSDN博客

主从复制的基础上,哨兵模式引入了主节点的自动故障转移。

1)实现之前,注意事项

  • m+s数量≥3;
  • 哨兵集群中的机器数量为奇数;

2)实现原理图

3)哨兵模式作用

①监控

监控m和s节点是否正常工作;

②自动故障转移

当m不工作时,哨兵自动开始故障转移,将失效m中的一个s升级为m,并让其他s从新m复制

③通知

将故障转移结果告知client

4)结构

哨兵节点:由一个或多个哨兵节点组成

数据节点:m和s节点

5)故障转移机制

①定期检测,哨兵每1s向m、s、其他哨兵发送一次ping心跳检测。如果m在一段时间内不回复或错误回复,该哨兵会认为这个节点主观下线超半数哨兵认为主观下线,则变为客观下线

②当m故障,哨兵通过Raft算法(选举算法)共同选举出一个哨兵leader,来处理主节点的故障转移和通知。所以哨兵集群中节点≥3。

③由leader执行故障转移:

  • 将某个s升级为m,让其他s指向新m;
  • 若原m恢复,也变为s并指向新m;
  • 通知client更换了m。

注意,下线是单纯针对m才有的概念,对s、哨兵不会有后续。

m的选举

1.过滤掉不健康的(已下线的),没有回复哨兵 ping 响应的从节点。
2.选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)
3.选择复制偏移量最大,也就是复制最完整的从节点。

6)实现

哨兵的实现依赖于主从模式,所以在做哨兵模式前要先做主从模式。

①基于第2节的主从复制,已经搭建完3台redis服务器

主机IP地址
Master 192.168.10.20
Slave1 192.168.10.11
Slave2 192.168.10.12

②修改redis配置文件(所有主机)

systemctl stop firewalld #关闭firewalld防火墙
setenforce 0 #关闭selinux防火墙

vim /usr/local/redis/redis-6.2.13/sentinel.conf
protected-mode no                                #17行,关闭保护模式
port 26379                                        #21行,Redis哨兵默认的监听端口
daemonize yes                                    #26行,指定sentinel为后台启动
pidfile /usr/local/redis/log/sentinel.pid
logfile "/usr/local/redis/log/sentinel.log"
#36行,指定日志存放路径 dir dir /usr/local/redis/6379 #65行,指定数据库存放路径
#84行,指定该哨兵节点监控192.168.10.20:6379这个主节点,该主节点的名称是mymaster,
#最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel monitor mymaster
192.168.10.20 6379 2

#这两项一开始是注释掉的,需要手动添加
#113行,判定服务器down掉的时间周期,默认3000毫秒(3秒) sentinel down-after-milliseconds mymaster 3000
#146行,故障节点的最大超时时间为1800毫秒(1.8秒) sentinel failover
-timeout mymaster 1800

#如果接入外界的网络是NAT,那么还要设置下边两项
sentinel announce-ip 本机ip
sentinel announce-port 26379

要确保这里写的所有目录(比如log,6379)都是存在的,如果不存在需要先去新建

③启动哨兵模式:先m后s

redis-sentinel sentinel.conf &

注意:

  • 这里是哨兵的启动过程,在此之前要先启动m和s上的redis服务
    redis-server redis.conf &
  • 这里是redis-sentinel sentinel.conf而不是redis-server redis.conf
  • 先m后s,共启动3次(有多少台启动多少次)

④故障模拟

在m上执行如下指令:

  • 先用ps -ef查询redis-server的进程号
  • kill该redis-server进程(注意是server不是sentinel)
  • 查看日志 

日志显示切换成功

⑤验证

在已经成为master的主机192.168.10.12上,设置新的K-V对:

在另一台slave上查看结果

 

4、集群模式

本节学习自:三、Redis 集群模式

数据库部署在一组Redis实例,形成一个相互关联的集群。它支持多个客户端同时连接多台服务器,实现真正的分布式系统,可以更好地满足大型系统的高可用性和高吞吐性要求。

redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 15000

 

 5、注意事项

redis启动方式为:redis-server 路径/redis.conf &,符号&必须放在conf文件之后,不然会导致conf文件读取失效

设置了masterauth之后,s在登录时不会用到该密码,登录时的-a密码还是它自己的requirepass

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
[root@localhost bin]# redis-cli -h 192.168.10.12 -p 6379