我们知道要避免单点故障,即保证高可用,便需要冗余(副本)方式提供集群服务。

而Redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。

主从复制概述

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。

前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。

主从复制的作用主要包括:

  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
  • 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;
    • 尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
  • 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

主从库之间采用的是读写分离的方式。

  • 读操作:主库、从库都可以接收;
  • 写操作:首先到主库执行,然后,主库将写操作同步给从库。

主从复制建立

准备好3个redis服务器

db-51
db-52
db-53

快速部署3个redis节点

ssh-keygen
ssh-copy-id root@10.0.0.52
ssh-copy-id root@10.0.0.53 yum install rsync -y
rsync -avz /opt/redis* root@10.0.0.52:/opt/
rsync -avz /opt/redis* root@10.0.0.53:/opt/ # 修改配置文件
sed -i 's/51/52/g' /opt/redis_6379/conf/redis_6379.conf
sed -i 's/51/53/g' /opt/redis_6379/conf/redis_6379.conf # 创建数据目录
mkdir -p /www.yuchaoit.cn/redis/data/ # 启动3个redis数据库
/opt/redis/src/redis-server /opt/redis_6379/conf/redis_6379.conf # 检查3个redis
/opt/redis/src/redis-cli ping
/opt/redis/src/redis-cli dbsize # 主库写入测试数据
for i in {1..10000};do redis-cli set k_${i} v_${i} && echo "key --- ${i} is ok.";done # 检查
[root@db-51 /www.yuchaoit.cn/redis/data]#redis-cli dbsize
(integer) 10000

配置主从关系

建立主从关系后,master-slave的数据操作就是实时的了
从库执行命令
[root@db-52 /opt/redis_6379/conf]#/opt/redis/src/redis-cli
127.0.0.1:6379> replicaof 10.0.0.51 6379
OK
127.0.0.1:6379> dbsize
(integer) 10000 [root@db-53 ~]#/opt/redis/src/redis-cli
127.0.0.1:6379> replicaof 10.0.0.51 6379
OK
127.0.0.1:6379> dbsize
(integer) 10000
127.0.0.1:6379>

永久配置主从关系

写入配置文件

# replicaof <masterip> <masterport>
# 目前主流,新版redis 5 改为了这个参数。

检查复制关系

slave

[root@db-53 ~]#/opt/redis/src/redis-cli
127.0.0.1:6379> role
1) "slave"
2) "10.0.0.51"
3) (integer) 6379
4) "connected"
5) (integer) 210 127.0.0.1:6379> role
1) "slave"
2) "10.0.0.51"
3) (integer) 6379
4) "connected"
5) (integer) 280 127.0.0.1:6379> info replication
# Replication
role:slave
master_host:10.0.0.51
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:238
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:e6a27417c0d97271d1ccffae5923158737cef627
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:238
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:238
127.0.0.1:6379>

master

127.0.0.1:6379> role
1) "master"
2) (integer) 266
3) 1) 1) "10.0.0.52"
2) "6379"
3) "266"
2) 1) "10.0.0.53"
2) "6379"
3) "266"
127.0.0.1:6379> 127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.0.0.52,port=6379,state=online,offset=322,lag=0
slave1:ip=10.0.0.53,port=6379,state=online,offset=322,lag=0
master_replid:e6a27417c0d97271d1ccffae5923158737cef627
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:322
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:322
127.0.0.1:6379>

试试主从关系

# master
# slave

取消slave身份

127.0.0.1:6379> REPLICAOF no one
OK
127.0.0.1:6379> role
1) "master"
2) (integer) 586
3) (empty list or set)
127.0.0.1:6379> dbsize
(integer) 10001

redis主从细节问答

1. slave节点只读,不可写
2. slave不会故障转移
3. 主从故障需要人工介入的地方
- 主库的IP地址
- 从节点要重新 REPLICAOF 设置复制角色 4. 从库建立主从关系时,会清空自己的数据,慎重同步的对象。
5.无论是master,slave节点,在进行主从关键建立等大修改的操作时,务必先对持久化数据做好备份。slave也可以有RDB备份。

主库设置了密码

# master主库 redis_6379.conf
requirepass chaoge888 # slave从库必须设置密码,否则无法建立主从管理 以认证的方式连接到master。 如果master中使用了“密码保护”,slave必须交付正确的授权密码,才能连接成功。 “requirepass”配置项指定了当前server的密码。 此配置项中值需要和master机器的“requirepass”保持一致。 # slave配置文件 [root@db-53 ~]#tail -2 /opt/redis_6379/conf/redis_6379.conf
masterauth chaoge888
replicaof 10.0.0.51 6379

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

  1. Redis面试篇 -- Redis主从复制原理

        Redis一般是用来支撑读高并发的,为了分担读压力,Redis支持主从复制.架构是主从架构,一主多从, 主负责写,并且将数据复制到其它的 slave 节点,从节点负责读. 所有的读请求全部走从 ...

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

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

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

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

  4. 深入剖析 redis 主从复制

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

  5. [转载] 深入剖析 redis 主从复制

    转载自http://www.cnblogs.com/daoluanxiaozi/p/3724299.html 主从概述 redis 支持 master-slave(主从)模式,redis server ...

  6. redis主从复制详述

    一.主从复制详述 原理其实很简单,master启动会生成一个run id,首次同步时会发送给slave,slave同步命令会带上run id以及offset,显然,slave启动(初次,重启)内存中没 ...

  7. (转)深入剖析Redis主从复制

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

  8. 深入剖析Redis主从复制

    [http://sofar.blog.51cto.com/353572/1413024/]   [Redis 主从复制的内部协议和机制]   一.主从概述 Redis 支持 Master-Slave( ...

  9. Redis主从复制简单介绍

    由于本地环境的使用,所以搭建一个本地的Redis集群,本篇讲解Redis主从复制集群的搭建,使用的平台是Windows,搭建的思路和Linux上基本一致! (精读阅读本篇可能花费您15分钟,略读需5分 ...

  10. Redis分布式篇

    Redis分布式篇 1 为什么 需要 Redis 集群 1.1 为什么需要集群? 1.1.1 性能 ​ Redis 本身的 QPS 已经很高了,但是如果在一些并发量非常高的情况下,性能还是会受到影响. ...

随机推荐

  1. 力扣670(java)-最大交换(中等)

    题目: 给定一个非负整数,你至多可以交换一次数字中的任意两位.返回你能得到的最大值. 示例 1 : 输入: 2736输出: 7236解释: 交换数字2和数字7.示例 2 : 输入: 9973输出: 9 ...

  2. 一遇到复杂分析查询就卡顿?MySQL分析实例了解一下

    随着企业数据爆发式增长,MySQL分析查询卡顿问题越来越多,用户时效性不能保证,精细化运营诉求不能满足.如何能无缝对接业务库,实现毫秒级针对万亿级数据进行即时的多维分析透视和业务探索,MySQL分析实 ...

  3. Flutter+FaaS一体化任务编排的思考与设计

    作者:闲鱼技术-古风 Flutter+Serverless三端一体研发架构,客户端不仅仅是编写双端的代码,而是扩展了客户端的工作边界,形成完整的业务闭环.在新的研发模式落地与实践的过程中,一直在思考如 ...

  4. DTCC 2020 | 阿里云王涛:阿里巴巴电商数据库上云实践

    简介: 第十一届中国数据库技术大会(DTCC2020),在北京隆重召开.大会以"架构革新 高效可控"为主题,重点围绕数据架构.AI与大数据.传统企业数据库实践和国产开源数据库等内容 ...

  5. [Go] go build 减小二进制文件大小的几种方式

    第一种 是去除不需要的调试信息: go build -ldflags "-s -w" main.go 实测 19M 减小为 15M,幅度 2% 第二种 压缩 UPX: the Ul ...

  6. SQL server 数据库巡检

    SELECT name FROM sysobjects where xtype='u' and name <>'XzryGzGrant' AND name LIKE 'XzryGzGran ...

  7. CMDB开发(三)

    6.API验证 # 加密复习 #1.简单的对称加密,token是固定的 客户端请求: import requests # 1.自定义token值 token = 'cxiong_token' # to ...

  8. linux文本三剑客之grep及正则表达式详解

    linux文本三剑客之grep及正则表达式详解 目录 linux文本三剑客之grep及正则表达式详解 1. grep命令详解 2. 正则表达式 2.1 基本正则表达式 2.2 扩展正则表达式 1. g ...

  9. 启动vite和electron项目配置多个主进程

    推荐 concurrently 点击查看代码 "dev": "concurrently \"nodemon --exec electron . \" ...

  10. 日常Bug排查-连接突然全部关闭

    日常Bug排查-连接突然全部关闭 前言 日常Bug排查系列都是一些简单Bug的排查.笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材. Bug现场 最近碰到一个问题,一台机器上的连接数在达到 ...