redis 主从复制方案

redis

  • 一、安装
  • 二、创建服务
  • 三、开启 redis 持久化
  • 四、开启主从配置
    • 修改 master 的主配置文件
    • 修改 slave1 和 slave2 的主配置文件
  • 五、测试

环境准备

  • 准备三台系统为CentOS7的主机
    • master:192.168.152.71
    • slave1:192.168.152.72
    • slave2:192.168.152.73

一、安装

Redis软件包仓库

  1. 安装开发工具包

    yum groupinstall "Development Tools" -y
    
  2. 获取 redis 源码包

    wget http://download.redis.io/releases/redis-4.0.9.tar.gz
    
  3. 解压

    tar xf ./redis-4.0.9.tar.gz -C /opt/
    
  4. 进入源码包进行 cd /opt/redis-4.0.9 编译安装,执行下面命令

    make && make install
    

二、创建服务

创建redis服务以便用system命令管理

  1. 复制 redis_init_script 文件,到 /etc/init.d/下面,并改名为redis

    cp /opt/redis-4.0.9/utils/redis_init_script /etc/init.d/redis
    
  2. 编辑 /etc/init.d/redis 文件

    再文件第 5 行添加下面内容,以便 system 命令识别

    ##NEW###
    # chkconfig: 2345 10 90
    # description: Start and Stop redis
    ##NEW###
    

    查看下面几行信息

    EXEC=/usr/local/bin/redis-server       # 按照第 7 行指定的目录,查看文件是否存在,一般是存在的
    CLIEXEC=/usr/local/bin/redis-cli       # 按照第 8 行指定的目录,查看文件是否存在,一般是存在的
    CONF="/etc/redis/${REDISPORT}.conf"    # 按照第 11行指定的目录,查看文件是否存在,一般是没有的,${REDISPORT} 的值为 6379,再文件第 6 行 或者 9、10行显示,这也是服务的端口号
    $EXEC $CONF $						   # 更改第 20 行,再行尾加上 & 符号
    

    如果 7、8 行指定的路径不存在,更改路径

    EXEC=/opt/redis-4.0.9/src/redis-server
    CLIEXEC=/opt/redis-4.0.9/src/redis-cli
    

    第 11 行指定的路径一般不存在,执行下面两个命令,该文件为主配置文件

    mkdir /etc/redis
    cp /opt/redis-4.0.9/redis.conf /etc/redis/6379.conf
    
  3. 重新加载 systemd 配置

    systemctl daemon-reload
    
  4. 启动redis

    systemctl start redis
    
  5. 进入 redis 客户端进行测试

    redis-cli 
    

三、开启 redis 持久化

  • 开启持久化功能后,重启redis后,数据会自动通过持久化文件恢复!!
    • 两种方式
    • RDB(Redis DataBase)
    • AOF(Append Only File)

因RDB数据不实时,但同时使用两者时服务器只会找AOF文件,所以RDB留作万一的手段。

RDB 开启状态,RDB 默认已经开启

vim /etc/redis/6379.conf#dbfilename:持久化数据存储在本地的文件
dbfilename dump.rdb#dir:持久化数据存储在本地的路径,如果是在/redis/redis-3.0.6/src下启动的redis-cli,则数据会存储在当前src目录下
dir ./##snapshot触发的时机,save <seconds> <changes>  
##如下为900秒后,至少有一个变更操作,才会snapshot  
##对于此值的设置,需要谨慎,评估系统的变更操作密集程度  
##可以通过“save “””来关闭snapshot功能  
#save时间,以下分别表示更改了1个key时间隔900s进行持久化存储;更改了10个key300s进行存储;更改10000个key60s进行存储。
save 900 1
save 300 10
save 60 10000##当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等  
stop-writes-on-bgsave-error yes  ##是否启用rdb文件压缩,默认为“yes”,压缩往	往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间  
rdbcompression yes  

开启AOF,配置文件

vim /etc/redis/6379.conf#此选项为aof功能的开关,默认为“no”,可以通过“yes”来开启aof功能  
##只有在“yes”下,aof重写/文件同步等特性才会生效  
appendonly yes  #指定aof文件名称  
appendfilename appendonly.aof  #指定aof操作中文件同步策略,有三个合法值:always everysec no,默认为everysec  
appendfsync everysec  #在aof-rewrite期间,appendfsync是否暂缓文件同步,"no"表示“不暂缓”,“yes”表示“暂缓”,默认为“no”  
no-appendfsync-on-rewrite no  #触发aof rewrite的最小文件尺寸
auto-aof-rewrite-min-size 64mb#当Aof log增长超过指定比例时,重写log file, 设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。
auto-aof-rewrite-percentage 100

将appendonly no改为appendonly yes 即可

  • 重启
systemctl restart redis

四、开启主从配置

修改 master 的主配置文件

vim /etc/redis/6379.conf 

改第 69 行 bind 127.0.0.1 为,监听所有地址。

bind 0.0.0.0

如果只监听特定的可以这样写 bind 127.0.0.1 192.168.1.100 将同时监听 127.0.0.1192.168.1.100 这两个 IP 地址。你也可以根据需要添加更多的 IP 地址。

改第 88 行 protected-mode yes 为,关闭保护模式。

protected-mode no

重启服务 systemctl restart redis

修改 slave1 和 slave2 的主配置文件

vim /etc/redis/6379.conf 

改第 69 行 bind 127.0.0.1 为,监听所有地址。

bind 0.0.0.0

如果只监听特定的可以这样写 bind 127.0.0.1 192.168.1.100 将同时监听 127.0.0.1192.168.1.100 这两个 IP 地址。你也可以根据需要添加更多的 IP 地址。

改第 88 行 protected-mode yes 为,关闭保护模式。

protected-mode no

改第 281 行 # slaveof <masterip> <masterport> 为,解除注释,并指定master主机IP地址和端口号

slaveof 192.168.152.71 6379    # 端口号再没有修改的情况下,默认 6379

重启服务 systemctl restart redis

五、测试

输入 redis-cli 进入redis 的客户端输入 info replication 查看主从状态

master 显示的状态

# Replication
role:master                # 当前节点是主节点
connected_slaves:2         # 连接的从节点数量
slave0:ip=192.168.152.73,port=6379,state=online,offset=42,lag=1  # 从节点 1 信息
slave1:ip=192.168.152.72,port=6379,state=online,offset=42,lag=1  # 从节点 2 信息
master_replid:cb46ab0a79974e3f32ceb1e25a79c3578f6a3ee4  # 主节点复制 ID
master_replid2:0000000000000000000000000000000000000000  # 第二个主节点复制 ID (全零表示未用)
master_repl_offset:42     # 主节点复制偏移量
second_repl_offset:-1     # 第二主节点复制偏移量 (未用)
repl_backlog_active:1     # 复制积压缓冲区启用状态
repl_backlog_size:1048576 # 复制积压缓冲区大小 (1 MB)
repl_backlog_first_byte_offset:1  # 缓冲区第一个字节偏移量
repl_backlog_histlen:42    # 缓冲区有效数据长度

slave 显示的状态

# Replication
role:slave                # 当前节点是从节点
master_host:192.168.152.71 # 主节点 IP 地址
master_port:6379          # 主节点端口
master_link_status:up     # 主节点连接状态 (up 表示连接正常)
master_last_io_seconds_ago:1 # 距离上次 IO 操作的秒数
master_sync_in_progress:0 # 主节点同步是否正在进行 (0 表示未进行)
slave_repl_offset:42      # 从节点复制偏移量
slave_priority:100        # 从节点优先级 (数字越小优先级越高)
slave_read_only:1         # 从节点是否只读 (1 表示只读)
connected_slaves:0        # 当前从节点连接的从节点数量
master_replid:cb46ab0a79974e3f32ceb1e25a79c3578f6a3ee4 # 主节点复制 ID
master_replid2:0000000000000000000000000000000000000000 # 第二个主节点复制 ID (全零表示未用)
master_repl_offset:42     # 主节点复制偏移量
second_repl_offset:-1     # 第二主节点复制偏移量 (未用)
repl_backlog_active:1     # 复制积压缓冲区启用状态
repl_backlog_size:1048576 # 复制积压缓冲区大小 (1 MB)
repl_backlog_first_byte_offset:1  # 缓冲区第一个字节偏移量
repl_backlog_histlen:42    # 缓冲区有效数据长度

可以使用 set 添加数据,get 获取数据来进行测试,如:

set name lty  # name 为索引,lty为值
gte name      # get 获取该索引的值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

避免CSRF攻击的方案

CSRF攻击的方式 恶意网站发送对感兴趣网站的请求&#xff08;或者正常网站发送恶意请求&#xff0c;但一般正常网站不可能这么做&#xff09;&#xff0c;显然&#xff0c;这肯定属于跨域请求了。 解决思路 跨域角度 首先&#xff0c;对跨域行为进行限制&#xff1a; 限制…

力扣第 411 场周赛题解

3258. 统计满足 K 约束的子字符串数量 I 给你一个 二进制 字符串 s 和一个整数 k。 如果一个 二进制字符串 满足以下任一条件&#xff0c;则认为该字符串满足 k 约束&#xff1a; 字符串中 0 的数量最多为 k。字符串中 1 的数量最多为 k。 返回一个整数&#xff0c;表示 s …

【数据结构-哈希前缀】力扣2845. 统计趣味子数组的数目

给你一个下标从 0 开始的整数数组 nums &#xff0c;以及整数 modulo 和整数 k 。 请你找出并统计数组中 趣味子数组 的数目。 如果 子数组 nums[l…r] 满足下述条件&#xff0c;则称其为 趣味子数组 &#xff1a; 在范围 [l, r] 内&#xff0c;设 cnt 为满足 nums[i] % mod…

JVM -垃圾回收器

本人在这篇文章中讲解了垃圾回收机制&#xff0c;这为前置知识 美团一面面经&#xff1a;Threadlocal&#xff08;线程局部变量的原理&#xff09;-&#xff1e;内存泄漏问题-&#xff1e;垃圾回收机制_threadlocal回收-CSDN博客 首先对前置知识漏洞做一个补充&#xff1a;ja…

open Euler22.03系统安装宝塔面板

环境&#xff1a;华为云open Euler22.03操作系统 配置&#xff1a;2核4G 1、安装宝塔面板。 登录弹性云服务器。 执行以下命令&#xff0c;下载并安装宝塔面板。 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh &&…

【面试最常考算法】哈希表专题

题号标题题解标签难度0001两数之和Python数组、哈希表简单0041缺失的第一个正数Python数组、哈希表困难0128最长连续序列Python并查集、数组、哈希表中等0136只出现一次的数字Python位运算、数组简单0242有效的字母异位词Python哈希表、字符串、排序简单0442数组中重复的数据数…

STM32裸机和RTOS中的线程安全问题及STM32cubeMX中的线程安全策略

STM32线程安全问题 术语“线程” 和“多线程” 适用于裸机和基于RTOS的应用程序&#xff0c;线程安全问题并不只存在于基于RTOS的应用程序中&#xff1b;裸机应用程序中也存在这个问题&#xff0c;在裸机应用程序中&#xff0c;中断服务程序允许调用C库函数。线程安全问题可能…

C#基础:数据库中使用Linq作分组处理(反射/直接分组)

目录 一、使用反射分组 二、不使用反射分组 三、调用示例 四、代码demo 一、使用反射分组 private static List<GroupList<T>> GetGroupList<T>(List<T> entities, string groupByProperty) {// 获取分组字段的类型var propertyInfo typeof(T).…

Python实现水果忍者(开源)

一、整体介绍&#xff1a; 1.1 前言&#xff1a; 游戏代码基于Python制作经典游戏案例-水果忍者做出一些改动&#xff0c;优化并增加了一些功能。作为自己Python阶段学习的结束作品&#xff0c;文章最后有源码链接。 1.2 Python主要知识&#xff1a; &#xff08;1&#xf…

直播App遭受抓包后的DDoS与CC攻击防御策略

随着直播应用的普及&#xff0c;越来越多的用户开始依赖这些平台进行娱乐和社交活动。然而&#xff0c;这也使得直播平台成为网络攻击的目标之一。其中&#xff0c;DDoS&#xff08;分布式拒绝服务&#xff09;攻击和CC&#xff08;Challenge Collapsar&#xff0c;即HTTP慢速攻…

Python爬虫——爬取某网站的视频

爬取视频 本次爬取&#xff0c;还是运用的是requests方法 首先进入此网站中&#xff0c;选取你想要爬取的视频&#xff0c;进入视频播放页面&#xff0c;按F12&#xff0c;将网络中的名称栏向上拉找到第一个并点击&#xff0c;可以在标头中&#xff0c;找到后续我们想要的一些…

qt-15综合实例(电子时钟)-多态重写鼠标单击和移动事件

综合实例-电子时钟 知识点digiclock.hdigiclock.cppmain.cpp运行图 知识点 setWindowOpacity(0.5);//设置窗体透明度 QTimer* Timer new QTimer(this);//新建一个定时器 connect(Timer,SIGNAL(timeout()),this,SLOT(ShowTime())); Timer->start(1000);//启动定时器 digic…

稚晖君发布5款全能人形机器人,开源创新,全能应用

8月18日&#xff0c;智元机器人举行“智元远征 商用启航” 2024年度新品发布会&#xff0c;智元联合创始人彭志辉主持并发布了“远征”与“灵犀”两大系列共五款商用人形机器人新品——远征A2、远征A2-W、远征A2-Max、灵犀X1及灵犀X1-W&#xff0c;并展示了在机器人动力、感知、…

猫头虎分享:练习提示词Prompt有什么好方法?提高Prompt水平和质量

猫头虎是谁&#xff1f; 大家好&#xff0c;我是 猫头虎&#xff0c;别名猫头虎博主&#xff0c;擅长的技术领域包括云原生、前端、后端、运维和AI。我的博客主要分享技术教程、bug解决思路、开发工具教程、前沿科技资讯、产品评测图文、产品使用体验图文、产品优点推广文稿、…

CommonJS 和 ES6 模块化

CommonJS index.js // 导入 // 方式一&#xff1a;直接导入 // const student require(./student) // const school require(./school) // console.log(student) // console.log(school)// 方式二&#xff1a;解构导入 const { name, slogan, getTel } require(./school)/…

M-Fedya and Array(cf1793)

题意&#xff1a;小于相邻元素成为局部最小值&#xff0c;大于相邻元素成为局部最大值&#xff0c;a1和an为相邻元素&#xff0c;相邻数字相差1&#xff0c;给定局部最大值的和和局部最小值的和&#xff0c;构造函数 分析&#xff1a;让第一个为x&#xff0c;每次减1&#xff…

深扒大模型微调密码 - 从入门到技术小白都能看懂的神操作

朋友们&#xff0c;你们有没有听说过"大模型"和"微调"这两个概念呢&#xff1f;别着急,我们今天就来好好聊一聊! 想象一下,你有一个非常勤奋的小助理,它会尽最大努力帮你完成各种任务。不过有时候,它的知识储备和能力肯定有限,所以你得适时给它一些专门的…

Python基础知识点--总结

1. 注释 注释用于提高代码的可读性&#xff0c;在代码中添加说明文字&#xff0c;使代码更容易理解。 单行注释&#xff1a;使用 # 符号开头&#xff0c;注释内容在符号之后的行内。多行注释&#xff1a;使用三引号&#xff08; 或 """&#xff09;包裹注释内…

树莓派5 笔记25:第一次启动与配置树莓派5_8G

今日继续学习树莓派5 8G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下&#xff1a; 今日购得了树莓派5_8G版本&#xff0c;性能是同运…

springboot航班进出港管理系统--论文源码调试讲解

第2章 开发环境与技术 本章节对开发航班进出港管理系统管理系统需要搭建的开发环境&#xff0c;还有航班进出港管理系统管理系统开发中使用的编程技术等进行阐述。 2.1 Java语言 Java语言是当今为止依然在编程语言行业具有生命力的常青树之一。Java语言最原始的诞生&#xff…