2014年12月18日木曜日

MySQL Fabricのファームにすぐに突っ込めるようなDockerイメージを作ってみた

今までずっと MySQL::Sandbox で試してきたけど、ふと思いついたのでDockerイメージにしてみた。
Dockerが面白くて肝心のMySQL Fabricを全然触ってなかった気がするけど、いいの。

取り合えずMySQL Fabricに必要な要素としては、
* gtid-mode= ON
* server-idはカブらないように
* Fabricノードからファームのサーバーへはフルアクセスのユーザーが必要
くらいでしょうか。

何台追加で作ってもserver-idがカブらないようにするために、server-idはIPアドレスの下2バイトから自動生成するようにmysqld_safeにパッチをしてあります(--server-id=autoで、server_id= 3バイト目 * 256 + 4バイト目に自動設定する)

( ´-`).oO(これ、今まで誰もFRとか上げなかったのかな。。

Dockerfile見るのが一番判りやすいんですが、

# cat Dockerfile
FROM yoku0825/cent66:init
MAINTAINER yoku0825
RUN yum install -y perl libaio
RUN rpm -i http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.22-1.linux_glibc2.5.x86_64.rpm
RUN rpm -i http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.22-1.linux_glibc2.5.x86_64.rpm
ADD ./mysqld_safe.patch /root/mysqld_safe.patch
RUN patch /usr/bin/mysqld_safe /root/mysqld_safe.patch
ADD ./my.cnf /etc/my.cnf
ADD ./init_mysql.sh /root/init_mysql.sh
RUN bash /root/init_mysql.sh
EXPOSE 3306
CMD /etc/init.d/mysql start && tail -f /dev/null

クライアント(MySQL Fabric用のユーザー作ったりするのに使う)とサーバーだけrpmで突っ込んで、mysqld_safeにパッチ当てて、MySQLのユーザー作成はシェルスクリプトで押し込んで、というのがこれだけで書けました。楽チン。



# docker run -d -h fabric1 --name fabric1 fabric_aware_5622
da51ddad4e26f228435b60e2b2ec6c1dc465438b640575f232691b07affaeb4d

# docker run -d -h fabric2 --name fabric2 fabric_aware_5622
fd84f396f8fbcf688db6ca689b10f1d8bccb6dcc12fac3eb0c82a2639a23168f

# docker run -d -h fabric3 --name fabric3 fabric_aware_5622
8f5bc6199cb699048194bd1aff92d6ed0e8caad406e1a222f4e908fe8478509c

# docker inspect -f "{{.Name}}, {{.Config.Hostname}}, {{.NetworkSettings.IPAddress}}" $(docker ps | grep -v "^CONTAINER" | awk '{print $1}')
/fabric3, fabric3, 172.17.0.54
/fabric2, fabric2, 172.17.0.53
/fabric1, fabric1, 172.17.0.52

docker runでドカドカ上げて、


$ mysqlfabric group create my_docker_fabric
$ mysqlfabric group add my_docker_fabric 172.17.0.52
$ mysqlfabric group add my_docker_fabric 172.17.0.53
$ mysqlfabric group add my_docker_fabric 172.17.0.54
$ mysqlfabric group promote my_docker_fabric

$ mysqlfabric group lookup_servers my_docker_fabric
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1

                         server_uuid     address    status       mode weight
------------------------------------ ----------- --------- ---------- ------
b9d7c753-86a3-11e4-b627-aa6edb94a664 172.17.0.52 SECONDARY  READ_ONLY    1.0
bd269d22-86a3-11e4-b627-e6e3a6deb92c 172.17.0.53 SECONDARY  READ_ONLY    1.0
bff11b23-86a3-11e4-b627-a6df24859725 172.17.0.54   PRIMARY READ_WRITE    1.0

これだけで簡単に誰でもMySQL Fabricを試せるようになりました。。と、いいな。
ホストネームとIPアドレスの紐付けをDockerのホスト側になんか持たせようかしら(mysqlfabricとバッキングストアはDockerのホストにいる想定)

これでtcpdumpが見やすくなる!


DockerfileはGithubに。

Docker Hubだとここ。
【2014/01/02 16:41】リポジトリ変えた
https://registry.hub.docker.com/u/yoku0825/mysql_fabric_aware/

yoku0825/cent66:fabric_aware_5622っていうタグのがそうです。

Have fun!


【2014/12/19 18:40】
このあたりのmysqlfabric group create/add を自動でやるようなスクリプトも書いた。
http://yoku0825.blogspot.jp/2014/12/dockermysql-fabric.html

0 件のコメント :

コメントを投稿