1. 読み込み・書き込み分離の概要
MySQLにおける読み込み・書き込み分離は、主にmasterデータベースが書き込み処理を担当し、slaveデータベースが読み込み処理を担当する仕組みです。master側で発生した変更は、各slaveノードに非同期で複製されます。
この分離方式がパフォーマンス向上に寄与する理由は以下の通りです:
- 物理サーバーを追加することで全体の処理能力が向上し、ハードウェアでパフォーマンスを補完できます。
- マスターとスレーブがそれぞれの処理に専念することで、排他ロックと共有ロックの競合を大幅に緩和します。
- スレーブ側はMyISAMエンジンを採用することで、クエリ性能を高めつつリソース消費を抑えることができます。
- マスター側の書き込みは並列処理であり、スレーブ側はマスターからのバイナリログをもとに非同期でデータを復元します。
- スレーブ側では読み込み性能を最適化するための個別設定が可能です。
- 冗長性が確保されるため、システムの可用性向上にもつながります。
2. 設定手順
2.1 ハードウェア構成
master: 192.168.85.11 slave: 192.168.85.12 proxy: 192.168.85.14
2.2 マスター・スレーブのレプリケーション設定
まず、masterとslave間のレプリケーションを正しく構築してください。
2.3 Proxyのインストールと設定
- MySQL Proxyを公式サイトからダウンロード:ダウンロードページ
- XFTPなどを使用してproxyサーバーにファイルをアップロード。
- 圧縮ファイルを展開:
tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
- ディレクトリ名を簡潔に変更:
mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit mysql-proxy
- 必要なディレクトリを作成:
cd mysql-proxy mkdir conf logs
- 環境変数を設定:
vi /etc/profile # 最終行に追記 export PATH=$PATH:/root/mysql-proxy/bin # 設定反映 source /etc/profile
- 設定ファイルを作成:
cd conf vi mysql-proxy.conf
- 以下の内容を記述:
[mysql-proxy] user=root proxy-address=192.168.85.14:4040 proxy-backend-addresses=192.168.85.11:3306 proxy-read-only-backend-addresses=192.168.85.12:3306 proxy-lua-script=/root/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua log-file=/root/mysql-proxy/logs/mysql-proxy.log log-level=debug daemon=true
- MySQL Proxyを起動:
mysql-proxy --defaults-file=/root/mysql-proxy/conf/mysql-proxy.conf
- ログファイルを確認:
cd /root/mysql-proxy/logs tail -100 mysql-proxy.log
ログに以下の内容が含まれていれば成功:
2019-10-11 21:49:41: (debug) max open file-descriptors = 1024 2019-10-11 21:49:41: (message) proxy listening on port 192.168.85.14:4040 2019-10-11 21:49:41: (message) added read/write backend: 192.168.85.11:3306 2019-10-11 21:49:41: (message) added read-only backend: 192.168.85.12:3306 2019-10-11 21:49:41: (debug) now running as user: root (0/0)
2.4 接続確認
以下のコマンドでクライアントから接続可能です:
mysql -uroot -p123 -h192.168.85.14 -P 4040