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. Ubuntu 16.04与Win10双系统双硬盘安装图解

    一.先做准备工作.建议:在当前系统所在的硬盘上,留一片空的主分区安装Ubuntu系统. 2.划分多大的空间够?安装的过程中需要涉及到分区,为了以免日后重装,我的建议是如下分区:1).5G,主分区,空间 ...

  2. python3.6安装 zipimport.ZipImportError: can't decompress data; zlib not available【转】

    python3.6.3 安装: .tgz cd Python- ./configure make make altinstall `make altinstall` , 报错: zipimport.Z ...

  3. Redis慢日志查询

    Redis slowlog 是个什么 redis的slow log记录了那些执行时间超过规定时长的请求.执行时间不包括I/O操作(比如与客户端进行网络通信等),只是命令的实际执行时间(期间线程会被阻塞 ...

  4. LC 968. Binary Tree Cameras

    Given a binary tree, we install cameras on the nodes of the tree. Each camera at a node can monitor  ...

  5. Win10 LTSC 2019 长期支持版

    win 10 LTSB 2016 文件名:cn_windows_10_enterprise_2016_ltsb_x86_dvd_9057089.iso (2.62GB) 语言: Chinese – S ...

  6. centos7.6环境编译安装php-7.2.24修复最新 CVE-2019-11043 漏洞

    先编译安装php-7.2.24,然后编译安装扩展 主版本地址地址:https://www.php.net/distributions/php-7.2.24.tar.gz # 编译 php-7.2.24 ...

  7. openresty开发系列36--openresty执行流程之6日志模块处理阶段

    openresty开发系列36--openresty执行流程之6日志模块处理阶段 一)header_filter_by_lua 语法:header_filter_by_lua <lua-scri ...

  8. 服务器推送(Server push)技术总结

    1. 短轮询 ajax按一定间隔去请求 2. 长轮询(long Polling) Long Polling的实现很简单,可分为四个过程: 发起Polling发起Polling很简单,只需向服务器发起请 ...

  9. Servlet2.5版本和Servlet3.0版本

    在学习这节之前你需要在你自己的电脑进行如下配置: 配置Java运行环境:JDK+JRE的安装配置,参考博客Windows下配置Java开发环境: 安装Eclipse:参考博客Windows下配置Jav ...

  10. 又一神器框架:linq.js

    1.支持jQuery插件的方式.jquery.linq.min.js. 2.也可以像普通js方法一样使用.linq.min.js. 3.当然用习惯VS的童鞋肯定希望有个良好的智能感知,是的,它支持. ...