redis的主从复制,哨兵值守

环境:

主服务器:192.168.10.10    Centos 7  redis-5.0.4

从服务器:192.168.10.129  Centos 7  redis-5.0.4

从服务器:192.168.10.130  Centos 7  redis-5.0.4

关于如何安装redis不再本文讨论范围内,不过您可以参考https://www.cnblogs.com/caesar-id/p/10846541.html

1、自定义192.168.10.10主服务器配置文件

[[email protected] ~]# vim /etc/myredis.conf
bind 192.168.10.10   // 绑定本机IP地址
port 9000            // redis端口号
daemonize yes        // 设置后台启动
pidfile /var/log/redis/myredis.pid  // 指定redis进程文件位置,为了方便我就放在了日志文件中,大家自行定义。
loglevel notice   // 设置日志等级
logfile /var/log/redis/myredis.log  // 设置日志文件
dbfilename dump.rdb
dir /opt/redis-5.0.4/data/myredis  // redis数据库文件路径
protected-mode no   // 为了方便这里关闭了安全模式,实际中应开启次选项

注意:这里的路径必须存在,redis没有智能到帮你把路径都创建好的,所以你需要自己创建上面所需要的文件路径。

2、创建配置文件中对应的目录

[[email protected] ~]# mkdir -p /var/log/redis  // redis的日志文件存放路径
[[email protected] ~]# mkdir -p /opt/redis-5.0.4/data/myredis  // 创建redis的数据库存储目录

到此主服务器的配置已经算是初步完成。下面配置从服务器

3、自定义从服务器192.168.10.129配置文件

[[email protected] ~]# vim /etc/myredis.conf
bind 192.168.10.129   // 绑定本机IP地址
port 9001            // 为了和主服务器区分这里使用9001
daemonize yes        // 设置后台启动
pidfile /var/log/redis/myredis.pid  // 指定redis进程文件位置,为了方便我就放在了日志文件中,大家自行定义。
loglevel notice   // 设置日志等级
logfile /var/log/redis/myredis.log  // 设置日志文件
dbfilename dump.rdb
dir /opt/redis-5.0.4/data/myredis  // redis数据库文件路径
protected-mode no   // 为了方便这里关闭了安全模式,实际中应开启次选项
slaveof 192.168.10.10 9000  // 主服务器的IP和端口

4、同样创建配置文件中对应的路径

[[email protected] ~]# mkdir -p /var/log/redis  // redis的日志文件存放路径
[[email protected] ~]# mkdir -p /opt/redis-5.0.4/data/myredis  // 创建redis的数据库存储目录

此时从服务器192.168.10.129配置初步完成,下面配置从服务器192.168.10.30。

5、 自定义从服务器192.168.10.129配置文件

[[email protected] ~]# vim /etc/myredis.conf
bind 192.168.10.130   // 绑定本机IP地址
port 9002             // 为了区分这里使用9002
daemonize yes         // 设置后台启动
pidfile /var/log/redis/myredis.pid  // 指定redis进程文件位置,为了方便我就放在了日志文件中,大家自行定义。
loglevel notice   // 设置日志等级
logfile /var/log/redis/myredis.log  // 设置日志文件
dbfilename dump.rdb
dir /opt/redis-5.0.4/data/myredis  // redis数据库文件路径
protected-mode no   // 为了方便这里关闭了安全模式,实际中应开启次选项
slaveof 192.168.10.10 9000  // 主服务器的IP和端口

6、创建配置文件中对应的路径

[[email protected] ~]# mkdir -p /var/log/redis  // redis的日志文件存放路径
[[email protected] ~]# mkdir -p /opt/redis-5.0.4/data/myredis  // 创建redis的数据库存储目录

好了主从关系到此算是配置完成,下面我们进行验证配置是否正确。

7、验证主从配置

7.1开启192.168.10.10主服务器的redis

[[email protected] ~]# redis-server /etc/myredis.conf
[[email protected] ~]# ps -ef | grep redis

如果你看到上图说明我们的主服务器192.168.10.10中的redis已经运行起来了。

7.2开启192.168.10.129从服务器的redis

[[email protected] ~]# redis-server /etc/myredis.conf
[[email protected] ~]# ps -ef | grep redis

非常幸运的跑起来了。

7.3开启192.168.10.130从服务器的redis

[[email protected] ~]# redis-server /etc/myredis.conf
[[email protected] ~]# ps -ef | grep redis

一切都很顺利。

7.4登陆192.168.10.10主服务器查看主从关系

[[email protected] ~]# redis-cli -p 9000 -h 192.168.10.10

希望你也能看到和上面一样的信息。

7.5登陆192.168.10.129从服务器查看主从关系

[[email protected] ~]# redis-cli -p 9001 -h 192.168.10.129

7.6登陆192.168.10.130从服务器查看主从关系

[[email protected] ~]# redis-cli -p 9001 -h 192.168.10.129

7.7在主服务器添加一个键查看是否会同步到从服务器

上面虽然是实现了主从复制的功能,但是如果我们的主服务器突然挂了呢?我们知道从服务器是只读的,没有写入的权限。我们来看下杀掉主进程会变成什么样子。

8、删掉主服务器192.168.10.10的redis

9、查看从服务器状态

上面的结果我确信并不是我们想要的,我们想要的是主服务器在突发情况下down后,有一台从服务器能够代替主服务器继续工作。



这里有两种解决方案:

  • 我们手动指定一台从服务器为主服务器。
  • 通过哨兵实现自动在从服务器中选举出一个主服务器。

1、手动指定192.168.10.129为主服务器(关闭服务器的从服务器的角色)

[[email protected] ~]# redis-cli -p 9001 -h 192.168.10.129
192.168.10.129:9001> slaveof no one  // 关闭从服务器角色

1.1、在192.168.10.130从服务器中指定主服务器是192.168.10.129

[[email protected] ~]# redis-cli -p 9002 -h 192.168.10.130
192.168.10.130:9002> slaveof no one  // 关闭从服务器角色
192.168.10.130:9002> slaveof 192.168.10.129 9001  // 指定主服务器是192.168.10.129

1.2、最终查看配置如下

也许你会认为这种方式很low并且不智能,我也认为你说的是对的。

在进行下面哨兵选举前,请先把192.168.10.10,192.168.10.129和192.168.10.130的配置文件调整为初始状态。因为上面已经指定了192.168.10.129为主服务器,

192.168.10.130是192.168.10.129的从服务器,192.168.10.10是一台单独的主服务器,你也可以把192.168.10.10调整为192.168.10.129的从服务器。不过这样你就会和我下面做的不太一样了。但无论怎样,调整好配置文件,重新启动主/从服务器的redis在进行下面的操作。



2、通过哨兵选举,在从服务器中选择一个从服务器作为主服务器。

2.1先停止所有主、从服务器的redis

[[email protected] ~]# pkill -9 redis

·2.2在主服务器192.168.10.10中添加哨兵的配置文件

[[email protected] ~]# vim /etc/myredis-sentinel.conf
bind 192.168.10.10   // 绑定本机地址
port 9500            // 哨兵端口
dir "/opt/redis-5.0.4/data/myredis-sentinel"  // 哨兵工作目录
logfile "/var/log/redis/mysentinel.log"       // 哨兵日志文件位置
daemonize yes      // 开启守护进程
protected-mode no  // 关闭安全模式sentinel monitor myredis 192.168.10.10 9000 2   // myredis是主节点的别名,后面是主节点的IP地址及主节点redis的端口号,数字2表示判断主节点是否down需要最少2个哨兵进行确认sentinel down-after-milliseconds myredis 30000  // 每个哨兵会定期发送ping确认主节点是否可以连接,如果在3000毫秒没有回复,就认为主节点不可达。sentinel parallel-syncs myredis 1  // 当多个哨兵都认为主节点不可达时,主节点哨兵会做故障转移。并选出一个新的主节点。这个数字越小故障转移就越慢,但如果越大会导致多个从节点同时向新主机节点复制数据,导致数据不可用。sentinel failover-timeout myredis 180000  // 故障转移超时时间。

2.3创建哨兵的工作目录

[[email protected] ~]# mkdir -p /opt/redis-5.0.4/data/myredis-sentinel

2.4添加从服务器192.168.10.129的哨兵配置文件

[[email protected] ~]# vim /etc/myredis-sentinel.con
bind 192.168.10.129  // 绑定本机地址
port 9501            // 哨兵的端口号
dir "/opt/redis-5.0.4/data/myredis-sentinel"  // 哨兵工作目录
logfile "/var/log/redis/mysentinel.log"       // 哨兵日志目录
daemonize yes      // 开启守护进程
protected-mode no  // 关闭安全模式sentinel monitor myredis 192.168.10.10 9000 2   // myredis是主节点的别名,后面是主节点的IP地址及主节点redis的端口号,数字2表示判断主节点是否down需要最少2个哨兵进行确认sentinel down-after-milliseconds myredis 30000  // 每个哨兵会定期发送ping确认主节点是否可以连接,如果在3000毫秒没有回复,就认为主节点不可达。sentinel parallel-syncs myredis 1  // 当多个哨兵都认为主节点不可达时,主节点哨兵会做故障转移。并选出一个新的主节点。这个数字越小故障转移就越慢,但如果越大会导致多个从节点同时向新主机节点复制数据,导致数据不可用。sentinel failover-timeout myredis 180000  // 故障转移超时时间。

2.5创建哨兵的工作目录

[[email protected] ~]# mkdir -p /opt/redis-5.0.4/data/myredis-sentinel

2.6添加从服务器192.168.10.130的哨兵配置文件

[[email protected] ~]# vim /etc/myredis-sentinel.conf
bind 192.168.10.130  // 绑定本机地址
port 9502            // 哨兵端口号
dir "/opt/redis-5.0.4/data/myredis-sentinel"  // 哨兵工作目录
logfile "/var/log/redis/mysentinel.log"       // 哨兵日志目录
daemonize yes       // 开启守护进程
protected-mode no   // 关闭安全模式
sentinel monitor myredis 192.168.10.10 9000 2   // myredis是主节点的别名,后面是主节点的IP地址及主节点redis的端口号,数字2表示判断主节点是否down需要最少2个哨兵进行确认sentinel down-after-milliseconds myredis 30000  // 每个哨兵会定期发送ping确认主节点是否可以连接,如果在3000毫秒没有回复,就认为主节点不可达。sentinel parallel-syncs myredis 1  // 当多个哨兵都认为主节点不可达时,主节点哨兵会做故障转移。并选出一个新的主节点。这个数字越小故障转移就越慢,但如果越大会导致多个从节点同时向新主机节点复制数据,导致数据不可用。sentinel failover-timeout myredis 180000  // 故障转移超时时间。

2.7创建哨兵的工作目录

[[email protected] ~]# mkdir -p /opt/redis-5.0.4/data/myredis-sentinel

2.8开启主/从服务器的redis服务

[[email protected] ~]# redis-server /etc/myredis.conf

2.9查看主从关系

由上图可知,redis的主从关系正常。

2.10.1开启主/从哨兵服务

[[email protected] ~]# redis-sentinel /etc/myredis-sentinel.conf

2.10.2查看哨兵当前状态

[[email protected] ~]# redis-cli -p 9500 -h 192.168.10.10 info sentinel   // 查看主服务器的哨兵(在主服务器192.168.10.10)
[[email protected] ~]# redis-cli -p 9501 -h 192.168.10.129 info sentinel  // 查看从服务器的哨兵(在从服务器192.168.10.129)
[[email protected] ~]# redis-cli -p 9502 -h 192.168.10.130 info sentinel  // 查看从服务器的哨兵(在从服务器192.168.10.130)

2.10.3杀掉主服务器192.168.10.10的redis服务,查看哨兵是否会在从服务器中选举出一台主服务器。

[[email protected] ~]# ps -ef | grep redis  // 查看redis的进程号
[[email protected] ~]# kill -9 6483  // 根据redis的进程id杀掉它

杀掉主服务器后查看两个从服务器的状态

发现两台从服务器都已经检测到主服务器192.168.10.10的redis已经无法连接,我们稍等片刻,在来看看我们的哨兵是否尽职尽责,为我们自动选举出一台主服务器。

好了哨兵值守就演示到这里吧。

原文地址:https://www.cnblogs.com/caesar-id/p/10849284.html

时间: 2024-10-12 09:55:18

redis的主从复制,哨兵值守的相关文章

redis的主从复制和哨兵模式

Redis主从复制是什么? 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 Redis主从复制能干些什么? (1)读写分离 (2)容灾恢复 Redis配置主从复制(1主2从) 知识注意: (1)配从(库)不配主(库) (2)从库配置:slaveof 主库IP 主库端口 (3)info replication查看当前redis节点信息(是主还是从等等) redis配置1主2从 开始配置: 这里

5.如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么?

作者:中华石杉 作者:中华石杉 面试题 如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么? 面试官心理分析 其实问这个问题,主要是考考你,redis 单机能承载多高并发?如果单机扛不住如何扩容扛更多的并发?redis 会不会挂?既然 redis 会挂那怎么保证 redis 是高可用的? 其实针对的都是项目中你肯定要考虑的一些问题,如果你没考虑过,那确实你对生产系统中的问题思考太少. 面试题剖析 如果你用 redis 缓存技术的话,

Redis的主从复制与Redis Sentinel哨兵机制

1    Redis的主从复制 1.1   什么是主从复制 持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,不过通过redis的主从复制机制就可以避免这种单点故障,如下图: 说明: n  主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务. n  主redis中的数据和从re

redis 的主从复制机制

1.redis的主从复制是什么,我们看看那官网解释: 注: redis 的复制是配置了 master-slave 复制,这种机制允许 从redis服务器能够准确地复制 主服务器的内容. 主要包括:(英文翻译的不太好,看得不太明白的朋友去找找相关的文档) a.主服务器能能有多个从服务器 b.redis 使用异步的复制.从服务器能够实时地获取在复制流中处理过的数据. c.从服务器能够接收其他从服务器上的连接.除了连接主服务器上的许多从服务器,从服务器也能够连接具有级联结构的其他从服务器.(从服务器上

redis之(十四)redis的主从复制的原理

一:redis主从复制的原理,步骤. 第一步:复制初始化 --->从redis启动后,会根据配置,向主redis发送SYNC命令.2.8版本以后,发送PSYNC命令. --->主redis收到SYNC命令后,开始在后台保存快照文件(即RDB持久化的过程),并将保存快照期间接收到的命令缓存起来. --->当主redis完成快照后,主redis会将快照文件和缓存命令发送给从redis.复制初始化结束. --->当主redis的复制初始化结束后,主redis每当收到写命令就会异步将写命令

【深入学习Redis】主从复制(上)

前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持久化中曾提到,Redis高可用的方案包括持久化.主从复制(及读写分离).哨兵和集群.其中持久化侧重解决的是Redis数据的单机备份问题(从内存到硬盘的备份):而主从复制则侧重解决数据的多机热备.此外,主从复制还可以实现负载均衡和故障恢复. 这篇文章中,将详细介绍Redis主从复制的方方面面,包括:如何使用主从复制.主从复制的原理(重点是全量复制和部分复制.以及心跳机制).实际应用中需要注意的问题(如数

9.Redis高可用-哨兵

9.Redis高可用-哨兵9.1 基本概念9.1.1 主从复制的问题9.1.2 高可用9.1.3 Redis Sentinel的高可用性9.2 安装和部署9.2.1 部署拓扑结构9.2.2 部署Redis数据节点9.2.3 部署Sentinel节点9.2.4 配置优化9.2.5 部署技巧9.3 API9.4 客户端连接9.4.1 Redis Sentinel的客户端9.4.2 Redis Sentinel客户端基本实现原理9.4.3 Java操作Redis Sentinel9.5 实现原理9.5

Redis 主从、哨兵Sentinel、Jedis

Redis 主从.哨兵Sentinel.Jedis 2017年02月15日 15:52:48 有且仅有 阅读数 6183 文章标签: redis主从sentineljedis 更多 分类专栏: 7/12 Database 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u010297957/article/details/55050098 上篇说到了Redis安装.运行.今天来看一看Red

redis 主从同步&哨兵模式&codis

原文:redis 主从同步&哨兵模式&codis 主从同步 1.CPA原理 1. CPA原理是分布式存储理论的基石: C(一致性):   A(可用性):  P(分区容忍性); 2. 当主从网络无法连通时,修改操作无法同步到节点,所以"一致性"无法满足 3. 除非我们牺牲"可用性",也就是暂停分布式节点服务,不再提供修改数据功能,知道网络恢复 一句话概括CAP: 当网络分区发生时,一致性 和 可用性 两难全 2.redis主从同步介绍 1. 和MySQ