美文网首页redis
redis5.0.4搭建主从复制+哨兵监控

redis5.0.4搭建主从复制+哨兵监控

作者: tony_zhang | 来源:发表于2020-02-07 15:54 被阅读0次
    • 准备环境
      redis5.0.4、四台centos7
      一主三从;每个节点都需安装redis并分别配置redis.conf和sentinel.conf;
      示例IP:
      (192.168.50.126、192.168.50.129、192.168.50.128、192.168.50.124)
    • 安装依赖
    yum install gcc gcc-c++ -y
    
    1. 修改配置文件redis.conf
    #redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。
    daemonize yes
    #当redis以守护进程方式运行时,redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定文件路径。
    pidfile "/var/run/redis.pid"
    #指定redis监听端口,默认端口号为6379。
    port 6379
    #设置tcp的backlog,backlog是一个连接队列,backlog队列总和=未完成三次握手队列+已完成三次握手队列。在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。注意Linux内核会将这个值减小到/proc/sys/net/core/somaxconn 的值,所以需要确认增大somaxconn和tcp_max_syn_backlog两个值来达到想要的。
    tcp-backlog 511
    #当客户端闲置多长时间后关闭连接,如果指定为0,表示永不关闭
    timeout 0
    #设置检测客户端网络中断时间间隔,单位为秒,如果设置为0,则不检测,建议设置为60
    tcp-keepalive 0
    #指定日志记录级别,redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose。
    loglevel notice
    #指定日志文件路径。
    logfile "/usr/local/redis/redis.log"
    #设置数据库数量,默认值为16,默认当前数据库为0,可以使用select<dbid>命令在连接上指定数据库id
    databases 16
    #指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合, 表示900秒内有1个更改就将数据同步到数据文件
    save 900 1
    #默认值为yes,即当bgsave快照操作出错时停止写数据到磁盘,这样后面写错做均会失败,为了不影响后续写操作,故需将该项值改为no。
    stop-writes-on-bgsave-error yes
    #指定存储至本地数据库时是否压缩数据,默认是yes,redis采用LZF压缩,如果为了节省CPU时间, 可以关闭该选项,但会导致数据库文件扁的巨大。
    rdbcompression yes
    #对rdb文件进行校验
    rdbchecksum yes
    #指定本地数据库文件名,默认值为dump.rdb
    dbfilename "dump.rdb"
    #指定本地数据库存放目录
    dir "/usr/local/redis"
    #参数设置成yes,主从复制中,从服务器可以响应客户端请求;设置成no,主从复制中,从服务器将阻塞所有请求,有客户端请求时返回“SYNC with master in progress”;
    slave-serve-stale-data yes
    #设置slave为只读模式
    slave-read-only yes
    #默认不使用diskless同步方式
    repl-diskless-sync no
    #无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒。
    repl-diskless-sync-delay 5
    # slave端向server端发送pings的时间区间设置,默认为10秒。
    repl-disable-tcp-nodelay no
    # slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。
    slave-priority 100
    #设置redis连接密码,命令提供密码,默认关闭
    requirepass "Hangzhou@123"
    # 开启AOF模式
    appendonly yes
    # 保存数据的AOF文件名称
    appendfilename "appendonly.aof"
    # fsync模式
    appendfsync everysec
    #进行rewrite时,是否需要fsync
    no-appendfsync-on-rewrite no
    # aof文件增长比例,指当前aof文件比上次重写的增长比例大小。aof重写即在aof文件在一定大小之后,重新将整个内存写到aof文件当中,以反映最新的状态(相当于bgsave)。这样就避免了,aof文件过大而实际内存数据小的问题(频繁修改数据问题)。
    auto-aof-rewrite-percentage 100
    # aof文件重写最小的文件大小,即最开始aof文件必须要达到这个文件时才触发,后面的每次重写就不会根据这个变量了(根据上一次重写完成之后的大小).此变量仅初始化启动redis有效.如果是redis恢复时,则lastSize等于初始aof文件大小。
    auto-aof-rewrite-min-size 64mb
    #指redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败.
    aof-load-truncated yes
    #限制脚本的最长运行时间,默认为5秒钟。
    lua-time-limit 5000
    #表示slowlog的划定界限,只有query执行时间大于slowlog-log-slower-than的才会定义成慢查询,才会被slowlog进行记录。slowlog-log-slower-than设置的单位是微妙,默认是10000微妙,也就是10ms。
    slowlog-log-slower-than 10000
    #表示慢查询最大的条数,当slowlog超过设定的最大值后,会将最早的slowlog删除,是个FIFO队列。
    slowlog-max-len 128
    # redis延时监控系统在运行时会采样一些操作,以便收集可能导致延时的数据根源。通过 LATENCY命令 可以打印一些图样和获取一些报告,方便监控;这个系统仅仅记录那个执行时间大于或等于预定时间(毫秒)的操作;这个预定时间是通过latency-monitor-threshold配置来指定的;当设置为0时,这个监控系统处于停止状态。
    latency-monitor-threshold 0
    # keyspace键通知
    notify-keyspace-events ""
    #指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法。
    hash-max-ziplist-entries 512
    #表示当hash中的value长度超过64的时候转为dict。
    hash-max-ziplist-value 64
    #决定列表长度在多少范围内使用ziplist编码。
    list-max-ziplist-entries 512
    list-max-ziplist-value 64
    #如果set中整型元素的数量不超过512时,Redis将会采用该特殊编码。
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    hll-sparse-max-bytes 3000
    # redis将会在每秒中抽出10毫秒来对主字典进行重新散列化处理,这有助于尽可能的释放内存。
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    #默认设为10,提高它的值将会占用更多的cpu,当然相应的redis将会更快的处理同时到期的许多key,以及更精确的去处理超时。
    hz 10
    #每次批量写入磁盘的数据量由aof-rewrite-incremental-fsync参数控制,默认为32M,避免单次刷盘数据过多造成硬盘阻塞。
    aof-rewrite-incremental-fsync yes
    # master设置密码的情况下同步数据使用。
    masterauth "Hangzhou@123"
    #关闭protected-mode模式,此时外部网络可以直接访问, 开启protected-mode保护模式,需配置bind ip或者设置访问密码。
    protected-mode yes
    #可用直接配置主节点ip。
    #replicaof 192.168.50.126 6379
    
    1. 修改防火墙
      cat >> /etc/sysctl.conf<<EOF
      vm.overcommit_memory = 1
      EOF;
      sysctl –p;
      systemctl stop firewalld.service;
      firewall-cmd –state;
    2. 启动redis
      cd src
      ./redis-server /usr/local/redis/redis.conf
      或者 /usr/local/redis/src/redis-server /usr/local/redis/redis.conf
    3. 连接客户端
      cd src
      ./redis-cli -a Hangzhou@123
      或者 /usr/local/redis/src/redis-cli -a Hangzhou@123
      注:Hangzhou@123为redis密码。
    4. 设置主从节点
      客户端连接每个节点,将126节点设置为master, 除126节点分别设置
      slaveof 192.168.50.126 6379
      配置完成,使用下列命令查看各个节点角色
      redis-cli -a Hangzhou@123
      info Replication


      -

      在redis中 添加key ,测试数据是否会同步。

    • 配置sentinel哨兵
    1. 修改配置文件sentinel.conf
    #是否保护模式。
    protected-mode no
    #不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
    sentinel deny-scripts-reconfig yes
    #告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效。master-name只能包含英文字母,数字,和“.-_”这三个字符需要注意的是master-ip 要写真实的ip地址而不要用回环地址(127.0.0.1)。
    sentinel monitor mymaster 192.168.50.126 6379 2
    #指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行。
    sentinel down-after-milliseconds mymaster 5000
    #如果在该时间(ms)内未能完成failover操作,则认为该failover失败。
    sentinel failover-timeout mymaster 15000
    sentinel auth-pass mymaster Hangzhou@123
    #端口
    port 26379
    dir "/usr/local/redis"
    #选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。
    sentinel config-epoch mymaster 1
    sentinel leader-epoch mymaster 1
    #发现了三个从节点
    sentinel known-slave mymaster 192.168.50.128 6379
    sentinel known-slave mymaster 192.168.50.129 6379
    sentinel known-slave mymaster 192.168.50.124 6379
    sentinel current-epoch 1
    # 哨兵将会在gossip hello消息中使用指定的ip地址,而不是自动发现的本地地址。
    sentinel announce-ip "192.168.50.126"
    
    1. 启动哨兵
      首先启动redis.conf开启26379端口,其次使用下列命令挨个启动哨兵sentinel。
      cd src
      ./redis-sentinel /usr/local/redis/sentinel.conf &

      使用slaveof在客户端设置主从关系,启动哨兵模式后,master和slave角色可能会互换,应在启动哨兵模式后再次确认主从关系。
    2. 测试哨兵模式
      哨兵模式启动后,129重新被选为master。
      将129机器关机,使用poweroff命令。

    xheel连接的redis服务端窗口会检测到变化,129窗口连接已断开。 查看128节点日志变化,原master节点已经变为126。 重新查看各节点信息(124、128展示亦如此)
    • 重启宕机节点
    1. 重启129节点;
    2. 启动redis;
    3. 启动哨兵129节点上的哨兵;
    4. 使用xheel连接129节点查看redis重启后的角色是master还是slave;


    相关文章

      网友评论

        本文标题:redis5.0.4搭建主从复制+哨兵监控

        本文链接:https://www.haomeiwen.com/subject/zlgmxhtx.html