docker-compose部署Redis主从哨兵
1. 主从复制概述
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。
默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
主从复制的作用
主从复制的作用主要包括:
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
- 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
- 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
- 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础
2. 实验环境
[root@k8s-master docker]# systemctl status firewalld iptables ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1) ● iptables.service - IPv4 firewall with iptables Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled) Active: inactive (dead) [root@k8s-master docker]# sestatus SELinux status: disabled [root@k8s-master docker]# docker -v Docker version 18.06.1-ce, build e68fc7a [root@k8s-master docker]# docker inspect redis:6.2.5|grep REDIS_VERSION "REDIS_VERSION=6.2.5",
3. 架构
典型的哨兵架构图如下所示:
它由两部分组成,哨兵节点和数据节点:
- 哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
- 数据节点:主节点和从节点都是数据节点。
4. 部署主从
目的:1个主节点、2个从节点和3个哨兵节点
4.1 准备
# 安装docker-compose yum install docker-compose -y
4.2 Master/Slave部署
# 创建redis-compose老家 mkdir /home/Docker/docker-compose/redis && cd /home/Docker/docker-compose/redis # redis docker-compose.yml [root@hadoop4 redis]# cat docker-compose.yml version: '3' services: master: image: redis container_name: redis-master command: redis-server --requirepass 123456 --masterauth 123456 ports: - 6380:6379 slave1: image: redis container_name: redis-slave-1 ports: - 6381:6379 command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456 slave2: image: redis container_name: redis-slave-2 ports: - 6382:6379 command: redis-server --slaveof redis-master 6379 --requirepass 123456 --masterauth 123456
注意,如果设置了Redis客户端访问密码requirepass, 那么也要设置相同的副本集同步密码masterauth。
另外我们后面使用哨兵模式能够完成故障转移,现有的Master可能会变成Slave,故在当前Master容器中也要携带masterauth参数。
执行docker-compose up -d会产生3个Redis容器,分别映射到宿主机6380、6381、6382端口, 默认连接在redis-default网桥。
4.3 哨兵部署
很明显我们即将搭建的Sentinel容器需要能访问到以上3个容器,故需要在形成Sentinel的Dokcer-compose 使用外置的redis-default
网桥。
[root@hadoop4 sentinel]# pwd /home/Docker/docker-compose/redis/sentinel [root@hadoop4 sentinel]# cat docker-compose.yml version: '3' services: sentinel1: image: redis container_name: redis-sentinel-1 ports: - 26379:26379 command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf sentinel2: image: redis container_name: redis-sentinel-2 ports: - 26380:26379 command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf sentinel3: image: redis container_name: redis-sentinel-3 ports: - 26381:26379 command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf networks: default: external: name: redis_default
创建哨兵文件,将如下内容拷贝进去
[root@hadoop4 sentinel]# cat sentinel1.conf port 26379 dir /tmp sentinel monitor mymaster 172.18.0.3 6379 2 sentinel auth-pass mymaster 123456 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes
注意,以上 172.18.0.3是之前Redis Master/slave启动之后Master节点的IP,通过docker inspect [containerIP]获取, 这里我们要配合设置Master/Slave访问密码。
复制两份sentinel1.conf文件,容器挂载需要
# 启动容器
docker-compose up -d
docker ps 容器显示如下
[root@hadoop4 sentinel]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0bf5fd88b0b2 redis "docker-entrypoint.s…" About an hour ago Up About an hour 6379/tcp, 0.0.0.0:26380->26379/tcp redis-sentinel-2 27e22208cef7 redis "docker-entrypoint.s…" About an hour ago Up About an hour 6379/tcp, 0.0.0.0:26379->26379/tcp redis-sentinel-1 a67bac1aca69 redis "docker-entrypoint.s…" About an hour ago Up About an hour 6379/tcp, 0.0.0.0:26381->26379/tcp redis-sentinel-3 16333f8c1787 redis "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:6381->6379/tcp redis-slave-1 26e186d4d9d9 redis "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:6382->6379/tcp redis-slave-2 a8368ebdfcbb redis "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:6380->6379/tcp redis-master
5. 验证
进入redis-master容器查看主从关系
[root@hadoop4 redis]# docker exec -it redis-master bash root@a8368ebdfcbb:/data# redis-cli -h localhost localhost:6379> auth 123456 OK localhost:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=172.18.0.2,port=6379,state=online,offset=7043,lag=0 slave1:ip=172.18.0.4,port=6379,state=online,offset=7043,lag=0 master_failover_state:no-failover master_replid:94386248d441ecd4bfab9933e2eb4ff597943a87 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:7043 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:7043
至此,完成redis主从哨兵搭建,已经测试过了,这里就不举例了。
参考文章:https://www.cnblogs.com/guolianyu/p/10239913.html
https://www.cnblogs.com/kismetv/p/9236731.html
https://blog.csdn.net/qq_24641227/article/details/93520057
docker-compose一键部署redis一主二从三哨兵模式(含密码,数据持久化) - Old-凯 - 博客园 (cnblogs.com)
docker-compose搭建redis哨兵集群 - 有态度的马甲 - 博客园 (cnblogs.com)
docker-compose.yml · 雷兴庆/redis-sentinel - 码云 - 开源中国 (gitee.com)
本文来自博客园,作者:MegaloBox,转载请注明原文链接:https://www.cnblogs.com/cpw6/p/13042481.html