专栏首页后端技术docker 单机配置redis主从集群 集群 前置准备

docker 单机配置redis主从集群 集群 前置准备

前置准备

该文是docker redis主从配置 正式部署的前言。如下会简要列出目录,需要了解的前置知识,以防配置时出错。 如果你还不够了解,就阅读正文的相应章节。

  1. 了解docker image和container 10张图深入理解Docker容器和镜像
    • image是多个read layer的堆叠
    • 而container是在image上添加一层read-write layer。
  2. 了解docker持久化:docker volume和bind mount docker volume 容器卷的那些事(一)
    • docker volume是推荐的持久化方法,以单个volume文件存储,易于移植。
    • bind mount是将宿主机的目录挂载到容器目录下,易于在宿主机操作。
  3. 了解docker网络机制:host和bridge docker之网络配置
    • host可将容器的网络空间与宿主机绑定。
    • bridge(默认)可用网桥将各个容器与宿主机连接。
  4. 安装docker并顺利拉取镜像
  5. 学会使用docker GUI: Kitematic
  6. 理解redis部署

1. 了解docker image和container

这一章没有什么可讲的,关于镜像和容器的拉取、删除等操作,可自行查阅,无需赘谈。

记录一个操作,查看各个image、container的容量: docker system df -v

2. 了解docker持久化:docker volume和bind mount

容器只是在镜像上覆盖一层read layer,任何修改都在改层上进行。 但有时候,我们想对容器的数据进行持久化,甚至想要将其迁移到其它容器内。比如,将一个容器内的数据库进行备份,复制到另一个机器,挂载到容器中使用,就要使用持久化了。 有三种可以对容器数据进行持久化,如下图所示:

  1. bind mount 将宿主机的目录挂载到容器目录下。
  2. volume 将宿主机上的volume文件挂载到容器目录下。官方推荐用此方式。
  3. tmpfs mount 此处略。

在redis的DockerFile中,用到了VOLUME /data,创建一个卷,并挂载到/data上。

如果想要进行迁移,可参考Docker中Image、Container与Volume的迁移

2.1 volume

参考DOCKER查看挂载目录VOLUME

  1. 可以将volume文件挂载到容器下,也可以可以复制到别的机器上挂载,做到即插即用当容器删除时,其使用的volume文件不会跟随删除
  2. 要删除无用的volume,可运行docker volume prune。该命令只会删除"无主"的volume,若某volume所挂载的容器处于关闭状态,并不会被删除。

查看容器使用volume的情况: 可以运行docker inspect -f "{{.Mounts}}" {container},其中{container}为容器的名字或id。 输出案例如下:

VOLUME /datadockerHub的redis官方给出的DockerFile中有一句VOLUME /data,表示创建一个volume并挂载到/data目录。

3. docker 网络机制

docker有四种网络模式:bridge、host、container、none。在本次部署中,只用到默认的bridge模式,其它模式可查阅docker之网络配置

最左边的容器为host模式,右边两个容器为bridge模式

  • 该模式下容器与宿主机不在同一网段,容器会被分配一个私有ip,一般是172.17.0.x
  • Docker采用 NAT 方式,将容器的port与宿主机的port绑定。外界、宿主机可访问绑定在宿主机上的port,来访问容器。
  • 每个容器都视为网络中一个主体,因此127.0.0.1是回环地址,只是指向容器自身,不能访问到宿主机
  • 容器不是虚拟机,所以bridge模式下,宿主机是无法ping通容器的。但通过端口可以访问对应服务。

在正式部署集群时,我们需要在主服务器容器中先运行ifconfig查看它的ip,这样此ip才能被从服务器识别。在从服务器的redis.config中,slaveof {ip} 6379一行中的{ip}就是填写此ip。

root@a2682b89400a:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ...
collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        ...        
collisions 0
  • eth0中的172.17.0.2就是容器的私有ip,宿主机上的其它容器可通过该ip相互识别,从服务器的容器可用此类ip找到主服务器的容器。
  • lo是本地回环,说明127.0.0.1指向自己。

4. 安装docker并顺利拉取镜像

4.1 安装docker

windows安装docker的步骤比较简单,百度即可。 值得一提的是,安装过程中docker可能会请求创建账户,一路同意即可,否则可能报错。

4.2 拉取镜像

  1. 如果由于长城的缘故,拉取太慢,或者无法拉取,可以 右键docker图标->settings->daemon->registry mirrors 中加上https://registry.docker-cn.com设置镜像。
  2. 如果还是出现了错误:Error response from daemon: Get https://registry-1.docker.io/v2/,可以
    1. 将宿主机ipv4的首要dns改为8.8.8.8,次要dns改为8.8.8.4。
    2. 然后在 右键docker图标->settings->network->dns server中改为"fixed 8.8.8.8"
    3. 确认没有使用代理等其它网络配置

4.3 设置目录映射

在部署中,我们需要将宿主机的redis.conf配置映射到容器中,供redis服务器启动使用。 假设这些配置文件在d盘,我们就要将d盘共享。操作如下: 右键docker图标->settings->shared drives->在d盘处打钩->点击apply docker可能会请求操作d盘的权限,之后需要你输入账户密码(如果没有就设置一个),一并照做即可

5. 学会使用docker GUI: Kitematic

建议安装docker的GUI,Kitematic。它有很多实用的功能,能简化你很多工作,比如运行shell、绑定容器端口到宿主机上,等等。 安装方法:右键docker图标->单击Kitematic,按照指示操作即可。

这里贴出两张效果图:

6. 部署redis

我们可以参阅docker redis官方给出的指令来运行。在主从配置中,需要自己定义redis.conf来配置,所以官网的这一条命令会有用: docker run -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf

  1. 这条命令会把宿主机的/myredis/conf/redis.conf映射到容器的/usr/local/etc/redis/redis.conf中,然后redis-server /usr/local/etc/redis/redis.conf会调用配置文件。
  2. 这条命令不够完美。如果正确编写了redis.conf,你用以上命令可以顺利完成主从配置,但可能会看见"WARNING"。在正式部署中会讲解决方法,也就是该命令需要加一些别的参数。

命令中的-v 参数会把宿主机的文件或目录挂载到容器中。由于是挂载,不是拷贝,每次容器重启时,该文件/目录需要正确存在路径上。如果路径上不存在文件/目录,docker会创建一个空的端点,让其顺利运行。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • kafka 网络模型1 请求响应流程

    在kafka 启动1 入口函数中,我们阅读了KafkaServer的注释,这里直接总结一下:

    平凡的学生族
  • docker 配置redis主从配置 集群 正式部署

    在正式部署前,你可以先阅读前置准备,对部署过程中用到的docker、redis操作和配置有一个理解,以防在自己电脑上复现时出错。 我们将在一台windows1...

    平凡的学生族
  • android studio device monitor (DDMS) 无法打开 an error has occured

    平凡的学生族
  • Docker容器无法启动,里面的配置文件如何修改

    当修改一个容器, 如mysql里的配置文件/etc/mysql/my.cnf , 修改完成后重启mysql 容器, 使用docker ps -a 查看容器,显示...

    louiezhou001
  • sanic(4):增加mysql数据库与redis支持

    依据上文,我们已经可以做出后台,也能使用jinja2来渲染页面。下面简单讲讲如何给sanic项目添加mysql和redis支持。

    超级大猪
  • Akka 指南 之「监督和监控」

    本章概述了监督(supervision)背后的概念、提供的原语及其语义。有关如何转换为真实代码的详细信息,请参阅 Scala 和 Java API 的相应章节。

    CG国斌
  • Docker-compose 常用命令及网络设置(五)

    这样就可输出 nginx服务8080端口所绑定的公共端口。 6. ps 列出所有容器。示例

    Jacob丶
  • Rancher 2.4.3 - HA 部署高可用k8s集群

    对于生产环境,需以高可用的配置安装 Rancher,确保用户始终可以访问 Rancher Server。当安装在Kubernetes集群中时,Rancher将与...

    py3study
  • Docker进阶-容器监控cAdvisor+InfluxDB+Granfana

    前面文章介绍使用docker compose组合应用并利用scale快速对容器进行扩容。

    小码农薛尧
  • “反黑飞”技术渐趋成熟,但细节之处还需多加打磨

    镁客网

扫码关注云+社区

领取腾讯云代金券