zoukankan      html  css  js  c++  java
  • redis的主从模式搭建及注意事项

    前言:本文先分享下如何搭建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的主从模式就已经完成了

  • 相关阅读:
    【NOIP2016提高组】 Day1 T3 换教室
    【NOIP2016 Day1 T2】天天爱跑步
    web@前端--html,css,javascript简介、第一个页面(常用标签简介)
    MySQL--视图view、触发器trigger、事务(start transaction)、存储过程(特殊的数据逻辑处理函数)、流程控制(if,case....)
    MySQL--pymysql模块
    MySQL--(了解)可能会用到的内置函数
    MySQL--详细查询操作(单表记录查询、多表记录查询(连表查询)、子查询)
    MySQL--表操作(约束条件foreign key关联表 多对1,多对多,1对1)
    MySQL--表操作(innodb表字段数据类型、约束条件)、sql_mode操作
    MySQL基本语句、存储引擎
  • 原文地址:https://www.cnblogs.com/cmyxn/p/9414457.html
Copyright © 2011-2022 走看看