阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis主从配置及HA方案

348次阅读
没有评论

共计 3049 个字符,预计需要花费 8 分钟才能阅读完成。

首先说下主从同步 Replication 的原理

在 Slave 启动并连接到 Master 之后,它将主动发送一条 SYNC 命令。此后 Master 将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master 将传送整个数据库文件到 Slave,以完成一次完全同步。而 Slave 服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master 继续将所有已经收集到的修改命令,和新的修改命令依次传送给 Slaves,Slave 将在本次执行这些数据修改命令,从而达到最终的数据同步。

如果 Master 和 Slave 之间的链接出现断连现象,Slave 可以自动重连 Master,但是在连接成功之后,一次完全同步将被自动执行。

服务器名称 内网 IP

Master 172.30.21.96
Slave1 172.30.21.88
Slave2 172.30.21.89
Slave3 172.30.21.90
Slave4 172.30.21.91

master 配置

logfile“/tmp/redis6379.log”
# slaveof
<masterip> <masterport> #master 这个地方注释不打开,保持默认

启动 master

./redis-server ../redis.conf &

slave 配置

logfile“/tmp/redis6379.log”slaveof 172.30.21.96 6379 

启动 slave

./redis-server ../redis.conf &

检查启动结果

在各自服务器上用 redis-cli 客户端连接 redis,输入 info 指令,即可查看主从的状态。

master:

Redis 主从配置及 HA 方案

slave:

Redis 主从配置及 HA 方案

主从切换

Redis 的主从架构,如果没有设置哨兵,那么如果 master 出现故障,需要手动将 slave 切换成 master 继续服务。下面先说明如何进行手动切换:

# 在新的 master 上执行:SLAVEOF NO ONE
#在其他的 slave 上执行:SLAVEOF <新的 masterip> <新的 masterport>

原来的主 redis 恢复正常了,要重新切换回去。重新切回的步骤如下:

1 将现在的主 redis 的数据进行保存(save 指令)2 将现在的主 redis 根目录下 dump.rdb 文件拷贝覆盖到原来主 redis 的根目录
3 启动原来的主 redis
4 在现在的主 redis 中切换 SLAVEOF <旧的 masterip> <旧的 masterport>
5 在其他的 slave 节点切换 SLAVEOF <旧的 masterip> <旧的 masterport>
6 完毕

自动切换(高可用方案配置)

手动的方式容易造成失误,容易导致数据丢失,而且如果主从节点很多,切换起来也很麻烦。自动切换一般通过设置哨兵实现。哨兵可以对 master 和 slave 进行监控,并在 master 出现故障的时候,能自动将 slave 切换成 master。

redis 哨兵(Redis Sentinel)的启动和 redis 实例的启动没有关系。所以可以在任何机器上启动 redis 哨兵。Redis Sentinel 是一个分布式系统,可以在整个 redis 主从架构中运行多个 Sentinel 进程(progress)。建议至少要保证有两个哨兵在运行,要不然物理机宕机后哨兵进程也不存在了,就无法进行主从切换。

我们这里有 5 台 redis 服务器(1 主 4 从),所以启动 5 个哨兵。每个哨兵的配置如下:

 修改 sentinel.conf 的配置:

logfile "/tmp/sentinel.log"
sentinel monitor mymaster 172.30.21.96 6379 2 #这个 2 代表,当集群中有 2 个 sentinel 认为 master 挂了时,才能真正认为该 master 已经不可用了

启动 sentinel(默认端口号 26379)

./redis-sentinel ../sentinel.conf &

关于 sentinel 可以看官方文档,有很多的说明。这里列出一些主要的配置属性:

# 指明日志文件名
logfile "/tmp/sentinel.log"
# 哨兵监控的 master,主从配置一样,这里只用输入 redis 主节点的 ip/port 和法定人数。sentinel monitor mymaster 172.30.21.96 6379 1
# master 或 slave 多长时间(默认 30 秒)不能使用后标记为 s_down 状态。sentinel down-after-milliseconds mymaster 5000
# 若 sentinel 在该配置值内未能完成 failover 操作(即故障时 master/slave 自动切换),则认为本次 failover 失败。sentinel failover-timeout mymaster 18000
# 设置 master 和 slaves 验证密码
sentinel auth-pass mymaster 123456 
# 指定了在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1 

通过哨兵查看集群的信息:

$ redis-cli -p 26379
sentinel master mymaster// 查看 master 的状态 
SENTINEL slaves mymaster // 查看 salves 的状态
SENTINEL sentinels mymaster // 查看哨兵的状态
SENTINEL get-master-addr-by-name mymaster// 获取当前 master 的地址
info sentinel// 查看哨兵信息 

写个代码测试下:

public static void main(String[] args) {Set<String> sentinels = new HashSet<String>();
        sentinels.add(new HostAndPort("172.30.21.96", 26379).toString());
        sentinels.add(new HostAndPort("172.30.21.88", 26379).toString());
        sentinels.add(new HostAndPort("172.30.21.89", 26379).toString());
        sentinels.add(new HostAndPort("172.30.21.90", 26379).toString());
        sentinels.add(new HostAndPort("172.30.21.91", 26379).toString());
        JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster", sentinels);

        System.out.println("Current master:" + sentinelPool.getCurrentHostMaster().toString());

        Jedis master = sentinelPool.getResource();
        //master.set("username","jager");

        System.out.println(master.get("username"));

        sentinelPool.close();
        sentinelPool.destroy();}

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/143064.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3049字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7972003
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...