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. css3学习之--伪类与圆角

    随着css3.0的发布到逐渐完善,目前已经大部分浏览器已经能较好地适配,所以写一些css3的学习经历,分享心得,主要以案例讲解为主,话不多说,今天以css3的新增的“圆角”属性来讲解,基于web画一个 ...

  2. SSM项目的搭建

    本文示例在如下环境下搭建一个Maven+Druid+SSM+Shiro+Mysql+PageHelper以及Mybatis Generator反向生成代码的项目 附上GitHub地址:https:// ...

  3. 请简述web开发中的兼容问题

    1,浏览器默认的内外边距不一样,所以用通用选择器*设置margin和padding来设置.2,块标签设置浮动后,有设置margin的情况下,在ie6下的margin比别的浏览器大.3,img标签会有默 ...

  4. Java_jdbc 基础笔记之十一数据库连接 (通用的查询方法)

    鉴于之前的查询方法,在这里我们可以写一个通用的方法 /** * 鉴于 student.和customer查询的方法有好多相同之处,在此可以写一个通用的方法 */ public <T> T ...

  5. Dockerfile实例

    一.先看最简单的例子,定制nginx镜像,打印出 <h1>Hello, Docker!</h1> Dockerfile文件: FROM nginx RUN echo '< ...

  6. PAT 甲级 1079 Total Sales of Supply Chain (25 分)(简单,不建树,bfs即可)

    1079 Total Sales of Supply Chain (25 分)   A supply chain is a network of retailers(零售商), distributor ...

  7. [LeetCode] 80. Remove Duplicates from Sorted Array II 有序数组中去除重复项 II

    Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twic ...

  8. 为文献管理软件Mendeley设置代理

    Mendeley由于某些原因无法在线同步,需要fq,在tools->option->connection中可以设置http代理或者sock5代理, sock5可以使用shadowsocks ...

  9. 总结IDEA和VS常用实用的快捷键

    整理了我一般撸码时使用下面两个IDE最常用到的快捷键: IntelliJ IDEA: 快捷搜索:Ctrl+F (Match Case:区分大小写,Words:全字匹配,Regex:正则匹配) 批量替换 ...

  10. (idea maven)mybatis-generator步骤

    1.新建一个maven项目,选择maven-archetype-webapp 点击next 2.项目名称,点击next 3.选择项目存放路径,然后点击finish 4.在main包下 添加包java和 ...