Docker 搭建 Redis 主从复制 + 哨兵

本贴最后更新于 1361 天前,其中的信息可能已经时移世易

1917630972.png

一、安装 Redis

1.拉取官方的镜像,标签为 3.2

    [root@localhost /]# docker pull  redis:3.2

2.下载完成后,我们就可以在本地镜像列表里查到 REPOSITORY 为 redis,标签为 3.2 的镜像。

    [root@localhost /]# docker images redis 
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    redis               3.2                 43c923d57784        2 weeks ago         193.9 MB

3.运行容器

    [root@localhost /]# docker run -p 6379:6379 -v $PWD/data:/data  -d redis:3.2 redis-server --appendonly yes
    43f7a65ec7f8bd64eb1c5d82bc4fb60e5eb31915979c4e7821759aac3b62f330

命令说明:
-p 6379:6379 : 将容器的 6379 端口映射到主机的 6379 端口
-v $PWD/data:/data : 将主机中当前目录下的 data 挂载到容器的/data
redis-server --appendonly yes : 在容器执行 redis-server 启动命令,并打开 Redis 持久化配置

4.连接、查看容器

   [root@localhost /]# docker exec -it 43f7a65ec7f8 redis-cli
    172.17.0.1:6379> info
    # Server
    redis_version:3.2.0
    redis_git_sha1:00000000
    redis_git_dirty:0
    redis_build_id:f449541256e7d446
    redis_mode:standalone
    os:Linux 4.2.0-16-generic x86_64
    arch_bits:64
    multiplexing_api:epoll
    ...

二、主从、集群

1.运行 Redis 镜像

首先使用 docker 启动 3 个 Redis 容器服务,分别使用到 6379、6380、6381 端口

docker run --name redis-6379 -p 6379:6379 -d redis:3.2 redis-server
docker run --name redis-6380 -p 6380:6379 -d redis:3.2 redis-server
docker run --name redis-6381 -p 6381:6379 -d redis:3.2 redis-server

2.配置 Redis 集群

使用如下命令查看容器内网的 ip 地址等信息

docker inspect containerid(容器ID)

3 个 Redis 的内网 ip 地址为:

redis-6379:172.17.0.3:6379
redis-6380:172.17.0.4:6379
redis-6381:172.17.0.5:6379

进入 docker 容器内部,查看当前 Redis 角色(主 master 还是从 slave)(命令:info replication)

[root@localhost /]# docker exec -it 007f7ab412b9 redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:3860
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:3859

127.0.0.1:6379> 

可以看到当前 3 台 Redis 都是 master 角色,使用 redis-cli 命令修改 redis-6380、redis-6381 的主机为 172.17.0.3:6379

SLAVEOF 172.17.0.3 6379

再次查看主机 info,已经有两个从机了(.4 和 .5)

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.4,port=6379,state=online,offset=3860,lag=0
slave1:ip=172.17.0.5,port=6379,state=online,offset=3860,lag=0
master_repl_offset:3860
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:3859

至此,Redis 下的主从配置就 ok 了。

三、Sentinel 哨兵

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务(具体介绍可参考 链接):

监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

接下来直接进入 3 台 Redis 容器内部进行配置

[root@localhost /]# docker exec -ti 容器id /bin/bash

进入根目录创建 sentinel.conf 文件

[root@localhost /]# cd / && touch sentinel.conf && touch log.txt

修改 sentinel.conf 文件内容为:

sentinel monitor mymaster 172.17.0.3 6379 1
#添加为后台运行
daemonize yes
#指定日志目录
logfile "/log.txt"

最后,启动 Redis 哨兵:

[root@localhost /]# redis-sentinel /sentinel.conf

至此,Sentinel 哨兵配置完毕。

测试验证,如图

FgHLpd.png

  • Dcoker
    8 引用 • 1 回帖
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 212 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...