Qcon北京2018--《MySQL的Docker容器化大规模实践》--王晓波为了保证MySQL的高可用,需要在Docker容器分配时如何保障主从不在同一宿主机上。我们通过自研 Docker容器调度平台管理所有宿主机和容器,自定义Docker容器的分配算法。实现了MySQL的高密度,隔离 化,高可用化部署。 调度规则: 1.同一复制集群的实例在不同主机上。 2.优先分配CPU、内存、磁盘空间资源最空闲的主机。 3.根据IO需求调度容器创建在不同IO类型的主机。 4.申请新集群时,若 像、HA管理系统镜像、实例迁移服务镜像、监控服务端镜像 PS:容器虚拟化带来轻量高效,快速部署的同时,docker容器在隔离性方面也存在一些缺陷。例如,在容器内部proc文件系统 中可以看到Host宿主机上的proc信息。这样就导致了一些问题,比如监控信息不准确、限制内存会导致应用程序OOM等。我们 基于lxcfs组件来增强容器的隔离性。 资源隔离 CPU最大超卖3倍,通过cpu-period配合cpu-quota一起使用,来限制容器的CPU的使用量 几个内存大户(比如buffer_pool等),最后配合lxcfs增强隔离性。 IO方面由于我们采用挂载宿主机本地的磁盘设备,还不能做到彻底隔离。所以对于高IO的实 例使用的是PCIE-SSD。磁盘空间方面,我们在申请时会预估出一个量,使用超过80%的时候 会结合本地磁盘空间评估是否有足够空间扩容,若宿主机剩余空间不足会启动迁移扩容流程 。 目前使用的host模式,无法隔离网络。但是考虑到10G接入,且单机密度可控的情况下,网0 码力 | 32 页 | 7.11 MB | 1 年前3
使用 Docker 建立 MySQL 集群<本机的数据库存放目录>:/var/lib/mysql 5,设定 MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE 环境变量可以使容器在 运行时同时创建你所需要的数据库和带有全部权限的用户及其对应密码 6,设定 TERM 环境变量的值可以解决容器不能进入 mysql 控制台的问题。 对于不是自己建立的镜像,建立出来的容器未必能一次达到要求,建议是将 run 命令写成脚本,创建后使用 在主数据库中执行 SQL 脚本: /*设定用于同步的账号、密码*/ grant replication slave on *.* to ‘sync’@'%' identified by 'sync'; /*保存权限设定*/ flush privileges; /*查看主数据日志状态,需要记住查询结果 File 和 Position 值,是从数据库复 制的日志起点*/ show master status; 在从数据库中执行0 码力 | 3 页 | 103.32 KB | 1 年前3
共 2 条
- 1













