今回はInnoDB Clusterの基本的なオペレーションをまとめました。
MySQL Shellから実行するのですが、
結構今までよりもコマンドが増えたので、自分用のメモとしても使うつもりです。
基本操作
インスタンスへの接続
操作は全てmysqlshから。
# mysqlsh
JavaScript、SQL、Pythonのモードがあり、デフォルトはJS。
InnoDB Cluster関連の操作は(今のところ)全てJSで実施。
変えたい時は、
\js \sql \py
mysqlshを叩いただけではまだインスタンスに接続していないので、
mysql-js> shell.connect('ユーザ名@接続先')
※接続先にlocalhostとやるとSandboxインスタンスとみなされてしまうので、IPで指定する。
抜ける時は、
\q
quitやexitでは抜けられないので注意。
グローバルオブジェクト
よく使うグローバルオブジェクトにdbaがあります。
(というか、他は上のshell.connectくらいしか使いません)
Sandboxインスタンスを作ったり壊したりする関数もあるのですが(lab版時代のなごり?)、
商用環境で、ということならSandboxインスタンスは利用しないと思うので、
よく使うのは、
- checkInstanceConfiguration 引数のインスタンスがGroup Replicationで利用できるかチェックする。 - configureLocalInstance ローカルインスタンスがGroup Replicationで利用できるよう設定を行う。 - createCluster クラスタを作成する。 - dropMetadataSchema クラスタのメタデータを削除する。ただしグループレプリケーション設定は残るので注意。 - getCluster クラスタオブジェクトを取得する。 - help ヘルプ。 - rebootClusterFromCompleteOutage 認識しているクラスタの全てのメンバーがダウンした時にクラスタを再起動する。
というところでしょうか。
典型的な使い方としては、
mysql-js> dba.configureLocalInstance() ↓ mysql-js> dba.checkInstanceConfiguration() ↓ mysql-js> dba.createCluster("クラスター名") (ここで var cluster = dba.createCluster("クラスター名")としてクラスタオブジェクトを変数に代入しておいても良い。) 一度セッションを切ってからクラスタオブジェクトを再取得したい時に、 mysql-js> dba.getCluster()
という感じでしょうか。
getCluster以外は、クラスター作成時やドロップ時などにしか使わなそうですね。
逆に、getClusterはすごくよく使いそう。
各関数の詳細なヘルプは、
mysql-js> dba.help('getCluster')
などとやれば確認できます。
クラスターオブジェクト
クラスターオブジェクトの中身で、
よく使っている又は使いそうなのは、
こんなところです。
- addInstance クラスターにインスタンスを追加する。 - checkInstanceState インスタンスのGTIDの状態を確認する。 - dissolve Dissolves the cluster. - forceQuorumUsingPartitionOf Restores the cluster from quorum loss. - help ヘルプ。 - rejoinInstance 離脱したインスタンスをクラスターに再JOINさせる。 - removeInstance インスタンスをクラスターから離脱させる。 - rescan Rescans the cluster. - status クラスター全体やメンバーの状況を表示する。
※まだ使ったことない関数は説明が英語のままです。
addInstance、rejoinInstance、removeInstanceはメンバーの追加・削除がらみですね。
statusは使用頻度高し。
forceQuorumUsingPartitionOfはスプリットブレイン関連っぽいですが、
詳細は未確認。
MySQL Router
ほとんどないです。
# mysqlrouter --bootstrap 疎通ユーザ名@クラスタ内の任意のサーバのIP:ポート --directory ルーティング情報や起動情報を格納するディレクトリ --user=root
※MySQL Routerをrootユーザで起動しない場合は–user=rootは要らないと思います。
これで接続情報をInnoDB Clusterから取ってくるので、
あとはルーティングをスタートするだけ。
# --directoryで指定したパス/start.sh
停止は、
# --directoryで指定したパス/stop.sh
詳細な設定情報は、–directoryで指定したパス配下のmysqlrouter.confに書いてあるので、
そちらを参照すれば事足ります。
(昔は.iniでしたが名称が変わったようです)
ケース別の使い方
クラスターを作成する
詳細な手順はこちらの記事を見てみてください。
mysql-js> dba.configureLocalInstance() (MySQL再起動) mysql-js> dba.checkInstanceConfiguration() mysql-js> var cluster = dba.createCluster("クラスター名") mysql-js> cluster.addInstance('疎通ユーザ名@メンバーのIP') (台数分繰り返す)
クラスターオブジェクトを取得する
mysql-js> var cluster = dba.getCluster()
クラスターの状態を確認する
mysql-js> var cluster = dba.getCluster() mysql-js> cluster.status()
落ちたクラスターを再JOINする
クラスター内のR/Wサーバで、
mysql-js> var cluster = dba.getCluster() mysql-js> cluster.rejoinInstance('疎通ユーザ名@メンバーのIP')
ただし、追いつくためのバイナリログがクラスター側に残っていることが必要です。
追いつき中は、cluster.status()で、メンバーのステータスが”status”: “RECOVERING”となっていますが、
追いつき切るとONLINEに戻ります。
とりあえずこんなところです。
他は、ヘルプを見ながらやってみてください。
今日はここまで!