Redis---主从复制

news/2024/5/19 22:48:04/

一、redis主从复制

主从复制:是存储数据的服务结构
主服务器:接受客户端连接的服务器
从服务器:自动与主服务器保持数据一致的服务器

配置主从复制

1、环境准备

主服务器    主机名:master     IP地址:192.168.11.101/24
从服务器    主机名:node01     IP地址:192.168.11.102/24客户端     主机名:node02     IP地址:192.168.11.103/24

主从服务器都要安装redis服务,分别修改redis监听的地址为192.168.11.101,192.168.11.102

2、192.168.11.101主服务器,修改监听的IP地址

root@Master:~# ss -lntup | grep 6379
tcp   LISTEN 0      128        127.0.0.1:6379      0.0.0.0:*    users:(("redis-server",pid=1147,fd=6))
root@Master:~# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
root@Master:~# ss -lntup | grep 6379
root@Master:~# vim /etc/redis/6379.conf
bind 192.168.11.101

3、修改完配置文件重启服务

root@Master:~# /etc/init.d/redis_6379 start 
Starting Redis server...

4、登录数据库

root@Master:~# redis-cli -h 192.168.11.101 -p 6379
192.168.11.101:6379> ping
PONG

5、查看当期服务器主从信息

192.168.11.101:6379> INFO replication
# Replication
role:master # 主节点
connected_slaves:0
master_replid:88c2e017cb0ea8cbd01a4f3874b314f8de1775b2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
192.168.11.101:6379>

6、node01从服务器

修改监听的IP地址

# 先停服务器
root@node01:~# /etc/init.d/redis_6379 stop 
Stopping ...
Redis stopped# 修改配置文件
root@node01:~# vim /etc/redis/6379.conf
# 修改客户端连接redis服务的IP地址
bind 192.168.11.102

7、重启服务检查端口监听

root@node01:~# /etc/init.d/redis_6379 start 
Starting Redis server...
root@node01:~# ss -lntup |grep 6379
tcp   LISTEN 0      128    192.168.11.102:6379      0.0.0.0:*    users:(("redis-server",pid=7978,fd=6))

8、连接主机检查主从信息

PS:在这还没添加从服务器信息,所以看到是master是正常的!!!

root@node01:~# redis-cli -h 192.168.11.102 -p 6379
192.168.11.102:6379> ping
PONG
192.168.11.102:6379> INFO replication
# Replication
role:master
connected_slaves:0
master_replid:f151ec960f14af322c6b07946a074a30a4c2c731
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

9、添加slave节点,将本机设置为node01的从服务器,node01端口号为6379

192.168.11.102:6379> SLAVEOF 192.168.11.101 6379
OK
192.168.11.102:6379> INFO replication
# Replication
role:slave
master_host:192.168.11.101
master_port:6379
master_link_status:down

错误信息:

解决方法:

关闭防火墙和selinux

root@Master:~# systemctl is-active firewalld.service
active
root@Master:~# systemctl stop firewalld.service
root@Master:~# systemctl disable firewalld.service
root@Master:~# setenforce 0

关闭连接 重启服务

# 第一次做忘了这条关闭连接命令 苦
root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdown
root@node01:~# 
root@node01:~# /etc/init.d/redis_6379 restart 
/var/run/redis_6379.pid does not exist, process is not running
Starting Redis server...

10、以上是临时配置,修改配置文件,将本机永久配置为node01的从服务器

root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdown
root@node01:~# vim  /etc/redis/6379.conf
slaveof 192.168.11.101  6379		#修改,指定主服务器的IP地址和端口号

11、重启服务

root@node01:~# /etc/init.d/redis_6379 start
root@node01:~# redis-cli -h 192.168.11.102 -p 6379
192.168.11.102:6379> info replication		#查看slave服务器的主从信息
# Replication
role:slave                  #从服务器
master_host:192.168.11.101    #主服务器IP地址
master_port:6379            #主服务器端口号
master_link_status:up       #和主服务器的连接状态:up

12、验证查看主服务器主从配置信息

192.168.11.101:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.11.102,port=6379,state=online,offset=1330,lag=0
master_replid:ecc43c0169695c02204b624365e75859defc0aec
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1330
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1330

13、测试主从同步,插入数据

# 添加数据
192.168.11.101:6379> set school qinghua
OK# 查看数据
192.168.11.101:6379> GET school
"qinghua"192.168.11.102:6379> KEYS *
1) "school"
192.168.11.102:6379> GET school
"qinghua"

14、反客为主:将从库恢复为主库,在node01上操作

root@node01:~# redis-cli -h 192.168.11.101 -p 6379
192.168.11.101:6379> ping
PONG
192.168.11.101:6379> SLAVEOF no one
OK
192.168.11.101:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.11.102,port=6379,state=online,offset=1853,lag=0
192.168.11.101:6379> exit

二、redis主从复制

主服务器    主机名:master      IP地址:192.168.11.101/24
从服务器    主机名:node01      IP地址:192.168.11.102/24
从服务器    主机名:node02      IP地址:192.168.11.103/24

1、三台都要安装redis服务,分别修改redis监听的地址为

192.168.11.101 192.168.11.102 192.168.11.103

2、由于之前master和node01做实验已经修改过,所以这次直接修改node02即可

# 停止服务
root@node02:~# /etc/init.d/redis_6379 stop 
Stopping ...
Redis stopped# 修改配置文件
root@node02:~# vim /etc/redis/6379.conf
bind 192.168.11.103

3、重启服务并监听端口

root@node02:~# /etc/init.d/redis_6379 start 
Starting Redis server...
root@node02:~# ss -lntup |grep redis
tcp   LISTEN 0      128    192.168.11.103:6379      0.0.0.0:*    users:(("redis-server",pid=9860,fd=6))

4、master设置连接密码

root@Master:~# redis-cli -h 192.168.11.101 -p 6379 shutdown
501 requirepass plj123
root@Master:~# /etc/init.d/redis_6379 start
root@Master:~# redis-cli -h 192.168.11.101 -p 6379 -a plj123
192.168.4.51:6379> info  replication
# Replication
role:master
192.168.11.101:6379> set a 1
192.168.11.101:6379> set b 1
192.168.11.101:6379> set c 1

5、node01|2主机设置带验证的从库(从库配置一样,截取数据俩边混着搞得,看对应的主机信息即可)

192.168.11.103:6379>
192.168.11.103:6379> SLAVEOF 192.168.11.101 6379

6、关掉连接,添加密码

root@node01:~#  redis-cli -h 192.168.11.102 -p 6379 shutdown
root@node01:~# vim /etc/redis/6379.conf 
289 masterauth plj123

7、重启服务

root@node01:~# /etc/init.d/redis_6379 start
192.168.11.102:6379> info replication		
# Replication
role:slave
master_host:192.168.11.101
master_port:6379
master_link_status:up

8、查看数据是否同步

192.168.11.103:6379> INFO replication
# Replication
role:slave
master_host:192.168.11.101
master_port:6379
master_link_status:up192.168.11.103:6379> KEYS *
1) "school" # 数据已经同步

9、测试当其中的一台从服务器停止,另外一台还能继续同步数据,

模拟node01宕机

root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdow

10、master存数据

192.168.11.101:6379> set AAA CCC
OK
192.168.11.101:6379> KEYS *
1) "school"
2) "AAA"

11、node02查看

192.168.11.103:6379> KEYS *
1) "AAA"
2) "school"

12、node01机器恢复

root@node01:~# /etc/init.d/redis_6379 restart
root@node01:~# ss -lntup |grep redis
tcp   LISTEN 0      128    192.168.11.102:6379      0.0.0.0:*    users:(("redis-server",pid=15384,fd=6))

13、测试数据是否同步

#宕机期间的数据自动同步
root@node01:~# redis-cli -h 192.168.11.102 -p 6379 
192.168.11.102:6379> ping
PONG
192.168.11.102:6379> KEYS *
1) "AAA"
2) "school"

http://www.ppmy.cn/news/48274.html

相关文章

企业想注销境外投资备案应该怎么做?

我们今天就来说一下关于境外投资备案的注销,有办理的需求,当然就有注销的需求。如果您当初想去海外投资并购一家公司,因此办理了境外投资备案,但是由于种种原因可能没有办法投资下去了,那么这个时候我们就需要做境外投…

git服务器搭建

ubuntu搭建git服务器 安装git:apt install git建立用户账户:用来存放git远程仓库,这里只是个ubuntu账户,没有特殊含义; adduser gitServer 设置账户密码: passwd gitServer 创建仓库目录:该目录…

代码随想录算法训练营第三十八天|理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

文章目录 理论基础509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯 理论基础 动态规划-DP 动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的 背包问题: 动态规…

Progress ThemeBuilder crack

Progress ThemeBuilder crack 自定义输入将覆盖自定义日期输入和下拉列表。 Fluent主题中的图表不应用系列颜色。 撤消重做操作会导致重复以前编辑过的变量。 拆分器折叠的拆分条模板错误。 ThemeBuilder是一个多功能工具,可以帮助您创建视觉样式,并将其…

Redis缓存MySQL数据库存储二者如何保证数据一致性

文章目录 Redis缓存MySQL数据库存储二者如何保证数据一致性数据一致性问题缓存穿透缓存雪崩 Redis缓存MySQL数据库存储一致性解决方案方案一:读写数据库时同步更新缓存方案二:使用消息队列异步更新缓存 总结 Redis缓存MySQL数据库存储二者如何保证数据一…

背锅侠?软件测试各类bug分类定位,从功能到性能超细总结......

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 遇到功能性问题&a…

软件测试概念篇(下)|开发模型与测试模型

作者:爱塔居 专栏:软件测试 作者简介:大三学生,希望同大家一起进步! 文章简介:主要介绍软件生命周期、瀑布模型和螺旋模型两个开发模型,V模型和W模型两个测试模型 文章目录 目录 文章目录 一、软…

IOC容器与DI依赖注入示例

IOC容器与DI依赖注入示例 IOC深入理解IOC示例: DI深入理解DI示例 IOC深入理解 我们先通过几个问题来加深一下对IOC的理解 (1)Spring是使用IOC容器来管理bean对象的,我们主要管理什么? 主要管理项目中所使用到的类对象,比如(Service层对像和…

在现成的3D打印机上进行实验理论:一种数据孪生的攻击探测框架

在现成的3D打印机上提供了一种DT中攻击探测框架的DT解决方案的实验演示,作为说明性CPMS资源。通过网络安全DT对打印机正常运行、异常运行和攻击三种情况下的实验数据进行收集和分析,得出攻击检测结果。实验装置概述如下图所示。该实验研究是在现实世界设…

tokenURI的实现方式

做数字藏品最重要的function是tokenURI(tokenId)。 实现1 基本路径tokenID ERC721 function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {_requireMinted(tokenId);string memory baseURI _baseURI();return bytes(baseURI).length &…

HarmonyOS原子化服务卡片整改、下架、升级失败部分原因及处理办法

随着HarmonyOS应用体系相关规则、团队的不断发展和完善,早期上架运营的HarmonyOS原子化服务卡片,很多都收到了整改、下架的通知,主要集中在用户协议、隐私声明、服务卡片的设计规范性等细节方面的问题;需要进行优化调整升级才行。…

源码:LeakCanary

一、介绍 自动检测内存泄漏的检查工具 二、使用 debugImplementation com.squareup.leakcanary:leakcanary-android:2.5debugImplementation只在debug模式的编译和最终的debug apk打包时有效 Memory Profiler 使用步骤 生成的内存泄漏快照 会放在sdcard/Download/leakcanar…

SSR在天猫优品大促会场的探索实践

BBC 发现其网站加载时间每增加一秒,用户便会流失 10%。为提高页面的秒开率,我们不断探索着优化策略,仅仅在浏览器领域下的优化已经满足不了我们的极致要求,开始往服务端方向不断探索。本文将讨论业务接入SSR的几个问题&#xff1a…

Spring Security --- formLogin配置

目录 环境准备 配置自定义登录表单页面 配置登录成功的跳转页面方式 配置登录失败的跳转页面方式 前端表单参数获取 CustomWebSecurityConfigurerAdapter配置类代码示例 环境准备 创建springboot项目引入spring security框架引入thymeleaf模板引擎 配置自定义登录表单页面…

水平居中、垂直居中的几种方法

水平居中的方法: 若是针对inline, 内联块inline-block, 内联表inline-table, inline-flex元素及img,span,button等元素 父元素设置 text-align:center; 绝对定位;弹性布局;grid网格布局 不定宽块状元素 设置 margin:auto; 绝对定…

第二章:uniapp整合axios之真机测试两问题

第二章:uniapp整合axios之真机测试两问题 上一章节,笔者编写了uniapp整合axios并实现前后端跨域请求的方案,完成了这些基本配置后,在浏览器端的测试基本是可以完成了,但是当笔者将程序运行到手机时,却出现…

springboot mybatis-plus 对接 sqlserver 数据库 批处理的问题 批量更新添加数据 方案三

问题: 在对接 sqlserver数据库的时候 主子表 保存的时候 子表批量保存 使用的 mybatis-plus提供的 saveOrUpdateBatch saveBatch 这两个方法 但是 报错 报错内容为 : com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果。 框…

springboot web项目统一时区方案

背景 springboot项目国际化中,会遇到用户选择的时间和最终存到数据库的时间不一致,可能就是项目开发和部署时的时区没有处理好,导致时间转换出现了问题。 先了解时区都有哪些: 1.GMT:Greenwich Mean Time 格林威治…

Kubernetes Operator开发

案例一 Traefik Operator开发 1.kubebuilder 创建项目 2.Crontroller开发与部署 开发环境准备 kubebuilder 介绍 CRD的开发与部署 Crontroller开发与部署 Operator功能设计 借助operator完成 和企业内部注册中心打通 这里以Traefiketcd的模式为例进行演示说明 在这里etcd p…

1.2和1.3、GCC

1.2和1.3、GCC 1.2和1.3、GCC1.2.1、什么是GCC1.2.2、编程语言的发展1.2.3、GCC工作流程1.2.4、gcc和g的区别1.2.5、GCC常用参数选项实际操作①接下来进行预处理操作(test.c为需要预处理的源代码,test.i为要生成的目标代码)②汇编操作&#x…