zoukankan      html  css  js  c++  java
  • Redis Sentinel集群搭建

    Redis是什么?

    • Redis是一个开源的(BSD许可的)内存数据结构存储,可以用作数据库、缓存和消息队列
    • 它支持字符串、哈希、列表、集合、带范围查询的排序集、位图、超语言和带半径查询的地理空间索引
    • Redis有内置的复制、Lua脚本、LRU回收、事务和不同级别的磁盘持久化,并通过Redis Sentinel和使用Redis集群自动分区提供高可用性

    Redis的工作模式

    1. 缓存模式,类似memcache,不需要启用持久化AOF和RDB
    2. 持久缓存模式,可启用持久化AOF或RDB,或者都启用,根据业务来决定
    3. 高可用模式,master/slave模式,保证业务的连续性,使用高可用软件配合;
    4. 数据存储模式,当作数据库来用,必须启用持久化AOF和RDB,可在允许数据丢失的情况下使用;不允许数据丢失的情况,建议使用mongodb替代

    Redis Sentinel的安装配置

    1.系统安装环境

    • 三台独立的linux host centos 7.4
    • 使用稳定的Redis3.2.12版本
    • Redis仅作缓存使用,这也是Redis最常用的地方
    • 在三个节点上先启动三个独立的Redis进程,再在三个节点上启动三个独立的Sentinel进程

    2.Redis单实例安装步骤

    yum install  ntpdate  lsof dos2unix nmap nc gcc-c++ lrzsz openssl-devel openssl  tree expect  man rsync sysstat -y
    cat >>/etc/sysctl.conf <<EOF
    vm.overcommit_memory = 1
    net.core.somaxconn = 16384
    EOF
    sysctl -p
    
    chmod +x /etc/rc.d/rc.local
    cat >> /etc/rc.local << 'EOF'
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    EOF
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    
    mkdir /soft
    cd /soft
    wget http://download.redis.io/releases/redis-3.2.12.tar.gz
    tar zxf redis-3.2.12.tar.gz
    /bin/mv redis-3.2.12 redis
    cd redis
    make distclean
    make
    mkdir -p /srv/redis/bin
    cd /srv/redis/
    mkdir -p {db,logs,conf}
    cd /soft/redis/src/
    for i in {redis-sentinel,redis-server,redis-cli};do /bin/cp -ap $i /srv/redis/bin/;done
    
    mkdir -p /srv/redis/db/6379/
    cat > /srv/redis/conf/6379.conf << 'EOF'
    protected-mode no
    daemonize yes
    pidfile /var/run/redis_6379.pid
    port 6379
    tcp-backlog 16384
    timeout 0
    tcp-keepalive 0
    loglevel notice
    logfile /srv/redis/logs/redis_6379.log
    requirepass "Abcd1234!"
    masterauth "Abcd1234!"
    databases 16
    save 900 1
    save 300 10
    save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb
    dir /srv/redis/db/6379/
    maxclients 20000
    maxmemory 8GB
    maxmemory-policy allkeys-lru
    slave-read-only yes
    appendonly no
    lua-time-limit 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 1000
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-entries 512
    list-max-ziplist-value 64
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    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
    hz 10
    EOF
    
    /srv/redis/bin/redis-server /srv/redis/conf/6379.conf
    #启动Redis进程
    

    需要在三个节点上都启动如上所示的Redis进程
    配置Redis的主从同步需要将其中两个Redis节点的配置文件中使用"SLAVEOF Redis主节点IP 6379"指向Redis主节点IP的方法进行配置

    3.Redis Sentinel安装步骤

    mkdir -p /srv/redis/redis_sentinel/
    cat > /srv/redis/conf/sentinel.conf << 'EOF'
    daemonize yes
    protected-mode no
    port 26389
    dir "/srv/redis/redis_sentinel/"
    logfile "/srv/redis/logs/redis_sentinel.log"
    sentinel monitor redismaster 192.168.1.60 6379 2
    sentinel auth-pass redismaster Abcd1234!
    sentinel down-after-milliseconds redismaster 30000
    sentinel parallel-syncs redismaster 1
    sentinel failover-timeout redismaster 180000
    EOF
    
    /srv/redis/bin/redis-sentinel /srv/redis/conf/sentinel.conf
    #启动Sentinel进程
    

    在Redis的主从同步配置完毕之后,在三个节点上都启动如上所示的Redis Sentinel进程
    Redis Sentinel的配置文件中应该指明Redis的主从集群的master服务器的IP和auth-pass

    Redis配置文件说明

    cat redis.conf 
    daemonize  yes
    ##启动daemonize模式,注意如果用daemon工具启动redis-server时设回false。
    pidfile /var/run/redis.pid
    port 6379
    timeout 0
    ##客户端和Redis服务端的连接超时时间,默认是0,表示永不超时
    tcp-keepalive 0
    ##检测tcp链接的超时时间,超时释放链接以接收新的链接
    tcp-backlog 16384
    ##此参数确定了TCP全开连接的数量,此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值
    requirepass 123456
    ##设置密码认证
    masterauth  123456
    ##设置slave访问master服务器的密码
    loglevel notice
    logfile /var/log/redis/redis.log
     ##指定日志文件
    databases 16
    save 900 1
    save 300 10
    save 60 10000
    ##如注释掉RDB的所有触发规则,在Master不保存RDB文件,即禁用RDB持久化
    ##RDB只作为slave时,只保留15分钟的规则,设置为15分钟保存一次就够了save 900 1
    slaveof 192.168.1.11 6379
    #slave服务器专用,后面配置master服务器地址
    stop-writes-on-bgsave-error yes
    ##当RDB持久化出现错误之后,是否继续提供写服务,默认是yes,禁止继续写入
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb
    dir /var/data/redis
    ##指定持久化文件及临时文件目录
    repl-timeout 120
    ##slave服务器专用,适当加大比如120,避免master实际还没倒掉就认为master倒了
    repl-backlog-size 1024M
    ##设置主从复制容量大小,这个 backlog 是一个用来在 slaves 被断开连接时
    ##存放 slave 数据的 buffer,所以当一个 slave 想要重新连接,通常不希望全部重新同步
    ##只是部分同步就够了,仅仅传递 slave 在断开连接时丢失的这部分数据
    ##这个值越大,salve 可以断开连接的时间就越长
    ##redis2.8版本才可用
    repl-backlog-ttl 86400
    ##在某些时候,master 不再连接 slaves,backlog 将被释放
    ##redis2.8版本才可用
    repl-disable-tcp-nodelay no
    ##指定向slave同步数据时,是否禁用socket的NO_DELAY选项
    ##若配置为"yes",则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,这样可以减少主从节点间的包数量并节省带宽
    ##但会增加数据同步到slave的时间
    ##若配置为"no",表明启用NO_DELAY,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少
    ##但需要更大的带宽
    ##通常情况下,应该配置为no以降低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes。
    slave-priority 100
    ##指定slave的优先级
    slave-serve-stale-data yes
    ##当slave服务器和master服务器失去连接后,或者当数据正在复制传输的时候
    ##如果此参数值设置"yes",slave服务器可以继续接受客户端的请求
    ##否则,会返回给请求的客户端如下信息"SYNC with master in progress"
    slave-read-only yes
    ##是否允许slave服务器节点只提供读服务
    ##在不只1个slave存在的部署环境下,当master宕机时,Redis Sentinel会将priority值最小的slave提升为master
    maxmemory 16GB
    ##设置为可用内存的1/2
    vm-enabled no
    #禁用虚拟内存
    maxmemory-policy allkeys-lru
    ##启用自动过期算法 ,仅在做缓存时使用
    ##redis做数据存储时,使用这个策略,maxmemory-policy noeviction 
    ##不让任何 key 过期,只是给写入操作返回一个错
    appendonly yes
    ##是否启用 AOF日志文件
    appendfilename appendonly.aof
    ##默认为appendonly.aof
    appendfsync everysec
    ##设置aof的同步频率,有三种选择always,everysec,no,默认是everysec表示每秒同步一次
    auto-aof-rewrite-percentage 100
    ##指定Redis重写aof文件的条件,默认是超过上次rewrite aof一倍(100%)时会启用rewrite aof
    ##综合考虑硬盘大小,可接受重启加载延时等,尽量的往大设置,减少AOF rewrite频率.
    auto-aof-rewrite-min-size 10GB
    ##指定触发第一次rewrite时的aof文件的最小大小,最少5G起跳
    no-appendfsync-on-rewrite no
    ##指定是否在后台aof文件rewrite期间调用fsync,默认为no,表示要调用fsync(无论后台是否有子进程在刷盘)
    ##Redis在后台写RDB文件或重写afo文件期间会存在大量磁盘IO,此时,在某些linux系统中,调用fsync可能会阻塞
    lua-time-limit 5000
    ##一个Lua脚本最长的执行时间,单位为毫秒,如果为0或负数表示无限执行时间,默认为5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-entries 512
    list-max-ziplist-value 64
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 256mb 64mb 60
    ##考虑Traffic及Slave同步时RDB加载所需时间,正确设置避免buffer撑爆client被关掉后又要重新进行全同步
    client-output-buffer-limit pubsub 32mb 8mb 60
    hz 10
    aof-rewrite-incremental-fsync yes
    ##aof rewrite过程中,是否采取增量文件同步策略,默认为"yes"
    ##rewrite过程中,每32M数据进行一次文件同步,这样可以减少aof大文件写入对磁盘的操作次数
    ##这个不跟appendfsync everysec 冲突,写缓冲原理,buffer
    
    大漠孤烟直 长河落日圆
  • 相关阅读:
    Unity 3(一):简介与示例
    MongoDB以Windows Service运行
    动态SQL中变量赋值
    网站发布IIS后堆栈追踪无法获取出错的行号
    GridView Postback后出错Operation is not valid due to the current state of the object.
    Visual Studio 2010 SP1 在线安装后,找到缓存在本地的临时文件以便下次离线安装
    SQL Server 问题之 排序规则(collation)冲突
    IIS 问题集锦
    linux下安装mysql(ubuntu0.16.04.1)
    apt-get update 系列作用
  • 原文地址:https://www.cnblogs.com/yjb007/p/9558008.html
Copyright © 2011-2022 走看看