MySQL 読み込みと書き込みの分離の実装

1. 読み込み・書き込み分離の概要

MySQLにおける読み込み・書き込み分離は、主にmasterデータベースが書き込み処理を担当し、slaveデータベースが読み込み処理を担当する仕組みです。master側で発生した変更は、各slaveノードに非同期で複製されます。

この分離方式がパフォーマンス向上に寄与する理由は以下の通りです:

  1. 物理サーバーを追加することで全体の処理能力が向上し、ハードウェアでパフォーマンスを補完できます。
  2. マスターとスレーブがそれぞれの処理に専念することで、排他ロックと共有ロックの競合を大幅に緩和します。
  3. スレーブ側はMyISAMエンジンを採用することで、クエリ性能を高めつつリソース消費を抑えることができます。
  4. マスター側の書き込みは並列処理であり、スレーブ側はマスターからのバイナリログをもとに非同期でデータを復元します。
  5. スレーブ側では読み込み性能を最適化するための個別設定が可能です。
  6. 冗長性が確保されるため、システムの可用性向上にもつながります。

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のインストールと設定

  1. MySQL Proxyを公式サイトからダウンロード:ダウンロードページ
  2. XFTPなどを使用してproxyサーバーにファイルをアップロード。
  3. 圧縮ファイルを展開:
    tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
  4. ディレクトリ名を簡潔に変更:
    mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit mysql-proxy
  5. 必要なディレクトリを作成:
    cd mysql-proxy
    mkdir conf logs
  6. 環境変数を設定:
    vi /etc/profile
    # 最終行に追記
    export PATH=$PATH:/root/mysql-proxy/bin
    # 設定反映
    source /etc/profile
  7. 設定ファイルを作成:
    cd conf
    vi mysql-proxy.conf
  8. 以下の内容を記述:
    [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
  9. MySQL Proxyを起動:
    mysql-proxy --defaults-file=/root/mysql-proxy/conf/mysql-proxy.conf
  10. ログファイルを確認:
    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

タグ: MySQL レプリケーション 読み込み・書き込み分離 MySQL Proxy

7月22日 22:36 投稿