redis哨兵主从配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis哨兵主从配置相关的知识,希望对你有一定的参考价值。

REDIS哨兵主从配置

  1. 环境描述
    操作系统:CentOS 5.10 x64
    硬件配置:阿里云8核8G100G硬盘。
    IP地址:10.253.2.32 【默认主】
    IP地址:10.253.5.158【默认从】
    版本号:redis-2.8
  2. Redis安装部署
    Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集.
    (difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。
    Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全
    久化模式”)。
    安装 tcl
    下载tcl 包 http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
    --解压包
    tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/
    --进入目录
    cd /usr/local/tcl8.6.1/unix/
    --安装前检查
    ./configure
    --编译
    make
    --运行
    make install

    安装时间比较花时间

    安装redis
    1. 下载地址:
    $ wget http://redis.io/download
    2. 解压缩
    $ tar xzf redis-2.8.19.tar.gz
    3. 编译
    $ cd redis-2.8.19
    $ make
    $make install
    或者指定目录安装
    $ make PREFIX=/home/redis/redis install
    $cp redis.conf /etc/
    参数介绍:
    make install命令执行完成后,会在/usr/local/bin目录下生成个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof 、redis-check-dump,它们的作用如下:
    redis-server:Redis服务器的daemon启动程序
    redis-cli:Redis命令行操作工具。也可以用telnet根据其纯文本协议来操作
    redis-benchmark:Redis性能测试工具,测试Redis在当前系统下的读写性能
    redis-check-aof:数据修复
    redis-check-dump:检查导出工具
    4. 修改系统配置文件,执行命令
    a) echo vm.overcommit_memory=1 >> /etc/sysctl.conf
    b) sysctl vm.overcommit_memory=1 或执行echo vm.overcommit_memory=1 >>/proc/sys/vm/overcommit_memory
    使用数字含义:
    0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
    1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
    2,表示内核允许分配超过所有物理内存和交换空间总和的内存
    5. 修改redis配置文件
    a) $ cd /etc/
    b) vi redis.conf
    c) 修改daemonize yes---目的使进程在后台运行
    参数介绍:
    daemonize:是否以后台daemon方式运行
    pidfile:pid文件位置
    port:监听的端口号
    timeout:请求超时时间
    loglevel:log信息级别
    logfile:log文件位置
    databases:开启数据库的数量
    save :保存快照的频率,第一个表示多长时间,第三个表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
    rdbcompression:是否使用压缩
    dbfilename:数据快照文件名(只是文件名,不包括目录)
    dir:数据快照的保存目录(这个是目录)
    appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
    appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
    6. 启动redis
    a) $ cd /usr/local/bin
    b) ./redis-server /etc/redis.conf
    7. 检查是否启动成功
    a) $ ps -ef | grep redis
    b) redis-cli -p 8086
    127.0.0.1:6379> set foo bat
    OK
    127.0.0.1:6379> set foo bar
    OK
    127.0.0.1:6379> get foo
    "bar"
    127.0.0.1:6379> get bat

  3. Redis主从配置
    仅需要在slave node上修改配置:
    找到slaveof这行,参考下面的修改(填上master node的ip和端口就完事了)
    slaveof 10.253.2.332 8086 //哨兵主从配置,第一次必须人工定义好主从。后续哨兵记住了同一网络中存在的所有redis服务器,会自动删除掉此配置。
    另外注意下 slave-read-only yes 这行,这表示slave只读不写,也是推荐设置【在哨兵主从这个参数不需要配置,因为从机我们还需要提升为master】
  4. 哨兵的配置
    redis提供了sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决。每个sentinel会向其它sentinal、master、slave定时发送消息,以确认对方是否“活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的“主观认为宕机” Subjective Down,简称SDOWN)。
    若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称ODOWN),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。
    在2台redis服务器上分别创建sentinel.conf文件
    安装redis之后,其安装目录为/usr/loca/bin/
    在此目录下,创建conf文件夹,然后在conf文件夹创建sentinel.conf,内容如下:
    port 7050 //哨兵监听的端口号
    dir /usr/local/bin/ //redis的主目录
    sentinel monitor mymaster 10.253.2.32 8086 1 //默认的主服务器。 1表示只要一个哨兵监听到主服务器ODOWN,就开始failover.
    sentinel down-after-milliseconds mymaster 5000 //哨兵监听redis主服务器没有响应超过5秒,就认为是SDOWN了。
    sentinel parallel-syncs mymaster 1 //新master启动之后,只允许同一时刻一台从服务器更新同步数据
    sentinel failover-timeout mymaster 15000 //哨兵监听redis主服务器没有响应超过15秒,就开始进行failover,进行选举新的master。
    启动redis
    ./redis-server /etc/redis.conf
    启动哨兵
    ./redis-sentinel conf/sentinel.conf
    确认主机
    在2台机器上同时确认主机信息
    ./redis-cli -p 7050 sentinel masters
    ) 1) "name"
    2) "mymaster"
    3) "ip"
    4) "10.253.2.32"
    5) "port"
    6) "8086"
    7) "runid"
    8) "3bad76dd51566847d8b0603865310b87584201f9"
    9) "flags"
    10) "master"
    11) "pending-commands"
    12) "0"
    13) "last-ping-sent"
    14) "0"
    15) "last-ok-ping-reply"
    16) "351"
    17) "last-ping-reply"
    18) "351"
    19) "down-after-milliseconds"
    20) "5000"
    21) "info-refresh"
    22) "8559"
    23) "role-reported"
    24) "master"
    25) "role-reported-time"
    26) "44678013"
    27) "config-epoch"
    28) "8"
    29) "num-slaves"
    30) "1"
    31) "num-other-sentinels"
    32) "1"
    33) "quorum"
    34) "1"
    35) "failover-timeout"
    36) "15000"
    37) "parallel-syncs"
    38) "1"
    关闭掉主服务器
    ./redis-cli -p 8086 shutdown
    再次确认主机信息
    ./redis-cli -p 7050 sentinel masters
    ) 1) "name"
    2) "mymaster"
    3) "ip"
    4) "10.253.5.158"
    5) "port"
    6) "8086"
    7) "runid"
    8) "3bad76dd51566847d8b0603865310b87584201f9"
    9) "flags"
    10) "master"
    11) "pending-commands"
    12) "0"
    13) "last-ping-sent"
    14) "0"
    15) "last-ok-ping-reply"
    16) "351"
    17) "last-ping-reply"
    18) "351"
    19) "down-after-milliseconds"
    20) "5000"
    21) "info-refresh"
    22) "8559"
    23) "role-reported"
    24) "master"
    25) "role-reported-time"
    26) "44678013"
    27) "config-epoch"
    28) "8"
    29) "num-slaves"
    30) "1"
    31) "num-other-sentinels"
    32) "1"
    33) "quorum"
    34) "1"
    35) "failover-timeout"
    36) "15000"
    37) "parallel-syncs"
    38) "1"
    查看哨兵的配置
    port 7050
    dir "/usr/local/bin"
    sentinel monitor mymaster 10.253.2.32 8086 1
    sentinel down-after-milliseconds mymaster 5000
    sentinel failover-timeout mymaster 15000

    Generated by CONFIG REWRITE

    sentinel config-epoch mymaster 8
    sentinel leader-epoch mymaster 8
    sentinel known-slave mymaster 10.253.5.158 8086
    sentinel known-sentinel mymaster 10.253.5.158 3306 8f27d969797b27e89da6ed2156ba9f1cebfdc885 //哨兵记录了网络中存在的这台redis服务器,在10.253.2.32 down掉之后,通过选举把10.253.5.158定义为主服务器。同时,记录了这台redis服务器的信息在自己的配置文件中。2台服务器上的哨兵配置都会记录。
    sentinel current-epoch 8

  5. 生产项目配置redis
    配置文件application.yml
    spring:
    redis:
    sentinel:
    master: mymaster
    nodes: 10.253.2.32:3306,10.253.5.158:3306

以上是关于redis哨兵主从配置的主要内容,如果未能解决你的问题,请参考以下文章

Redis 主从配置密码以及哨兵

Redis——主从和哨兵机制

redis主从redis哨兵redis集群配置搭建和使用

redis高可用之主从复制,哨兵,集群

redis主从复制+哨兵配置

Redis主从哨兵和集群搭建