Redis学习-读写分离(主从复制)

为什么要进行读写分离?虽然redis性能已经很优秀,但是当请求的数据量过大、请求过于频繁时,也会达到瓶颈,因此,配置读写分离可以进一步提高redis的性能,master只管写,slave进行读操作

引用《redis实战》中的性能测试:

SUNIONSTORE命令的性能:主频2.4GHz的双核处理器,处理两个分别包含10 000个元素的集合,需要花费7、8毫秒的时间

使用docker搭建主从复制demo

  1. 拉取镜像

    docker pull redis:3.2
    
  2. 在本地创建好文件夹,准备好配置文件,docker容器中默认是没有redis.conf配置文件的

    mkdir redis
    cd redis
    

    redis官网下载redis3.2安装包并解压,将其中的redis.conf文件复制到当前目录一份,并修改其中的几个配置

    # 找到bind配置,注释掉是不管用的,一定要改成0.0.0.0
    # 之前一直出现 master_link_status:down 就是这个问题
    bind 0.0.0.0
    # 持久化保存的目录
    dir /data/
    

    然后复制两份

    cp redis.conf redis-6380.conf
    cp redis.conf redis-6381.conf
    
  1. 启动docker容器(一定要在刚刚创建的redis目录下启动,因为用了$PWD来获取当前路径)

    # 启动两个redis
    docker run -p 6380:6379 --name redis-6380 -v $PWD/redis-6380.conf:/etc/redis/redis.conf -v $PWD/data-6380:/data -d redis:3.2 redis-server /etc/redis/redis.conf 
    docker run -p 6381:6379 --name redis-6380 -v $PWD/redis-6381.conf:/etc/redis/redis.conf -v $PWD/data-6380:/data -d redis:3.2 redis-server /etc/redis/redis.conf 
    

    简单介绍参数:

    -p 端口映射

    -v 目录挂载

    -d 后台启动

  2. 查看容器IP地址

docker inspect redis-6380
# 在底部会看到  "IPAddress": "172.17.0.3",即该容器的ip地址
# 注意,在docker内部容器之间进行通信的时候,端口号是6379,而不是6380!
  1. 进入容器,查看两个redis实例的状态

    # 进入容器
    docker exec -it redis-6380 /bin/bash
    # 使用redis客户端连接工具
    root@c90995ac2b06:/data# redis-cli
    # 查看当前主从状态
    127.0.0.1:6379> info replication
    role:master
    connected_slaves:0
    

    另一个也是这样子,就不贴代码了,可以看到,当两个redis单独启动的时候,各自都是master

  2. 使用slaveof命令,将redis-6381变成redis-6380的从服务器

    # 进入redis-6381容器
    docker exec -it redis-6381 /bin/bash
    # 使用redis客户端连接工具
    root@c90995ac2b06:/data# redis-cli
    # 将当前节点添加为redis-6380的从节点
    127.0.0.1:6379> slaveof 172.17.0.3 6379
    ok
    
  3. 查看一下两个节点状态

    redis-6380

    127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=172.17.0.4,port=6379,state=online,offset=4285,lag=1
    

    redis-6381

    127.0.0.1:6379> info replication
    # Replication
    role:slave
    master_host:172.17.0.3
    master_port:6379
    # 注意这个状态如果是down,说明添加不成功
    master_link_status:up
    
  4. 测试

    请自行测试吧,使用redis-cli在redis-6380做一个set操作,然后在redis-6381去get一下,看有没有就好啦

  5. 附:

    上面我们设置主从服务器时,是在从服务器使用命令slaveof ip port,但是docker容器在重新启动后,该配置就会失效,所以,我们可以在本地挂载目录修改配置文件redis-6381.conf,修改slaveof配置,直接配置上主服务器ip和端口号就好了。

    slaveof 172.17.0.3 6379
    

主从复制原理

主从复制的启动过程

步骤 主服务器操作 从服务器操作
1 (等待接收命令) 连接mster,发送SYNC命令
2 执行bgsave,使用缓冲区记录bgsave之后的所有写命令 根据配置决定使用现有数据还是向client返回错误
3 bgsave完毕,向slave发送rdb文件,并继续使用缓冲区记录写命令 清空旧数据,载入master发来的rdb文件
4 rdb发送完毕,向slave发送缓冲区中的写命令 加载rdb完成,想通常一样接收命令请求
5 缓冲区的命令发送完毕,此时,每执行一个写命令,向slave发送相同的命令 执行缓冲区中发来的命令,此后,接收并执行master传来的写命令

注意事项:

  1. 从服务器在进行数据同步时,会清空自己原本持久化的数据!
  2. 建议主服务器使用50%-65%的内存,剩余的内存用来执行bgsave命令和创建记录写命令的缓冲区
  3. redis不支持主主复制
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357