アプリケーションサーバからGalera Clusterへの接続をどうやって行うか考えており、HAProxyで実装してみました。
以下動作確認結果です-
環境
OS
Amazon Linux 2014.09
ミドル
ミドル | バージョン |
---|---|
ロードバランサ | HAProxy 1.5.9 |
データベース | MariaDB-Galera-server-5.5.40-1.el6.x86_64 |
レプリケーションライブラリ | galera-25.3.5-1.rhel6.x86_64 |
サーバー一覧
サーバ | IP |
---|---|
HAProxy | 10.0.1.50 |
Galera Cluster#1 | 10.0.0.187 |
Galera Cluster#2 | 10.0.0.97 |
Galera Cluster#3 | 10.0.0.246 |
手順
HAProxy 1.5.9のビルド
Amazon Linuxが標準で提供しているHAProxyは1.4.22だったのでHAProxy 1.5.9をrpmbuildしました。
mockを利用してhaproxyのrpmを作成するスクリプトを公開している方がいたので、こちらを参考にrpmbuildでrpmを作成しました。
boogieshafer/haproxy-rpm · GitHub
※このスクリプトをそのまま使えたらよかったのですがmockが上手く動かず断念.
build-haproxy失敗ログ
[ec2-user@ip-10-0-1-50 haproxy-rpm]$ bash build-haproxy.1.5.x.sh Downloading sources... Building initial source rpm... 書き込み完了: /usr/src/rpm/SRPMS/haproxy-1.5.9-2.src.rpm Using mock to build rpm... INFO: mock.py version 1.1.41 starting... Start: init plugins INFO: selinux disabled Finish: init plugins Start: run INFO: Start(/usr/src/rpm/SRPMS/haproxy-1.5.9-2.src.rpm) Config(amzn-x86_64) Start: lock buildroot Start: clean chroot INFO: chroot (/var/lib/mock/amzn-x86_64) unlocked and deleted Finish: clean chroot Finish: lock buildroot Start: chroot init Start: lock buildroot Mock Version: 1.1.41 INFO: Mock Version: 1.1.41 INFO: calling preinit hooks INFO: enabled root cache INFO: enabled yum cache Start: cleaning yum metadata Finish: cleaning yum metadata INFO: enabled ccache Start: device setup Finish: device setup Start: yum update ERROR: Exception(/usr/src/rpm/SRPMS/haproxy-1.5.9-2.src.rpm) Config(amzn-x86_64) 0 minutes 0 seconds INFO: Results and/or logs in: /var/lib/mock/amzn-x86_64/result ERROR: Command failed: # ['/usr/bin/yum', '--installroot', '/var/lib/mock/amzn-x86_64/root/', 'install', '@buildsys-build'] Configuration file /var/lib/mock/amzn-x86_64/root/etc/yum/pluginconf.d/update-motd.conf not found Unable to find configuration file for plugin update-motd Configuration file /var/lib/mock/amzn-x86_64/root/etc/yum/pluginconf.d/upgrade-helper.conf not found Unable to find configuration file for plugin upgrade-helper Group buildsys-build does not exist. Error: Nothing to do Cleaning up...
HAProxyのインストール
$ cd /usr/src/rpm/RPMS/x86_64 $ sudo yum localinstall haproxy-1.5.9-2.amzn1.x86_64.rpm
HAProxyの設定
とりあえずほぼデフォルトで。
global log 127.0.0.1 local0 log 127.0.0.1 local1 notice #log loghost local0 info maxconn 1024 chroot /var/lib/haproxy user haproxy group haproxy daemon defaults log global mode http option httplog option dontlognull retries 3 redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen galera_clister 0.0.0.0:3306 mode tcp balance roundrobin option tcpka option mysql-check user haproxy server galera01 10.0.0.187:3306 check weight 1 server galera02 10.0.0.97:3306 check weight 1 server galera03 10.0.0.246:3306 check weight 1
DBにcheck用ユーザの作成
ヘルスチェック用のユーザをデータベース上に作成します。適当なGalera Clusterノードでmysql-checkを実行するユーザを作成します。
GRANT USAGE ON *.* TO haproxy@'%' FLUSH PRIVILEGES;
接続テスト
HAProxyサーバから行ないます。ラウンドロビンで接続できています。
[root@ip-10-0-1-50 haproxy]# mysql -uroot -proot -h127.0.0.1 -e "show variables like 'wsrep_node_name' ;" +-----------------+------------+ | Variable_name | Value | +-----------------+------------+ | wsrep_node_name | 10.0.0.187 | +-----------------+------------+ [root@ip-10-0-1-50 haproxy]# mysql -uroot -proot -h127.0.0.1 -e "show variables like 'wsrep_node_name' ;" +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | wsrep_node_name | 10.0.0.97 | +-----------------+-----------+ [root@ip-10-0-1-50 haproxy]# mysql -uroot -proot -h127.0.0.1 -e "show variables like 'wsrep_node_name' ;" +-----------------+------------+ | Variable_name | Value | +-----------------+------------+ | wsrep_node_name | 10.0.0.246 | +-----------------+------------+
とりあえず負荷分散するだけ!なら簡単でした。
次はノード障害テストやらないと。
その他
Galera Load Balancerというのもあるみたいです。気が向いたら試そうかな…
codership/glb
元記事はこちらです。
「HAProxy経由でGalera Cluster MariaDBに接続する」