盒子
盒子
文章目录
  1. 搭建环境
  2. 实现目标
  3. 准备工作
    1. 安装额外的软件包
    2. 安装 redis
  4. 配置一主两从
    1. master(ip0)
    2. slave(ip1、ip2)
    3. 启动
    4. 测试
  5. 配置哨兵模式
    1. 配置
    2. 配置备份
    3. 启动
    4. 测试
  6. Reference
  7. DONE

centos7 配置 redis 主从集群 + 哨兵模式

搭建环境

三台CentOS7服务器

实现目标

在3台CentOS7服务器上搭建一主两从的redis集群,且配置哨兵模式,当master宕机,另外两个slave会选举出一个新的master,实现高可用。

master slave0 slave1
ip0 ip1 ip2

准备工作

安装额外的软件包

$ yum install epel-release

安装 redis

$ yum install redis

配置一主两从

master(ip0)

  • 修改 /etc/redis.conf

    $ vim /etc/redis.conf

    找到一下内容并修改

    # 将 127.0.0.1 修改为本机的IP(ip0)
    bind ip0

    # 将 no 改为 yes,以守护进程的形式运行
    daemonize yes

    修改完毕

  • 测试

    登录 redis

    $ redis-cli -h ip0

    列出所有 kyes *

    $ redis-cli -h ip0
    ip0:6379> keys *

    设置 key value

    $ redis-cli -h ip0
    ip0:6379> set name holmeyoung

    得到 keyvalue

    $ redis-cli -h ip0
    ip0:6379> get name

    删除 key

    $ redis-cli -h ip0
    ip0:6379> del name

slave(ip1、ip2)

  • 修改 /etc/redis.conf

    $ vim /etc/redis.conf

    找到一下内容并修改

    # 将 127.0.0.1 修改为本机的IP(eg:ip1)
    bind ip1

    # 将 no 改为 yes,以守护进程的形式运行
    daemonize yes

    # 增加该 slave节点 所要从的 master节点 的 ip/port
    # 找到 # slaveof <masterip> <masterport>
    # 在下面增加一行
    slaveof ip0 6379

    修改完毕

  • 测试

    master

启动

分别运行三台机器的 redis-server

先运行 master

$ redis-server /etc/redis.conf

测试

  • master

    连接 redis

    $ redis-cli -h ip0

    打印信息

    ip0:6379> info Replication
    # Replication
    role:master
    connected_slaves:2
    slave0:ip=ip1,port=6379,state=online,offset=3242902,lag=1
    slave1:ip=ip2,port=6379,state=online,offset=3243317,lag=0
    master_repl_offset:3243317
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:2194742
    repl_backlog_histlen:1048576

    写入一组 key value

    ip0:6379> set name holmeyoung
  • slave0

    连接 redis

    $ redis-cli -h ip1

    读取数值

    ip1:6379> get name

    输出 holmeyoung 则正常

    因为 slave 只有读权限,所以是不可以写入数据的

  • slave1

    slave0

配置哨兵模式

配置

三台机器配置相同

修改 /etc/redis-sentinel.conf

$ vim /etc/redis-sentinel.conf

增改以下内容

# 保护模式,这个必须选择no,不然当master宕机,slave无法自动转换为master
protected-mode no

# 以守护进程运行
daemonize yes

# 日志文件位置
logfile "/var/log/redis/sentinel.log"

# 哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数
# 其中2是quorum,即权重,代表至少需要两个Sentinel节点认为主节点主观下线,才可判定主节点为客观下线。一般建议将其设置为Sentinel节点的一半加1。不仅如此,quorum还与Sentinel节点的领导者选举有关。为了选出Sentinel的领导者,至少需要max(quorum, num(sentinels) / 2 + 1)个Sentinel节点参与选举。
sentinel monitor mymaster ip0 6379 2

# master或slave多长时间(默认30秒)不能使用后标记为s_down状态
# 每个Sentinel节点都要通过定期发送ping命令来判断Redis节点和其余Sentinel节点是否可达。
# 如果在指定的时间内,没有收到主节点的有效回复,则判断其为主观下线。需要注意的是,该参数不仅用来判断主节点状态,同样也用来判断该主节点下面的从节点及其它Sentinel的状态。其默认值为30s。
sentinel down-after-milliseconds mymaster 3000

# 在failover期间,允许多少个slave同时指向新的主节点。如果numslaves设置较大的话,虽然复制操作并不会阻塞主节点,但多个节点同时指向新的主节点,会增加主节点的网络和磁盘IO负载
sentinel parallel-syncs mymaster 1

# 定义故障切换超时时间。默认180000,单位秒,即3min。需要注意的是,该时间不是总的故障切换的时间,而是适用于故障切换的多个场景。
# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败
sentinel failover-timeout mymaster 10000

注意 sentinel monitor mymaster ip0 6379 2 里面的 ip0master 的IP

配置备份

将配置文件 /etc/redis.conf 以及 /etc/redis-sentinel.conf 备份一份,因为当 master 宕机并唤醒哨兵模式后,系统会重写配置文件

启动

分别运行三台机器的 redis-sentinel

$ redis-sentinel /etc/redis-sentinel.conf

测试

master 上杀死 redis 进程

$ pkill redis

随便登录一个 slave 服务器

$ redis-cli -h ip1

打印信息

ip0:6379> info Replication

会发现此时的 master 以及 slave 发生了更改

Reference

CentOS7 配置 Redis Sentinel 主从集群配置

CentOS7 配置 Redis 主从复制方法

DONE

支持一下
万一真的就有人扫了呢
  • 微信扫一扫
  • 支付宝扫一扫