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
    
    大漠孤烟直 长河落日圆
  • 相关阅读:
    scrapy-redis使用以及剖析
    完全理解 Python 迭代对象、迭代器、生成器
    Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
    HTTP状态码
    Py西游攻关之RabbitMQ、Memcache、Redis
    Django contenttypes 应用
    cookie和session 以及Django中应用
    RESTful规范
    rest_framework框架的认识
    vue 总结
  • 原文地址:https://www.cnblogs.com/yjb007/p/9558008.html
Copyright © 2011-2022 走看看