redis主从复制

1.redis主从同步

  • Redis集群中的数据库复制是通过主从同步来实现的

  • 主节点(Master)把数据分发从节点(slave)

  • 主从同步的好处在于高可用,Redis节点有冗余设计

  • 原理:

    1. 从服务器向主服务器发送 SYNC 命令。
    2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
    3. 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
    4. 主服务器将缓冲区储存的所有写命令发送给从服务器执行。 1、在开启主从复制的时候,使用的是RDB方式的,同步主从数据的
    2、同步开始之后,通过主库命令传播的方式,主动的复制方式实现
    3、2.8以后实现PSYNC的机制,实现断线重连

2.环境准备

  • redis支持多实例的功能,一台机器上,可以运行多个单个的redis数据库
  • 环境准备,准备3个redis数据库,达到1主 2从配置
主库:6379
从库:6380
从库:6381 1.创建一个文件夹:
[root@xujunk data]#mkdir msredis
[root@xujunk data]#cd msredis
2.创建配置文件:6379.conf 6380.conf 6381.conf
[root@xujunk msredis]#vim 6379.conf
port 6379
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dbfilename dump.rdb
dir /data/6379
#将6379.conf 里面6379更改,生成新的文件
[root@xujunk msredis]#sed "s/6379/6380/g" 6379.conf > 6380.conf
[root@xujunk msredis]#sed "s/6379/6381/g" 6379.conf > 6381.conf 3.创建文件夹:用于存放数据,日志
mkdir -p /data/{6379,6380,6381}

3.具体实现:

1.启动redis: 在当前配置目录下
[root@xujunk msredis]#redis-server 6379.conf
[root@xujunk msredis]#redis-server 6380.conf
[root@xujunk msredis]#redis-server 6381.conf 2.检查启动情况:#表示启动成功
[root@xujunk msredis]#ps -ef|grep redis
"""
root 28228 1 0 20:04 ? 00:00:00 redis-server *:6379
root 28244 1 0 20:04 ? 00:00:00 redis-server *:6380
root 28252 1 0 20:04 ? 00:00:00 redis-server *:6381
""" #连接之前先学几个命令:
[root@xujunk msredis]#redis-cli -p 6379 info
"""
...
# Replication
role:master 主节点是master
connected_slaves:0 从节点 连接数为0
master_replid:91eb4ec34cb636f61c88c36b3c8736078598644f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
...
"""
#此方法也可以查看库从属信息
[root@xujunk msredis]#redis-cli info replication
"""
# Replication
role:master 主节点是master
connected_slaves:0 从节点 连接数为0
master_replid:91eb4ec34cb636f61c88c36b3c8736078598644f
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
"""
3.开启主从复制功能(将3个不同端口库连接起来)
#在6380 和6381数据库上 ,配置主从信息,通过参数形式修改配置,临时生效,注意要写入配置文件
#将6380,6381设置6379从库
[root@xujunk msredis]#redis-cli -p 6380 slaveof 127.0.0.1 6379
OK
[root@xujunk msredis]#redis-cli -p 6381 slaveof 127.0.0.1 6379
OK 4.此时检查6379复制信息,以及6380 6381的复制信息
[root@xujunk msredis]#redis-cli -p 6379 info replication
"""
# Replication
role:master #主节点
connected_slaves:2 #2个从节点
slave0:ip=127.0.0.1,port=6380,state=online,offset=98,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=98,lag=1
master_replid:562912ec0c945d538bc093fa93e1e02841666070
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:98
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:98
"""
#连接redis-cli 6379主库
[root@xujunk msredis]#redis-cli -p 6379
127.0.0.1:6379> set title "hello world" #连接redis-cli 6380从库
[root@xujunk msredis]#redis-cli -p 6380
127.0.0.1:6380> keys *
1) "title" #从库只能读,主库可写入,达到读写分离
  • 刚才介绍是通过参数修改情况下达到读写分离,只是临时的,更改配置文件方式,也很简单:
#6380.conf

port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
slaveof 127.0.0.1 6379
appendonly yes #实现持久化存储的
appendfsync everysec #实现持久化存储的 #6381.conf
port 6381
daemonize yes
pidfile /data/6381/redis.pid
loglevel notice
logfile "/data/6381/redis.log"
dbfilename dump.rdb
dir /data/6381
slaveof 127.0.0.1 6379
appendonly yes #实现持久化存储的
appendfsync everysec #实现持久化存储的

4.模拟主从故障,手动切换master-slave身份

1.杀死主库
[root@xujunk msredis]#kill -9 30159
2.手动切换 6381为新的主库,需要先关闭它的从库身份
[root@xujunk msredis]#redis-cli -p 6381 slaveof no one
OK
3.修改6380的新主库是 6381
[root@xujunk msredis]#redis-cli -p 6380 slaveof 127.0.0.1 6381
OK

Part_four:redis主从复制的更多相关文章

  1. [原]Redis主从复制各种环境下测试

    Redis 主从复制各种环境下测试 测试环境: Linux ubuntu 3.11.0-12-generic 2GB Mem 1 core of Intel(R) Core(TM) i5-3470 C ...

  2. NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索

    一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一 ...

  3. 【转】 NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索

    一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一 ...

  4. redis+Keepalived实现Redis主从复制

    redis+Keepalived实现Redis主从复制: 环境:CentOs6.5Master: 10.10.10.203Slave:   10.10.10.204Virtural IP Addres ...

  5. 深入剖析 redis 主从复制

    主从概述 redis 支持 master-slave(主从)模式,redis server 可以设置为另一个 redis server 的主机(从机),从机定期从主机拿数据.特殊的,一个 从机同样可以 ...

  6. 谈谈redis主从复制的重点

    Redis主从复制的配置十分简单,它可以使从服务器是主服务器的完全拷贝.下面是关于Redis主从复制的几点重要内容: Redis使用异步复制.但从Redis 2.8开始,从服务器会周期性的应答从复制流 ...

  7. 配置Redis主从复制

    [构建高性能数据库缓存之redis主从复制][http://database.51cto.com/art/201407/444555.htm] 一.什么是redis主从复制? 主从复制,当用户往Mas ...

  8. Redis主从复制及状态监测

    参考链接:http://www.cnblogs.com/morvenhuang/p/4184262.html #配置redis主从复制: #安装redis- master slave #修改slave ...

  9. Redis主从复制(Master/Slave)

    Redis主从复制(Master/Slave) 修改配置文件 拷贝多个redis.conf文件分别配置如下参数: 开启daemonize yes pidfile port logfile dbfile ...

随机推荐

  1. hdu1501 Zipper[简单DP]

    目录 题目地址 题干 代码和解释 参考 题目地址 hdu1501 题干 代码和解释 最优子结构分析:设这三个字符串分别为a.b.c,如果a.b可以组成c,那么c的最后一个字母必定来自a或者b的最后一个 ...

  2. JdkDynamicAopProxy 拦截器链的获得与递归执行

    JdkDynamicAopProxy类的invoke方法 1.获得拦截器链 List<Object> chain = this.advised.getInterceptorsAndDyna ...

  3. 性能优化中CPU、内存、磁盘IO、网络性能的依赖

    系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...

  4. 善用mysql中的FROM_UNIXTIME()函数和UNIX_TIMESTAMP()函数

    我们经常会面临要从数据库里判断时间,取出特定日期的查询.但是数据库里储存的都是unix时间戳,处理起来并不是特别友好.幸而MYSQL提供了几个处理时间戳的函数,可以帮助我们在查询的时候,就将时间戳格式 ...

  5. [转]Oracle 查询表外键相关信息

    原文地址:https://www.csdn.net/gather_27/MtTaUgxsNzYxMi1ibG9n.html 查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询): s ...

  6. typescript - 8.命名空间

    基础 略. https://www.tslang.cn/docs/handbook/namespaces.html 多文件中的命名空间(一个文件分解为几个) 现在,我们把Validation命名空间分 ...

  7. Python3基础 list(dict) 使用 * 扩充时,出现字典元素重复问题

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  8. 013-在 Shell 脚本中调用另一个 Shell 脚本的三种方式

    如下: fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. exec: exec path/to/foo.sh source: sourc ...

  9. IDEA中不编译src/main/java目录下的*.xml文件

    使用idea构建maven项目时不编译src/main/java目录下写的mapper.xml文件,这是找到pom.xml文件,在<build>节点下添加如下代码: <!-- map ...

  10. Bootstrap 下拉框点击没反应

    应该是第一次点击下拉框没反应,我把HTML复制出来单独运行,都是好的,就是在项目里面无法运行 哪里的js出问题了?找不到原因,控制台里的js也不报错 解决方法: $(function () { $(' ...