zoukankan      html  css  js  c++  java
  • redis---哨兵模式

    步骤

    搭建redis哨兵模式的大致步骤为

    1. 安装依赖 yum install gcc 
    2. 安装redis
    3. 修改redis.conf配置文件
    4. 修改sentinel.conf配置文件

    哨兵模式主要做了两件事

    1. 监控主数据库和从数据库是否正常运行。
    2. 主数据库出现故障时自动将从数据库转换为主数据库。

    1. 安装redis

    下载地址:https://redis.io/download

    解压: tar zxvf redis-4.0.10.tar.gz 

    编译安装

    # 1. 进入到解压后的文件夹
    cd /usr/redis-4.0.10
    
    # 2. 执行make命令
    make 
    # 如果执行make命令报错,error: jemalloc/jemalloc.h: No such file or directory,则需要指定内存管理方式 
    make MALLOC=libc

    # 3. 进入
    cd /usr/redis-4.0.10/src
    make install

    启动服务端测试

    cd /usr/redis-4.0.10/src
    ./redis-server  ../redis.conf

    启动客户端测试

    cd /usr/redis-4.0.10/src
    ./redis-cli

    成功进入下一步

    配置redis.conf

    配置master

     1 # NETWORK 设置
     2 # 关闭保护模式
     3 # 注意:redis3.0.x版本没有该参数, 声明会报错
     4 protected-mode no 
     5 # 绑定IP地址,可以通过ifconfig 获取Ip地址
     6 # bind 172.168.3.166
     7 # 保持默认值,也可以修改
     8 port 6381
     9 # Client 端空闲断开连接的时间,0表示不断开
    10 # timeout 30 
    11 # GENERAL 设置
    12 # 默认值是no,把值修改为yes,以后台模式运行
    13 daemonize yes 
    14 # 日志文件的位置
    15 logfile /usr/redis/log/redis-server_sentinel.log
    16 # SNAPSHOTTING 设置
    17 # SNAPSHOTTING文件的路径
    18 # dir /usr/redis/redisdb
    19 # 设置密码
    20 masterauth root
    21 requirepass root
    22 # APPEND ONLY MODE 设置
    23 # 默认值是No,意思是使用RDB全量持久化的方式。Yes是使用AOF增量持久化的方式
    24 # appendonly yes  
    25 # appendfsync always 
    26 # 关闭集群模式
    27 # cluster-enabled no 

    配置slave

    # NETWORK 设置
    protected-mode no
    # bind 172.168.3.167
    port 6381
    # timeout 30
    # GENERAL 设置
    daemonize yes
    logfile /usr/redis/log/redis-server_sentinel.log 
    # SNAPSHOTTING 设置
    # dir /usr/redis/redisdb 
    # 设置密码
    masterauth root
    requirepass root
    # REPLICATION 设置
    # 主服务器的Ip地址和Port端口号
    slaveof 172.168.3.166 6381
    # 如果slave 无法与master 同步,设置成slave不可读,方便监控脚本发现问题
    # slave-serve-stale-data no
    # APPEND ONLY MODE 设置
    # appendonly yes 
    # appendfsync always
    # 关闭集群模式
    # cluster-enabled no 

    配置sentinel.conf

    # 关闭保护模式,需要将redis.conf中的属性也设置为no
    protected-mode no
    # 开启守护线程
    daemonize yes
    # sentinel默认监听26379端口,所以运行前必须确定该端口没有被别的进程占用
    bind 127.0.0.1 172.168.3.166 # 对应服务器相应的ip, 也可直接注掉
    port 26379
    # 工作路径
    # dir /usr/redis/sentinel-work
    # 指明日志文件名
    logfile /usr/redis/sentinellog/sentinel.log
    # 配置监听的IP和port,以及将主服务器判断为失效并下线至少需要几个sentinel的同意
    sentinel monitor mymaster1 192.168.3.166 6379 2
    # 配置验证密码
    sentinel auth-pass mymaster root
    # 多长时间(默认30秒)不能使用后标记为sdown状态(单位毫秒)
    # sentinel down-after-milliseconds mymaster 30000
    # 指定了最多可以有多少个slave同时对新的master进行同步
    # sentinel parallel-syncs mymaster 1
    # 指定故障转移超时时间(单位毫秒)
    # sentinel failover-timeout mymaster 180000

    开启防火墙

    ## 查看防火墙状态,若显示running则为开启防火墙状态
    firewall-cmd –state
    ## 开启防火墙
    systemctl start firewalld.service
    ## 查看已开放端口号
    firewall-cmd --list-ports
    ## 开放指定端口号,下方示例端口号为6379
    firewall-cmd --zone=public --add-port=6379/tcp –permanent
    ## 重启防火墙,如此,端口号才算开放成功
    firewall-cmd --reload
    # centos防火墙更多配置参考:https://blog.csdn.net/qq_36850813/article/details/91353864

     配置完成,接下来开始启动

    启动

    启动redis

    # 指定redis配置文件启动
    cd /usr/redis-4.0.10/src
    ./redis-server  ../redis.conf 

    启动哨兵

    # 第一种
    cd /usr/redis/redis-4.0.10/src 
    ./redis-sentinel  ../sentinel.conf
    # 第二种
    ./redis-server   ../sentinel.conf --sentinel
    # 以上两种方式,都必须指定一个配置文件sentinel.conf;
    # 如果不指定,将无法启动sentinel

    查看集群状态

    # 查看集群状态,必须使用ip 和port进行连接, 否者查询不了
    ./redis-cli -h 172.168.3.166 -p 6381 -a root
    172.168.3.166:6381> info Replication

    检查是否安装成功(步骤)

    1. 只能master写,slave只读
    2. master写之后,slave可以读取到
    3. kill掉master,会在slave中重新 分配master

    扩展

    主从复制的流程

    1. Slave端在配置文件中添加了slave of指令,于是Slave启动时读取配置文件,初始状态为REDIS_REPL_CONNECT。
    2. Slave端在定时任务serverCron(Redis内部的定时器触发事件)中连接Master,发送sync命令,然后阻塞等待master发送回其内存快照文件(最新版的Redis已经不需要让Slave阻塞)。
    3. Master端收到sync命令简单判断是否有正在进行的内存快照子进程,没有则立即开始内存快照,有则等待其结束,当快照完成后会将该文件发送给Slave端。
    4. Slave端接收Master发来的内存快照文件,保存到本地,待接收完成后,清空内存表,重新读取Master发来的内存快照文件,重建整个内存表数据结构,并最终状态置位为 REDIS_REPL_CONNECTED状态,Slave状态机流转完成。
    5. Master端在发送快照文件过程中,接收的任何会改变数据集的命令都会暂时先保存在Slave网络连接的发送缓存队列里(list数据结构),待快照完成后,依次发给Slave,之后收到的命令相同处理,并将状态置位为 REDIS_REPL_ONLINE。

    参考流程图

    产考连接:https://zhangweisep.github.io/2018/09/26/Redis%E5%93%A8%E5%85%B5%E6%A8%A1%E5%BC%8F%E5%92%8C%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA/

     

     

  • 相关阅读:
    HTML 标签
    HTML与CSS的关系
    用node搭建本地服务环境
    Windows平台下SVN安装配置及使用
    CSS Flex布局整理
    zepto 选中select option 的值
    Zepto tap 穿透bug、解决移动端点击穿透问题
    jquery 上下滚动显示隐藏
    es6学习笔记二:生成器 Generators
    es6学习笔记一:迭代器和for-of循环
  • 原文地址:https://www.cnblogs.com/musl/p/13343298.html
Copyright © 2011-2022 走看看