当前位置: 首页 > news >正文

主从复制实现Redis集群

主从复制实现Redis集群实验 (一主二从):

实验环境: 使用Docker 搭建 Redis 版本 5.0.5

打开一个终端窗口,在其中运行如下命令创建一个名为redis-master的Redis容器。注意,它的端口是6379 (本地的端口:映射到容器的端口)

 docker run -itd--name redis-master -p 6379:6379 redis:5.0.5(冒号后可跟特定的版本号;不写的话, 默认latest,即最新的版本)

新开一个命令窗口,在其中运行如下命令创建一个名为redis·slave1的容器。注意,它的端口是6380。这里是在一台电脑端口号来区别一台主Redis容器和另外两台从Redis容器。在真实项目里,多台Redis会部署在不同的服务器上 可以通过命令来创建从服务器

 docker run -itd --name redis-slave1 -p 6380:6380 redis:5.0.5
 docker run -itd --name redis-slave2 -p 6381:6381 redis:5.0.5

查看redis-master容器的ip地址, 这里是172.17.0.2

 docker inspect my_redis | grep IPAddress

在真实项目里,Redis服务器所在的IP地址是固定的 而容器启动的Redis服务器的IP地址是动态的,所以这里用上述命令来获取IP地址 在redis-master容器的命令窗口里,分别运行命令,进入命令行窗口

 docker exec -it 容器id可以(头几个字母就行), names也可以(能唯一标识容器即可) /bin/bashexit # 这个命令用于退出容器

可以使用redis-cli命令进入Redis的客户端命令行

 redis-cli

redis-cli

因为还没有配置, 所以 显示的从节点连接数为0。

然后从服务器中, 可以到由于此时还没有通过命令行设置主从模式,因此输出结果里依然能看到当前服务器是“主服务器”,同时没有携带从服务器。在redis-slave1容器的命令窗口里运行如下的命令,指定当前Redis服务器为从服务器。该命令的格式是slaveof IP地址端口号

在从节点上执行下述指令, 使得与主节点建立关系

slaveof 172.17.0.2 6379

主从服务器建立关系主从服务器建立关系

操作后, 主节点的状态

一主二从

从节点的状态

二从

主从复制模式能达到的效果: 主节点写东西, 从节点能够读取到数据

主从节点

在项目里除了可以用slaveof命令搭建主从模式的集群外,还可以用配置参数的方式来搭建,具体的步骤如下: 搭建主服务器的命令不变,并且还是用6379端口

docker run -itd my_redis -p 6379:6379 redis:5.0.5
// 配置从节点的配置文件 如: cd /usr/server  vim redisSlave1.conf
port 6380
slaveof 172.12.0.2 6379

配置文件

修改完配置文件后, 启动容器时需要进行映射 (本地:容器里), 并在启动后读指定的配置文件 (docker logs 容器id -> 能看到报错信息)

docker run -itd --name redis-slave1 -v /usr/server/redisSlave1.conf:/redisConfig/
redisSlave1.conf -p 6380:6380 redis:5.0.5 redis-server /redisConfig/redisSlave1.conf

开启容器

因为修改了端口 (配置文件中已修改), 所以从节点在启动 redis-cli的时候需要指定端口号

redis-cli -h 127.0.0.1 -p 6380

从节点的redis-cli

默认从节点只能读, 不能写

从节点

可以在配置文件中增加一行, 从而使得从节点可读可写

slave-read-only no # 指定该服务器可读可写

还有一些配置 能控制主从节点复制的操作

// 主节点的配置
min-slaves-to-write 2
min-slaves-max-1ag 15

第1行的参数表示实现主从复制的从服务器个数最少是2台,第2行的参数表示如果由第1行参数指定的从服务器个数(这里是2台)的心跳延迟时间(lag值)大于15秒,就不执行主从复制。
这两个条件是“或者”的关系,即只要出现从服务器个数小于2,或者2台从服务器的心跳延迟时间大于15秒,主服务器即停止主从复制的操作 (控制主从复制)

相关文章:

  • 远程连接 vscode 出错 “远程主机可能不符合 glibc 和 libstdc++ VS Code 服务器的先决条件”
  • Unity零基础到进阶 | Unity中的 RectTransformUtility 方法整理汇总
  • IP对讲终端SV-6002(防水)
  • java.lang.Class应用
  • QSettings使用示例
  • 网络安全“三保一评”深度解析
  • 在Spring Boot启动时禁止自动配置数据源相关的组件、@SpringBootApplication
  • 嵌入式学习day26 Linux
  • 算法打卡day3|链表篇|Leetcode 203.移除链表元素、 707.设计链表 、 206.反转链表
  • 免费享受企业级安全:雷池社区版WAF,高效专业的Web安全的方案
  • 倒计时42天
  • React入门简介
  • pyspark分布式部署随机森林算法
  • 学习python的第7天,她不再开放她的听歌榜单
  • 【es6 】中的装饰器 decorator 到底是什么,有什么用,和ts 中的装饰器decorator有啥区别
  • [nginx文档翻译系列] 控制nginx
  • [NodeJS] 关于Buffer
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 「译」Node.js Streams 基础
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Docker 笔记(2):Dockerfile
  • Docker: 容器互访的三种方式
  • download使用浅析
  • ES6--对象的扩展
  • IndexedDB
  • javascript 总结(常用工具类的封装)
  • mongo索引构建
  • rabbitmq延迟消息示例
  • Xmanager 远程桌面 CentOS 7
  • 基于axios的vue插件,让http请求更简单
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 力扣(LeetCode)56
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 浅谈Golang中select的用法
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用common-codec进行md5加密
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 在Docker Swarm上部署Apache Storm:第1部分
  • # 计算机视觉入门
  • #android不同版本废弃api,新api。
  • #Linux(帮助手册)
  • #stm32驱动外设模块总结w5500模块
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • ( 10 )MySQL中的外键
  • (10)STL算法之搜索(二) 二分查找
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (二)hibernate配置管理
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (一)VirtualBox安装增强功能
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)visual stdio 书签功能介绍