MySQL Fabric検証シリーズ第3弾。
今度はMySQL Fabric特有の設定を入れ込んでいく。
まず、第1弾で説明した(といっても記事に第1弾とは書いてなかったり、、、)
アーキテクチャよりも細かい部分を説明していく。
MySQL Fabric管理サーバのMySQLには「fabric」データベースが作成されており、
このfabricデータベースによって、管理下のMySQLサーバや高可用性グループの情報を一元管理している。
fabricデータベース内部のテーブルについてはこちら。
これらfabricデータベース内の情報に従って、MySQL Fabricはコネクタに構成情報をマッピングする。
また、MySQL Fabricからの接続用のユーザが管理下のMySQLサーバに存在しており、
MySQL Fabricから管理下のMySQLサーバを操作する際はこのユーザを使用する。
MySQL Fabricを使用する際のユーザには大きく3種類ある。
バッキングストアを操作するためのバッキングストアユーザ、
管理下のMySQLサーバを操作するためのサーバユーザ、
MySQL Fabricと通信する際にXML-RPCプロトコルの認証で使用するユーザ
の3つ。
※他にもバックアップユーザ、リストアユーザがあるが、
これはバックアップ・リカバリ時に使用するユーザなので、今回は触れない。
確認したい人はこちら。
なお、このリンクには上記3ユーザの必要権限が記載されているので、
権限最小化を意識する際は参照すべし。
バッキングストアユーザ、サーバユーザについては、通常のMySQLユーザとなんら変わらないので、
詳細な説明は省くが、
バッキングストアユーザは、MySQL Fabric構成情報変更のオペレーションをするホストからの接続を許可すればよい。
(通常、localhostでよいはず)
一方、サーバユーザは、MySQL Fabricサーバからの接続許可に加え、
同じ高可用性グループ内からのアクセスは許可しておく必要がある。
これは、MySQL Fabricではサーバユーザを利用して高可用性グループ内のレプリケーションを行っているためである。
XML-RPCプロトコル認証のためのユーザについては、多少の説明が必要と思う。
MySQL Fabric管理サーバとの通信は、XML-RPCプロトコルまたはMySQL Server/Clientプロトコルが対応している。
しかし、2015年7月現在、MySQL Server/Clientプロトコルによる通信を行うコネクタはなく、
通信はXML-RPCプロトコルのみである。
(ただし、lab版がリリースされている、Connector/CはMySQL Server/Clientプロトコルを利用していると聞いたことがある)
このため、XML-RPCプロトコル用の認証ユーザが存在する、というわけである。
なお、実際に検証はしていないのだが、XML-RPCプロトコルを使用する、ということは、
通信するサーバ間でHTTPポート(80番)が開放されている必要があるはず。
少なくとも、APサーバからMySQL Fabricサーバに対しては80番ポートでの通信を許可する必要があるはずなので、
APサーバとMySQL Fabricバッキングストアを別サーバに立てる場合には注意が必要と思われる。
これらのユーザ認証情報は、MySQL Fabricの設定ファイルに記載する。
MySQL Fabricの設定ファイルはfabric.cfgという名前で、
デフォルトでは/etc/mysql/の配下に配置されている。
設定可能な項目はこちらを参照。
基本設定時に主に使用するセクションは[storage]、[servers]、[protocol.xmlrpc]の3つであり、
[storage]セクションはバッキングストアに関する設定、
[servers]セクションは監視対象のMySQLサーバに関する設定、
[protocol.xmlrpc]セクションはXML-RPCプロトコルでの通信に関する設定を
それぞれ記載する。
・・・さて、前置きが長くなったが、実際の設定手順に入っていく。
なお、MySQLがインストールされていることを前提としている。
まだしていない人はMySQL Fabric検証シリーズ第2弾を参照のこと。
私の環境では、192.168.2.213~192.168.2.219の7台のサーバを用意している。
普通の人はこんなにサーバを準備するのは面倒と感じると思うので、
1台のサーバで複数のMySQLプロセスを立ち上げればそれで問題ない。
その場合は、以下でIPを書いているところにプラスでポートを記載する(192.168.2.213:3306、など)こと。
末尾213をMySQL Fabricバッキングストア用、
214と215を1つ目、216と217を2つ目の高可用性グループとして、
218と219をグローバルグループとして構成する。
○ バッキングストアユーザ作成
バッキングストアユーザを作成する。
バッキングストア用サーバ(私の場合は末尾213)にて、
mysql> grant all on *.* to 'fabric'@'localhost' identified by 'XXXXXXXX';
○ サーバユーザ作成
サーバユーザを作成する。
監視対象MySQL(私の場合は末尾214~219)にて、
mysql> grant all on *.* to 'fabric'@'192.168.2.%' identified by 'XXXXXXXX';
これでユーザの設定は完了なのだが、
MySQL Fabricで監視をスタートするとレプリケーションが行われるため、
SlaveとなったMySQLにMasterで実行した上記クエリが再度流れてくることになり、
レプリケーションエラーが発生することが予測されるため、
監視対象MySQLにて、reset masterを実行する。
mysql> reset master;
※Slave側では不要だが、MySQL FabricがどちらをMasterにするかはわからないため、
Master/Slave両方でreset masterを実行した。
○ 設定ファイル修正
デフォルトで/etc/mysql/fabric.cfgが作られているので、これを修正する。
# vi /etc/mysql/fabric.cfg
修正するのは、[storage]セクションのuser、password、
[servers]セクションのuser、password、
[protocol.xmlrpc]セクションのuser、password、address
である。
これらに、上記作成したユーザ名、パスワードを入力していけばよい。
[protocol.xmlrpc]セクションのaddressについては、
クライアントがMySQL Fabricに接続する際の接続先を記載する。
APサーバとMySQL Fabricサーバが異なる場合、
デフォルトのlocalhost:32274では接続できないため、
localhostの部分を自身のIPアドレスに書き換える必要がある点に注意。
また、XML-RPCプロトコル通信での認証を省きたい場合は、
[protocol.xmlrpc]セクションのdisable_authenticationをyesに書き換えればよい。
設定例:
[DEFAULT] prefix = sysconfdir = /etc logdir = /var/log [statistics] prune_time = 3600 [logging] url = file:///var/log/fabric.log level = INFO [storage] auth_plugin = mysql_native_password database = fabric user = fabric address = localhost:3306 connection_delay = 1 connection_timeout = 6 password = XXXXXXXX connection_attempts = 6 [failure_tracking] notification_interval = 60 notification_clients = 50 detection_timeout = 1 detection_interval = 6 notifications = 300 detections = 3 failover_interval = 0 prune_time = 3600 [servers] password = fabric user = XXXXXXXX unreachable_timeout = 5 [connector] ttl = 1 [client] password = [protocol.xmlrpc] # disable_authentication = no disable_authentication = yes ssl_cert = realm = MySQL Fabric ssl_key = ssl_ca = threads = 5 user = admin # address = localhost:32274 address = 192.168.2.213:32274 # password = password = XXXXXXXX [executor] executors = 5 [sharding] prune_limit = 10000 mysqldump_program = /usr/bin/mysqldump mysqlclient_program = /usr/bin/mysql [protocol.mysql] disable_authentication = no ssl_cert = ssl_key = ssl_ca = user = admin address = localhost:32275 password =
○ バッキングストアセットアップ
バッキングストアをセットアップする。
ここからはmysqlfabricユーティリティを使用する。
マニュアルはこちら。
下記コマンドでバッキングストアが作成される。
[root@mysql-fabric-kensyo1 mysql]# mysqlfabric manage setup [INFO] 1434839692.758403 - MainThread - Initializing persister: user (fabric), server (localhost:3306), database (fabric). Finishing initial setup ======================= Password for admin user is not yet set. Password for admin/xmlrpc:
ここでxmlrpcプロトコルの認証情報を設定するため、先ほど記載したユーザのパスワードを入力する。
これで初期セットアップは完了。
○ MySQL Fabric起動
[root@mysql-fabric-kensyo1 ~]# mysqlfabric manage start --daemonize
–daemonizeをつけなくても起動はできるが、プロンプトが返ってこなくなってしまうため、
つけたほうがよい。
起動したかどうかはmysqlfabric manage pingコマンドで確認。
起動時:
[root@mysql-fabric-kensyo1 ~]# mysqlfabric manage ping Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1
停止時:
[root@mysql-fabric-kensyo1 ~]# mysqlfabric manage ping urlopen error [Errno 111] Connection refused
○ 高可用性グループ作成
まず高可用性グループのガワだけつくり、後からグループにサーバを追加する、という手順になる。
なお、下記構築中何度かグループを作り直したりしているので、
UUIDが一致しないことがある。
多くの方にとっては注視する必要はない所だが、念のためご留意頂きたい。
高可用性グループを作る。
[root@mysql-fabric-kensyo1 ~]# mysqlfabric group create my_first_fabric --description="214 and 215 group." Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 uuid finished success result ------------------------------------ -------- ------- ------ fb0796ac-4f93-467e-bc9a-bf53c59c8ad0 1 1 1 state success when description ----- ------- ------------- ------------------------------------------------------------- 3 2 1.43484e+09 Triggered by. 4 2 1.43484e+09 Executing action (_create_group). 5 2 1.43484e+09 Executed action (_create_group).
高可用性グループにサーバを追加する。
[root@mysql-fabric-kensyo1 ~]# mysqlfabric group add my_first_fabric 192.168.2.214 Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 uuid finished success result ------------------------------------ -------- ------- ------ c524ec7d-367d-43ca-b787-cc29317aa2d4 1 1 1 state success when description ----- ------- ------------- ------------------------------------------------------------- 3 2 1.43484e+09 Triggered by. 4 2 1.43484e+09 Executing action (_add_server). 5 2 1.43484e+09 Executed action (_add_server).
以下、同じように高可用性グループを作成し、サーバを追加して下記構成とした。
※グローバルグループも高可用性グループの一種なので、作成方法は同じ。
my_first_fabric
192.168.2.214
192.168.2.215
my_second_fabric
192.168.2.216
192.168.2.217
my_global_fabric
192.168.2.218
192.168.2.219
これらの設定は
mysqlfabric group lookup_groups
mysqlfabric group lookup_servers グループ名
コマンドで確認できる。
mysqlfabric group lookup_groups
[root@mysql-fabric-kensyo1 ~]# mysqlfabric group lookup_groups Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 group_id description failure_detector master_uuid ---------------- ------------------------ ---------------- ------------------------------------ my_global_fabric 218 and 219 global group 0 None my_first_fabric 214 and 215 0 None my_second_fabric 216 and 217 0 None
mysqlfabric group lookup_servers グループ名
[root@mysql-fabric-kensyo1 ~]# mysqlfabric group lookup_servers my_first_fabric Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 server_uuid address status mode weight ------------------------------------ ------------- --------- ---------- ------ 283772fe-176f-11e5-a655-000c2990f26e 192.168.2.214 SECONDARY READ_ONLY 1.0 9ec4956f-1771-11e5-a666-000c297f3fa2 192.168.2.215 SECONDARY READ_ONLY 1.0
○ MySQL Fabricのレプリケーションを開始する。
[root@mysql-fabric-kensyo1 ~]# mysqlfabric group promote my_first_fabric Password for admin: Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 uuid finished success result ------------------------------------ -------- ------- ------ 121fe14e-1653-4add-a473-779dedf898ce 1 1 1 state success when description ----- ------- ------------- ------------------------------------------------------------- 3 2 1.43484e+09 Triggered by. 4 2 1.43484e+09 Executing action (_define_ha_operation). 5 2 1.43484e+09 Executed action (_define_ha_operation). 3 2 1.43484e+09 Triggered by . 4 2 1.43484e+09 Executing action (_find_candidate_fail). 5 2 1.43484e+09 Executed action (_find_candidate_fail). 3 2 1.43484e+09 Triggered by . 4 2 1.43484e+09 Executing action (_check_candidate_fail). 5 2 1.43484e+09 Executed action (_check_candidate_fail). 3 2 1.43484e+09 Triggered by . 4 2 1.43484e+09 Executing action (_wait_slave_fail). 5 2 1.43484e+09 Executed action (_wait_slave_fail). 3 2 1.43484e+09 Triggered by . 4 2 1.43484e+09 Executing action (_change_to_candidate). 5 2 1.43484e+09 Executed action (_change_to_candidate).
確認は下記コマンドで可能。
status欄がPRIMARYとなっているのがMaster、SECONDARYとなっているのがSlave。
[root@mysql-fabric-kensyo1 ~]# mysqlfabric group lookup_servers my_first_fabric Password for admin: Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 server_uuid address status mode weight ------------------------------------ ------------- --------- ---------- ------ b5420e49-1775-11e5-a680-000c29337b1b 192.168.2.214 SECONDARY READ_ONLY 1.0 b61e91a7-1775-11e5-a680-000c29c92c22 192.168.2.215 PRIMARY READ_WRITE 1.0
想定と違ったサーバがMasterになっているので、再度上記のPromoteを実行して、
想定どおりのMaster/Slave構成にした。
[root@mysql-fabric-kensyo1 ~]# mysqlfabric group lookup_servers my_first_fabric Password for admin: Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 server_uuid address status mode weight ------------------------------------ ------------- --------- ---------- ------ b5420e49-1775-11e5-a680-000c29337b1b 192.168.2.214 PRIMARY READ_WRITE 1.0 b61e91a7-1775-11e5-a680-000c29c92c22 192.168.2.215 SECONDARY READ_ONLY 1.0
これらの作業を残りのmy_second_fabric、my_global_fabricグループにも実行した。
以上でMySQL Fabricの基本設定は完了となる。
死活監視、データシャーディングについてはまた次回以降に掲載する予定。
=====MySQL Fabric検証シリーズ=====
第1弾:UCO-Tech(MySQL Fabricアーキテクチャ編)
第2弾:UCO-Tech(MySQL Fabricインストール&検証準備編)
第3弾:UCO-Tech(MySQL Fabric基本設定編)
第4弾:UCO-Tech(MySQL Fabric死活監視編)
第5弾:UCO-Tech(MySQL Fabricデータシャーディング編)
==================================