今までずっと 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っていうタグのがそうです。
【2014/01/02 16:41】リポジトリ変えた
https://registry.hub.docker.com/u/yoku0825/mysql_fabric_aware/
Have fun!
【2014/12/19 18:40】
このあたりのmysqlfabric group create/add を自動でやるようなスクリプトも書いた。
http://yoku0825.blogspot.jp/2014/12/dockermysql-fabric.html
0 件のコメント :
コメントを投稿