LoginSignup
14
11

More than 5 years have passed since last update.

ProxySQL構築

Last updated at Posted at 2017-02-06

注意点

導入の注意点は3つ。
・mysql>とあっても経過監視、設定格納のために使うSQLiteと
プロクシ先のMySQLサーバ接続は違うもの
・コンフィグはファイルに設定して再起動しても有効にならない
詳しくはmixiの方の記事を参考
http://qiita.com/yoan/items/ba62dd65b24ac1b6a458

インストール(ubuntu16.04)

cd /tmp
wget https://github.com/sysown/proxysql/releases/download/v1.3.3/proxysql_1.3.3-ubuntu16_amd64.deb
sudo dpkg -i proxysql_1.3.3-ubuntu16_amd64.deb
#テスト起動
sudo /etc/init.d/proxysql start
#動作確認
ps -ef | grep [p]roxysql

設定ファイル編集

サンプルが大変優秀なのと設定する設定のWikiを読めば大体わかります。
ルールのWikiならここ
https://github.com/sysown/proxysql/wiki/MySQL-Query-Rules

sudo vi /etc/proxysql.cnf

#SQLiteへの接続情報です
        admin_credentials="admin:admin"
        mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
#スレッド数です
        threads=2
#PROXYの待受ポートです
        interfaces="0.0.0.0:6033;/tmp/proxysql.sock"
#接続先の情報です。
#proxysqlはホストグループ単位(番号)で振り分け設定がされるので設定する必要があります。
#デフォルトでは0に転送されます。
mysql_servers =
(
       { address="127.0.0.1" , port=13306 , hostgroup=0, max_connections=1000 },
       { address="127.0.0.1" , port=23306 , hostgroup=1, max_connections=1000 }
)
#接続ユーザの情報です。MySQLへPROXY経由で接続する全ユーザを書く必要があるようです。
#また、パスワードが現パージョンでは暗号化されません。
#認証課金は直接HAPROXYを参照するようにしましょう。
#information_schemaが見られる権限ない場合schemaを指定する必要があります。
mysql_users:
(
{ username = "zabbix" , password = "xxxx" , default_hostgroup = 0 , active = 1  ,  default_schema = "zabbix" }
)

#振り分けルールです。rule_id順に評価されます。
mysql_query_rules:
(
#negate_match_patternで否定、SELECT以外をホストグループ0へ
        {
                rule_id=1
                active=1
                match_pattern="^SELECT"
                destination_hostgroup=0
                negate_match_pattern=1
                apply=1
        },
#ZabbixはセッションをDBで保持しているので悩ましいがホストグループ0を参照
        {
                rule_id=9
                active=1
                match_pattern=".*sessions.*"
                destination_hostgroup=0
                apply=1
        },
#zabbixユーザからのアクセスはホストグループ1へ
    {
        rule_id=10
        active=1
                username="zabbix"
        match_pattern="^SELECT"
        destination_hostgroup=1
        apply=1
    },
#SELECTから始まるものはホストグループ0へ
        {
                rule_id=20
                active=1
                match_pattern="^SELECT"
                destination_hostgroup=0
                apply=1
        }
)

ProxySQL設定反映

SQLiteファイルを削除して設定ファイルから反映するのが楽です。

設定格納ファイル削除
sudo rm -rf /var/lib/proxysql/proxysql.db
proxysql再起動
sudo /etc/init.d/proxysql restart

ProxySQL操作(SQLite)

SQLiteに接続
mysql -u admin -padmin -h 127.0.0.1 -P6032
テーブル一覧
mysql> show tables;
実際に設定されているユーザ
mysql> select * from runtime_mysql_users;
実際に設定されているサーバ
mysql> select * from runtime_mysql_servers;
実際に設定されているルール
mysql> select * from runtime_mysql_query_rules;
クエリがルールに適応されているか
mysql> select active,hits, mysql_query_rules.rule_id, match_digest, match_pattern, replace_pattern, cache_ttl, apply,flagIn,flagOUT FROM mysql_query_rules NATURAL JOIN stats.stats_mysql_query_rules ORDER BY mysql_query_rules.rule_id;
サーバが接続されているか
mysql> SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start DESC LIMIT 6;
サーバが生きているか
mysql> SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start DESC LIMIT 6;

MySQLサーバー接続

-hlocalhostではsocketに接続しにいくので使わないこと

#デフォルトであれば
mysql -uzabbix -h127.0.0.1 -P6033 -p
14
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11