前言:本文先分享下如何搭建redis的主从模式配置,以及主从模式配置的注意事项。后续会继续分享如何实现一个高可用的redis服务,redis的Sentinel 哨兵模式及集群搭建。

安装:

1,yum install gcc-c++

  • 安装环境

2,wget http://download.redis.io/releases/redis-4.0.2.tar.gz

  • 获取压缩包
  • 我的安装路径:/usr/local/redis

3,tar -zxvf redis-4.0.2.tar.gz

  • 解压

4,cd redis-4.0.2

  • 切换到对应目录

5,make

自此,redis已经安装成功

6,./src/redis-server redis.conf

  • 启动redis,指定配置文件

服务启动成功如下:

7,Ctrl+c

  • 退出当前服务
  • 由于不是以守护线程的方式去启动,所以需要Ctrl+c停止服务

8,vi redis.conf

  • 修改配置文件
  • daemonize no 修改为 daemonize yes ,以守护线程启动

9,./src/redis-server redis.conf

  • 再次启动redis

10,ps -ef |grep redis

  • 查看redis服务

11,./src/redis-cli

  • 启动客户端链接
  • 键入info,查看当前redis信息
  • 键入shutdown 停止redis服务

单机redis就安装和调试完了。

redis 主从模式配置

主从模式: redis的主从模式,使用异步复制,slave节点异步从master节点复制数据,master节点提供读写服务,slave节点只提供读服务(这个是默认配置,可以通过修改配置文件 slave-read-only 控制)。master节点可以有多个从节点。配置一个slave节点只需要在redis.conf文件中指定 slaveof master-ip master-port 即可。

本示例:一个master节点有两个slave节点

配置:

1,cd /usr/local/redis/redis-4.0.2

  • 切换到当前redis安装路径

2, mkdir config

  • 新建一个文件夹,存放redis的配置文件

3,在config下,新建三个配置文件,如下:

cd config

vi master-6739.conf

bind 0.0.0.0
port 6379
logfile "6379.log"
dbfilename "dump-6379.rdb"
daemonize yes
rdbcompression yes

vi slave-6380.conf

bind 0.0.0.0
port 6380
logfile "6380.log"
dbfilename "dump-6380.rdb"
daemonize yes
rdbcompression yes
slaveof 192.168.81.135 6379

vi slave-6381.conf

bind 0.0.0.0
port 6381
logfile "6381.log"
dbfilename "dump-6381.rdb"
daemonize yes
rdbcompression yes
slaveof 192.168.81.135 6379

master-6739.conf,为主节点配置文件,slave-6380.conf,slave-6381.conf为从节点配置文件

在从节点的配置文件中使用:slaveof 指定master节点

4,启动三台reids服务

[root@localhost redis-4.0.2]# ./src/redis-server config/master-6379.conf
[root@localhost redis-4.0.2]# ./src/redis-server config/slave-6380.conf
[root@localhost redis-4.0.2]# ./src/redis-server config/slave-6381.conf

查看一下redis服务

测试主从模式

a,先分别连上三台Redis服务,获取key为name的值,通过-p 指定连接那个端口的redis服务

[root@localhost redis-4.0.2]# ./src/redis-cli -p 6379
127.0.0.1:6379> get name
(nil)
[root@localhost redis-4.0.2]# ./src/redis-cli -p 6380
127.0.0.1:6380> get name
(nil)
[root@localhost redis-4.0.2]# ./src/redis-cli -p 6381
127.0.0.1:6381> get name
(nil)
#获取的值都为空

b,给master节点set一个key

[root@localhost redis-4.0.2]# ./src/redis-cli -p 6379
127.0.0.1:6379> set name cmy
OK
127.0.0.1:6379> get name
"cmy"

c,slave节点直接读取key为name的值

[root@localhost redis-4.0.2]# ./src/redis-cli -p 6380
127.0.0.1:6380> get name
"cmy"
[root@localhost redis-4.0.2]# ./src/redis-cli -p 6381
127.0.0.1:6381> get name
"cmy"

d,slave节点只提供读服务,不能进行写入操作

127.0.0.1:6381> set age 23
(error) READONLY You can't write against a read only slave.

注意

使用主从模式时应注意matser节点的持久化操作,matser节点在未使用持久化的情况详情下如果宕机,并自动重新拉起服务,从服务器会出现丢失数据的情况。

首先,禁止matser服务持久化

127.0.0.1:6379> CONFIG SET save ""
OK

在master节点set一个值

127.0.0.1:6379> set age 23
OK

slave节点可以get到age的值

127.0.0.1:6380> get age
"23"

关掉master节点服务

127.0.0.1:6379> shutdown
not connected>

slave节点此时仍可以get到age的值

127.0.0.1:6380> get age
"23"

重启master服务,此时获取不到age的值

[root@localhost redis-4.0.2]# ./src/redis-server config/master-6379.conf
[root@localhost redis-4.0.2]# ./src/redis-cli -p 6379
127.0.0.1:6379> get age
(nil)

slave节点此时在获取age的值为空,数据丢失

[root@localhost redis-4.0.2]# ./src/redis-cli -p 6380
127.0.0.1:6380> get age
(nil)

数据丢失的原因:因为master服务挂了之后,重启服务后,slave节点会与master节点进行一次完整的重同步操作,所以由于master节点没有持久化,就导致slave节点上的数据也会丢失掉。所以在配置了Redis的主从模式的时候,应该打开主服务器的持久化功能。

到这,redis的主从模式就已经完成了

redis的主从模式搭建及注意事项的更多相关文章

  1. 【Redis】Redis 主从模式搭建

    主从模式介绍 Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据 ...

  2. 实战录 | Redis的主从服务器搭建

    <实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全平台工程师田全磊,将带来Red ...

  3. 【Redis】Redis Sentinel 哨兵模式搭建

    Redis Sentinel介绍 Redis Sentinel是Redis的官方高可用性解决方案 Redis Sentinel为Redis提供高可用性.实际上,这意味着使用Sentinel可以创建一个 ...

  4. Redis进阶:Redis的哨兵模式搭建

    Redis进阶:Redis的哨兵模式搭建 哨兵机制介绍 单机版的Redis存在性能瓶颈,Redis通过提高主从复制实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接的备 ...

  5. redis(二)redis的主从模式和集群模式

    redis(二)redis的主从模式和集群模式 主从模式 集群模式 主从模式 redis的主从模式,指的是针对多台redis实例时候,只存在一台主服务器master,提供读写的功能,同时存在依附在这台 ...

  6. 【Nginx】如何基于主从模式搭建Nginx+Keepalived双机热备环境?这是最全的一篇了!!

    写在前面 最近出版了<海量数据处理与大数据技术实战>,详情可以关注 冰河技术 微信公众号,查看<我的<海量数据处理与大数据技术实战>出版啦!>一文. 也有不少小伙伴 ...

  7. Redis docker 主从模式与哨兵sentinel

    更多技术记录,请参考软件开发 | 编程 | RustFisher 为实现redis的高可用,我们采用主从模式加哨兵的方法. 一主二从三哨兵,共启动6个redis容器.本文示例在同一个服务器上进行操作. ...

  8. Redis哨兵(sentinel)模式搭建

    一.Sentinel介绍 之前骚了一波Redis的简介及应用场景,今天试了下他的哨兵模式: Sentinel是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentine ...

  9. 深入剖析Redis系列: Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

随机推荐

  1. [aspnetcore.apidoc]一款很不错的api文档生成工具

    AspNetCore.ApiDoc 简单徐速一下为什么选用了aspnetcore.apidoc 而没有选用swagger 最初我们也有在试用swagger,但总是有些感觉,感觉有点不满意,就但从api ...

  2. Android PAI (PlayAutoInstall)预装APK 功能

    最近刚找到工作,是手机方案公司,刚接触手机系统预装的APP,以及解决方案MTK平台下预装APP的bug,也接触到了Launcher的东西. 然后接触到了第一个需求 PAI预装APK功能 下面是我用到的 ...

  3. 作业三——安卓系统文件助手APP原型设计

    原型地址:https://modao.cc/app/X2totLUvbcxBwtJGk6AI04FZnGD4s08#screen=s43A40176351539085924682 MVP支持的浏览器: ...

  4. Oracle的ORA-02292报错:违反完整性约束,已找到子记录

    第一种方法: 第一步就是找到子表的记录: select a.constraint_name, a.table_name, b.constraint_name from user_constraints ...

  5. [spring boot] Table 'yhm.hibernate_sequence' doesn't exist

    在使用该注解时:@GeneratedValue要注意的几点: @GeneratedValue注解的strategy属性提供四种值: -AUTO主键由程序控制, 是默认选项 ,不设置就是这个 -IDEN ...

  6. 在搭建tesseract-OCR环境中遇到问题和反省

    Tesseract,一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎,特点是开源,免费,支持多语言,多平台. 在搭 ...

  7. Ubuntu下crontab启动、重启、关闭命令

    在Ubuntu14.04环境下,利用crontab编写shell脚本程序,定时执行php相关程序.在这个过程中,经常使用到的crontab命令如下: (root权限下) crontab启动:/etc/ ...

  8. SQLServer之修改DEFAULT约束

    使用SSMS数据库管理工具修改DEFAULT约束 1.连接数据库.选择数据表->右键点击->选择设计. 2.在表设计器窗口->选中要修改的数据列->在列属性中找到默认值绑定-& ...

  9. springboot项目屏蔽mq或者mongodb的监控日志输出

    最近写项目,用的是springboot,其中用到了rabbitmq和mongodb,配置完成 项目启动后,会输出如下日志: mongodb和mq的检测,会一直打印日志,这样会影响开发人员的测试. 如何 ...

  10. JavaScript简单了解

    一.JavaScript 的诞生历史 在最初的时候 JS 主要解决的问题是一些服务器端语言(perl)对数据的 验证功能,在js 出现之前要对表单的数据进行验证需要将数据提交到服务器 端之后才能验证数 ...