首页 > 数据库 >Redis---主从复制

Redis---主从复制

时间:2023-04-18 20:22:41浏览次数:36  
标签:主从复制 Redis redis 192.168 --- 6379 master 11.101 root

一、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:up


192.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"

标签:主从复制,Redis,redis,192.168,---,6379,master,11.101,root
From: https://www.cnblogs.com/sre-chan/p/17327581.html

相关文章

  • k-mer
    k-mer是一种用于描述序列数据的概念。在生物信息学中,k-mer通常指的是长度为k的连续子序列。例如,在dna序列中,4-mer(k=4)是四个连续的碱基;在蛋白质序列中,3-mer(k=3)是三个相邻的氨基酸。k-mer在基因组学、转录组学和蛋白质组学等领域中广泛使用。它们可以用于许多任务,例如:序列比对、元......
  • 63、Prometheus-独立部署的Prometheus监控K8S集群
    Kubernetes学习目录1、简介1.1、原因这里我们以prometheus的配置解析如获取各各所需的文件和相关的原理问题,不会细写通过标签如果去获取数据的规则,先把获取K8S的数据链路打通,有助于后面的深入。研究四五天,网上搜了,获取相关token和ca.crt文件这块都是忽略了事,踏了不少坑。1.2......
  • 69、K8S-Helm-template导出独立的yaml文件
    1、将helm项目导出为独立yaml文件-实践1.1、需求有时候,我们需要导出yaml分析yaml编写情况,而不是直接部署到k8s,这个时候,就需要使用template来实现了1.2、开始操作1.2.1、创建存放yaml文件的目录helm_prometheus]#cd/opt/helm_prometheus/&&mkdirprometheus-tplhelm_p......
  • 索引结构-结构的比较
     InnoDB引擎选择使用B+tree索引结构的原因:1.相对于二叉树,层级更小,搜索效率高2.对于B-tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致页中存储的键值减少,指针跟着减少,要同样保存大量数据,只能增加树的高度,导致性能降低......
  • Docker快速入门 三(dockerfile常用命令,dockerfile构建django项目,docker私有仓库,docker-
    目录Docker一、Dcokerfile常用命令二、Dockerfile构建Django项目三、Docker私有仓库1、简介2、镜像传到官方仓库3、镜像分层4、搭建私有仓库四、Docker-conpose1、Docker-conpose部署项目1、新建flask项目2、编写dockerfile3、编写docker-conpose的yml文件4、启动docker-compoes2......
  • Redis 一、(简介,redis-linux下载,启动方式,常用配置,应用场景,数据结构和内部编码,字符类型)
    目录Redis一、Redis1、简介2、RedisLinux下载安装3、redis启动方式3、1.简单启动3、2.动态参数启动3、3.配置文件启动5、常用配置6、redis应用场景7、redis通用命令8、数据结构和内部编码9、redis字符串类型Redis一、Redis1、简介#Redis特性1)速度快10wops(每秒10万......
  • 2023-4-18查漏pair
    pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。pair的实现是一个结构体,主要的两个成员变量是firstsecond因为是使用struct不是class,所以可以直接使......
  • 2023-4-18补缺map
    map是STL的一个关联容器,它提供一对一的hash。第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value);map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实......
  • redis 二、(哈希类型,列表类型,集合类型,有序集合,pipline机制,发布订阅,bitmap位图,HyperLogL
    目录Redis一、哈希类型二、列表类型三、集合类型四、有序集合五、慢查询六、pipline与事务七、发布订阅八、bitmap位图九、HyperLogLogRedis一、哈希类型###1---hget,hset,hdelhgetkeyfield#获取hashkey对应的field的value时间复杂度为o(1)hsetkeyfieldvalue#设......
  • vue2源码-八、依赖收集的过程
    依赖收集的过程前言使用真实节点替换原始节点,主要涉及以下步骤:1.新老节点的更新方案。2.虚拟节点与真实节点映射。3.实现新老节点的替换。依赖收集已经完成了Vue的两大核心部分:响应式数据和数据渲染,即完成了整个Vue的初始化流程:当newVue()时,执行_init初始化,通过moun......