redis 哨兵集群

redis哨兵集群搭建可以分两部分

  • redis主从机集群搭建
  • 哨兵集群的搭建

这里我们使用docker 来模拟redis集群
(首先安装docker compose)

redis 主从集群的搭建

为了好操作我们新建立一个单独目录docker/redis文件夹来实验

建立docker-cmpose.yml文件
里面配置了一个主节点,两个从节点,三个哨兵
(同时配置了固定ip,目的是哨兵是通过配置文件中的主节点的ip进行监控,docker容器启动以后的ip可能会变,导致哨兵监听不到)

version: '3'
services:
  master:
    image: redis:latest
    container_name: redis-master
    ports:
      - 6379:6379
    networks:
      demo:
        ipv4_address: 172.190.1.2
  slave1:
    image: redis:latest
    container_name: redis-slave-1
    ports:
      - 6380:6379
    command: redis-server --slaveof redis-master 6379
    networks:
      demo:
        ipv4_address: 172.190.1.3

  slave2:
    image: redis:latest
    container_name: redis-slave-2
    ports:
      - 6381:6379
    command: redis-server --slaveof redis-master 6379
    networks:
      demo:
        ipv4_address: 172.190.1.4

  sentinel1:
    image: redis:latest
    container_name: redis-sentinel-1
    ports:
    - 26379:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    - ./../sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.conf
    networks:
      demo:
        ipv4_address: 172.190.1.5

  sentinel2:
    image: redis:latest
    container_name: redis-sentinel-2
    ports:
    - 26380:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    - ./../sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.conf
    networks:
      demo:
        ipv4_address: 172.190.1.6
  sentinel3:
    image: redis:latest
    container_name: redis-sentinel-3
    ports:
    - 26381:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    - ./../sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf
    networks:
      demo:
        ipv4_address: 172.190.1.7
networks:
  demo:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 172.190.1.0/24
#        gateway: 172.19.1.1

新建文件夹sentinel 里面建立哨兵的配置文件 sentinel.conf 如下,复制3份分别是sentinel1.conf,sentinel2.conf,sentinel3.conf 与上面docker-compose中设置的挂载路径一致。

# Example sentinel.conf

# port <sentinel-port>
port 8001
# 守护进程模式
daemonize yes
# 指明日志文件名
logfile "./sentinel1.log"
# 工作路径,sentinel一般指定/tmp比较简单
dir ./
# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
# slaves是自动发现,所以你没必要明确指定slaves。
sentinel monitor MyMaster 127.0.0.1 7001 1
# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds MyMaster 1500
# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout TestMaster 10000
# 设置master和slaves验证密码
sentinel auth-pass TestMaster testmaster123

启动

在docker-compose路径下 dc up -d 启动容器。
可以竟如哨兵容器,连接26379端口,info 查看状态。可以看到集群的状态

# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.190.1.2:6379,slaves=2,sentinels=3

测试高可用

docker stop redis-master 停掉主节点。然后过一会儿,哨兵节点info 查看。master的ip就变成了另一个

# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.190.1.4:6379,slaves=2,sentinels=3

说明哨兵将从节点设置成为了主节点,然后登录该节点,使用info 命令可以看到当前的节点的role已经变成了master。并且可以进行写set 命令

# Replication
role:master
connected_slaves:1
slave0:ip=172.190.1.3,port=6379,state=online,offset=1489154,lag=1
master_replid:c865c39f238b0b97c86cc7ec830b00a64f7a6553
master_replid2:2f1f05989500cf3592982bedb727436c9a9c5a34
master_repl_offset:1489154
second_repl_offset:1474101
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:440579
repl_backlog_histlen:1048576

恢复之前的主节点
docker start redis-master , 然后可以进入节点,可以看到。先前的主节点已经变成了从节点,masterhost 变成了172.190.1.4

# Replication
role:slave
master_host:172.190.1.4
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:1520774
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c865c39f238b0b97c86cc7ec830b00a64f7a6553
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1520774
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1518683
repl_backlog_histlen:2092
注意点

不同的docker-compose 管理的容器群 的网段是不同的。不同网段是不通的。如果你用两个docker-compose 分别管理redis主从集群和哨兵集群的话,有可能会出现哨兵发现不了主机的情况,使用ping看看网络是否通畅。 确保哨兵集群和redis集群在同一网段下。可以通过docker-compose设置容器网络ip固定,直接将redis集群和哨兵集群写在一个docker-compose里面,也是可以的
,,,也可以修改docker,配置文件,,使得创建的容器都在同一个网段,修改docker配置以后需要重启。

安装ping 和ifconfig
  • apt-get install inetutils-ping
  • apt-get install net-tools
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值