容器服务Docker&Kubernetes + 关注
手机版

在容器中使用AliSQL

  1. 云栖社区>
  2. 容器服务Docker&Kubernetes>
  3. 博客>
  4. 正文

在容器中使用AliSQL

萧元 2016-10-31 11:25:14 浏览4852 评论1

摘要: ### AliSQL容器 #### ALISQL AliSQL是基于MySQL官方版本的一个分支,由阿里云数据库团队维护,目前也应用于阿里巴巴集团业务以及阿里云数据库服务。该版本在社区版的基础上做了大量的性能与功能的优化改进。尤其适合电商、云计算以及金融等行业环境。

AliSQL容器

ALISQL

AliSQL是基于MySQL官方版本的一个分支,由阿里云数据库团队维护,目前也应用于阿里巴巴集团业务以及阿里云数据库服务。该版本在社区版的基础上做了大量的性能与功能的优化改进。尤其适合电商、云计算以及金融等行业环境。

基于AliSQL打包的docker镜像

对于MySQL或其分支(MariaDB)分支的数据库镜像,docker官方是有相应的模板的。 但是其官方模板都是使用MySQL的二进制包,通过系统自带的包管理器下载。而AliSQL没有,所以我们只能拉下代码,打一个编译后的的基础镜像, 然后基于这个基础镜像封装mysql镜像的逻辑。
镜像的docker-entrypoint.sh和官方基本一致, 如果您有mysql镜像的使用,将mysql的镜像名直接替换为AliSQL (registry.cn-hangzhou.aliyuncs.com/acs-sample/alisql:latest)即可。

mysqlz使用方式

参考文章:https://hub.docker.com/_/mysql/
MYSQL_ROOT_PASSWORD
设置root帐号密码

MYSQL_DATABASE
可以选择在镜像初始的时候创建一个数据库,如果设置了帐号密码,该帐号会被授权超级帐号。

MYSQL_USER, MYSQL_PASSWORD
帐号密码会被用于给MYSQL_DATABASE指定的数据库,被授权一个有超级用户权限的帐号。(ps root用户不需要此方法设置,root用户只需设置MYSQL_ROOT_PASSWORD即可)

MYSQL_ALLOW_EMPTY_PASSWORD
如果设置为yes,则允许容器以启动时不设置root帐号密码。 (该变量并不推荐)

MYSQL_RANDOM_ROOT_PASSWORD
设置为yes,则为root帐号生成随机密码。生成的密码会输出 (GENERATED ROOT PASSWORD: .....)

MYSQL_ONETIME_PASSWORD
为root设置一个初始密码, 第一次登录后强制要求修改。

在容器服务上部署AliSQL容器

选择创建应用:
Snip20161030_6

选择按镜像创建应用:
Snip20161030_8

选择AliSQL镜像:
Snip20161030_10

设置环境变量, root帐号密码,和通过宿主机暴露的端口:
Snip20161030_14

创建完成后,我们可以在容器列表中看到这个容器,拿到他通过宿主机地址和暴露这个容器的端口:
Snip20161030_15

在其他机器上通过mysql客户端连接:
Snip20161030_18

部署一个基于AliSQL容器的wordpress

如何将已有的MySQL应用替换为AliSQL应用呢,我们以一个WordPress应用为例,将其中的MySQL镜像的替换为AliSQL。

选择创建应用,使用编排模板创建:
Snip20161030_20

选择左下角的使用已有编排模板,然后选择WordPress模板:
Snip20161030_19

在模板文件中,将AliSQL的镜像地址 (registry.cn-hangzhou.aliyuncs.com/acs-sample/alisql:latest)替换MySQL镜像:
Snip20161030_22

创建成功后可以在容器列表看到4个Running的容器,3个WordPress容器和1个AliSQL的容器:
Snip20161030_23

在路由列表可以看到可供外网访问的Url,打开会看到WordPress成功运行:
Snip20161030_24
Snip20161030_25

Tips

AliSQL编译支持将TokuDB作为存储引擎,但是由于TokuDB的启动环境要求kernel关闭THP(transparent huge pages),原因这篇文章有简单描述Why TokuDB hates Transparent HugePages,一般建议是将THP关闭MariaDB enabling TokuDB (ps: transparent huge pages很多中文资料直接翻译成大页内存,其实它指是透明大页内存。大页内存是好东西,将内核管理内存的最小单位从4kb提升到2MB。对于大块文件可以减少随机读写的寻址次数。而THP的作用是将每个2MBpage的多余空间由kernel管理封装。 它减少了操作内存的程序复杂度,但是不适用于数据库这种对内存要求苛刻的应用,数据库产品例如MySQL,MongoDB,Redis都有自己的内存管理器,故需要关闭THP)。 而在docker中容器共享宿主机kernel,不建议修改宿主机的kernel参数。所以在编译AliSQL的时候去掉tokudb引擎。 这个问题暂时没有找到合适的解决方案。 在redis和mongodb中都会有这个问题,只不过他们只会warning一下,没有TokuDB这么傲娇完全不启动。

AliSQL有推荐的配置文件,可以拿来配置使用。 将cnf文件映射到/etc/mysql下即可。 命令:
$ docker run --name alisql -v /my/custom:/etc/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d registry.cn-hangzhou.aliyuncs.com/acs-sample/alisql:latest

【云栖快讯】一站式开发者服务,海量学习资源免费学  详情请点击

网友评论