目次
こんにちは。grasys清水です。
今回は ProxySQL 2.0 のお話。 以前、当社のブログであげられていた Proxysql の続編みたいなもの。 1.4系に比べると便利になったので、機能のご紹介です。
ProxySQL って?
一言で言うと、Database Proxy の一種です。
Maxscale 的な感じで、R/W分散、DBの死活監視、自動F/Oなんかができたりします。
ダウンタイムなしでパラメータを変えられるのも魅力の1つです。
今回は基本的な使い方には触れませんが、詳しいことはリファレンスを参照ください。
公式: ProxySQL
GitHub: sysown/proxysql
ざっくり: ProxySQL – blog.grasys.io
version 2.0
さて、 1.4 → 2.0 へ大幅にアップグレードした機能をざっと見てみましょう。
GTID tracking
Mysqlのレプリケーションを組んでいて、MysqlがMasterへ書き込みを終えた 直後 、 レプリケーションが完了する前に Slaveへ読み込みを行なってしまうと、正しくないデータを参照することになってしまいます。
そんな事象を解決してくれる補助機能として、 GTID という機能を使うんですが、その実行されたGTIDをトラックして、正しいslaveからデータを読み込みましょう、というのが、今回追加された機能です。
R/W split ルーティングをさせたい時は、ぜひ活用したい機能になります。
参照: GTID consistent reads – ProxySQL
Native Galera Support
注目したい機能です。
今回のバージョンから Galera Cluster がネイティブサポートされました。
今までは、Proxysqlのスケジューラ機能を使って外部スクリプトを使い、F/Oを実現していましたが、今後はそれらが不要になります。
PXCを使うのであれば、必ず選択肢の1つに挙げたいソリューションになります。
参照: Native Galera Support In ProxySQL
SSL Encryption
今までは、バックエンドに対してだけだったSSL暗号化通信が、対フロントエンドにも使えるようになりました。
参照: SSL Encryption at ProxySQL Part 1
参照: SSL configuration for frontends
errorlog variable
ちょっとしたことですが、 2.0 から、ログのlocationを変更できるようになりました。
今まで、データディレクトリ配下にのみ作成されていたのですが、今回からは任意の場所に吐かせることが可能です。インフラ的には大変嬉しい機能です。
参照: General variables – ProxySQL
例の Fail Over 機能を使う
今回はGaleraをネイティブサポートしたというPorxySQLの機能を使ってみます。
mysql_galera_hostgroups
今回は、mysql_galera_hostgroups
というコンポーネントを使います。
使い方は、mysql_replication_hostgroups と似た感じです。
shimichan-db01/02/03 は PXC で構築されたバックエンドです。
mysql_servers =
(
{ address="10.140.0.43" , port=3306 , hostgroup=500 , weight=1000 , comment="shimichan-db01" },
{ address="10.140.0.44" , port=3306 , hostgroup=500 , weight=500 , comment="shimichan-db02" },
{ address="10.140.0.45" , port=3306 , hostgroup=500 , weight=100 , comment="shimichan-db03" }
)
mysql_galera_hostgroups =
(
{
writer_hostgroup=500
backup_writer_hostgroup=8500
reader_hostgroup=501
offline_hostgroup=9401
max_writers=1
writer_is_also_reader=1
max_transactions_behind=16
active=1
}
)
msyql_servers はすべてのグループを設定する必要はありません。
writer_hostgroup, reader_hostgroup などを mysql_servers と対応するように設定してあげます。
私はPXCの場合は、突発的なメンテナンスなどを除いて、基本的に CONF = DISK = RUNTIME で運用するのが好みなので、CONFからLOADしてます。
(もちろん今回は、admin interface を使ってインタラクティブにパラメータを変更してもOKです)
--------------
SELECT * FROM runtime_mysql_galera_hostgroups
--------------
+------------------+-------------------------+------------------+-------------------+--------+-------------+-----------------------+-------------------------+---------+
| writer_hostgroup | backup_writer_hostgroup | reader_hostgroup | offline_hostgroup | active | max_writers | writer_is_also_reader | max_transactions_behind | comment |
+------------------+-------------------------+------------------+-------------------+--------+-------------+-----------------------+-------------------------+---------+
| 500 | 8500 | 501 | 9401 | 1 | 1 | 1 | 16 | |
+------------------+-------------------------+------------------+-------------------+--------+-------------+-----------------------+-------------------------+---------+
--------------
SELECT * FROM runtime_mysql_servers
--------------
+--------------+-------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+----------------+
| hostgroup_id | hostname | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+-------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+----------------+
| 500 | 10.140.0.43 | 3306 | 0 | ONLINE | 1000 | 0 | 1000 | 0 | 0 | 0 | shimichan-db01 |
| 8500 | 10.140.0.44 | 3306 | 0 | ONLINE | 500 | 0 | 1000 | 0 | 0 | 0 | shimichan-db02 |
| 8500 | 10.140.0.45 | 3306 | 0 | ONLINE | 100 | 0 | 1000 | 0 | 0 | 0 | shimichan-db03 |
| 501 | 10.140.0.43 | 3306 | 0 | ONLINE | 1000 | 0 | 1000 | 0 | 0 | 0 | shimichan-db01 |
| 501 | 10.140.0.44 | 3306 | 0 | ONLINE | 500 | 0 | 1000 | 0 | 0 | 0 | shimichan-db02 |
| 501 | 10.140.0.45 | 3306 | 0 | ONLINE | 100 | 0 | 1000 | 0 | 0 | 0 | shimichan-db03 |
+--------------+-------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+----------------+
さて、下準備もできたので、F/O を試してみます。
shimichan-db01 の mysql を停止します。
systemctl stop mysql
さて、どうなってるでしょうか。
admin inteface に入って、パラメータを見ます。
--------------
SELECT * FROM runtime_mysql_servers
--------------
+--------------+-------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+----------------+
| hostgroup_id | hostname | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+-------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+----------------+
| 500 | 10.140.0.44 | 3306 | 0 | ONLINE | 500 | 0 | 1000 | 0 | 0 | 0 | shimichan-db02 |
| 8500 | 10.140.0.45 | 3306 | 0 | ONLINE | 100 | 0 | 1000 | 0 | 0 | 0 | shimichan-db03 |
| 9401 | 10.140.0.43 | 3306 | 0 | ONLINE | 1000 | 0 | 1000 | 0 | 0 | 0 | shimichan-db01 |
| 501 | 10.140.0.44 | 3306 | 0 | ONLINE | 500 | 0 | 1000 | 0 | 0 | 0 | shimichan-db02 |
| 501 | 10.140.0.45 | 3306 | 0 | ONLINE | 100 | 0 | 1000 | 0 | 0 | 0 | shimichan-db03 |
+--------------+-------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+----------------+
パラメータ上はうまくいってそうです。
実際に ProxySQL 経由でアクセスしてみて、確認します
mysql> select @@hostname;
+------------------+
| @@hostname |
+------------------+
| shimichan-db02 |
+------------------+
1 row in set (0.00 sec)
確認できたら、 shimichan-db01 のプロセスを復帰させてみます
systemctl start mysql
確認。
--------------
SELECT * FROM runtime_mysql_servers
--------------
+--------------+-------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+----------------+
| hostgroup_id | hostname | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+-------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+----------------+
| 500 | 10.140.0.43 | 3306 | 0 | ONLINE | 1000 | 0 | 1000 | 0 | 0 | 0 | shimichan-db01 |
| 8500 | 10.140.0.44 | 3306 | 0 | ONLINE | 500 | 0 | 1000 | 0 | 0 | 0 | shimichan-db02 |
| 8500 | 10.140.0.45 | 3306 | 0 | ONLINE | 100 | 0 | 1000 | 0 | 0 | 0 | shimichan-db03 |
| 501 | 10.140.0.43 | 3306 | 0 | ONLINE | 1000 | 0 | 1000 | 0 | 0 | 0 | shimichan-db01 |
| 501 | 10.140.0.44 | 3306 | 0 | ONLINE | 500 | 0 | 1000 | 0 | 0 | 0 | shimichan-db02 |
| 501 | 10.140.0.45 | 3306 | 0 | ONLINE | 100 | 0 | 1000 | 0 | 0 | 0 | shimichan-db03 |
+--------------+-------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+----------------+
ここまで!
まとめ
メジャーバージョンが変わっただけあって、機能が充実して、使いやすくなった印象です。
実は、 Amazon Aurora も mysql_aws_aurora_hostgroups
のコンポーネントを使えば、 R/W 分散や F/O が ProxySQL で実現できてしまったりします。
たまに、Maxscale が特定の言語やライブラリと相性が悪い場合があるようなので、そんな時はProxySQLを試してみるといいかもです。
ぜひぜひ、選択肢の1つとして検討してみてください。
株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。
grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud (GCP)、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。
お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。