Docker ComponentベースのMySQL MHAクラスタ

8976 ワード

Docker MySQL MHA
Docker 1.13.1に基づいて構築されたMySQL MHA Docker Component Project
GTIDモードでMasterHAクラスタを素早く起動でき、主にMySQLとDockerの学習研究に使用される.
環境の構築
  • MacOS 10.12.3
  • Docker 1.13.1
  • Docker Compose 1.11.1
  • Docker image for MySQL 5.7.17
  • Docker image for Debian jessie
  • mha4mysql-manager-0.56
  • mha4mysql-node-0.56

  • とくせい
  • USTC debian sources
  • MySQLレプリケーションアカウントとMHAワークアカウントの自動生成
  • カスタマイズ可能なMySQLレプリケーションとMHAワークアカウント情報
  • SSH keyの自動生成
  • 容器間のSSH key相互複製とSSH非密登録
  • MasterHAのセルフスタート
  • 構築と起動
    docker-compose.yml定義master-Docker composeのmasterというサービス、プライマリ・ライブラリ・コンテナのデフォルト・マッピング・ポート3406slave_1-Docker composeのslave_1という名前のサービスは、ライブラリのデフォルトのマッピングポート3407からmanager-Docker composeのmanagerというサービスは、MHA managerとしてmha_share-コンテナ間の共有データボリューム
    ディレクトリとファイルの機能説明
  • account.Envは、MySQLレプリケーションアカウントreplのアカウントパスワード
  • などのコンテナ間の共通環境変数を保存します.
  • employees_db master起動時のMySQL初期化スクリプト
  • employees_master masterメインライブラリコンテナのプロファイル、ログと在庫保管場所
  • employees_slave_1 slave_1ライブラリコンテナからのプロファイル、ログと在庫保管場所
  • employees_Shareコンテナ間の共有データボリューム
  • mha_managerは、docker-composeでDockerミラーmha_managerに必要なDockerfileとその依存ファイルの格納ディレクトリを構築する.yml定義
  • mha_Nodeは、docker-composeでDockerミラーmha_nodeを構築するために必要なDockerfileとその依存ファイルの格納ディレクトリを構築する.yml定義
  • reset.shプロジェクトを停止し、すべてのデータベースのログとライブラリ(プロファイルを除く)を削除する
  • shutdown.sh単純にプロジェクト
  • を停止する
  • start.sh
  • プロジェクト
  • を開始
  • 各容器においてssh key
  • を生成する.
  • ssh keyを他の容器にそれぞれコピーし、容器間でSSHを使用して
  • にログインできるようにする.
  • は、masterslave_1とを複製リンク
  • に形成する.
  • カスタムMySQLアカウントパスワードに基づいてMHAプロファイル
  • を生成
  • masterha_check_ssh検出容器間のSSHの正確性
  • masterha_check_replレプリケーションの健康状態を検出する
  • 起動masterha_managerログをemployeesに書き込みます.Shareのmha.log

  • 開始
  • 最初の実行時にMySQLを初期化してください.そうしないと、コンテナは接続を受け入れません.
    ➜  mha git:(master) docker-compose up -d
    Creating network "mha_default" with the default driver Creating mha_mha_node_1 Creating mha_mha_share_1 Creating mha_mha_manager_1 Creating mha_master_1 Creating mha_slave_1_1 Creating mha_manager_1

    コンテナ受信可能ホストのMySQL接続代表初期化完了
  • 予熱後startを運転する.shスクリプトによるMHAクラスタの構築
    ➜  mha git:(master) ./start.sh
    >>> Docker Compose starting...
    Starting mha_mha_manager_1
    Starting mha_mha_share_1
    Starting mha_mha_node_1
    mha_master_1 is up-to-date mha_slave_1_1 is up-to-date mha_manager_1 is up-to-date >>> Setting ssh... fd9686976e61 initializing SSH... fd9686976e61 change the password of root successfully. fd9686976e61 SSH service has been restarted. fd9686976e61 succeed in generating ssh key. ... fd9686976e61 copy ssh key to manager successfully. fd9686976e61 copy ssh key to master successfully. ... >>> Creating mysql user for replication named 'repl' on master container... mysql: [Warning] Using a password on the command line interface can be insecure. >>> Configuring replication with GTID mode... configuring slave_1 754214d5bdfc ... mysql: [Warning] Using a password on the command line interface can be insecure. >>> Initializing MHA configuration... mha configuration "/mha_share/application.cnf" is not initialized. added host "master" to mha configuration file. added host "slave_1" to mha configuration file. ********************************************** checking mha ssh... Wed Feb 15 11:04:08 2017 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. ... Wed Feb 15 11:04:08 2017 - [debug] ok. Wed Feb 15 11:04:09 2017 - [info] All SSH connection tests passed successfully. ********************************************** checking mha repl to mysql... Wed Feb 15 11:04:09 2017 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. ... MySQL Replication Health is OK. ********************************************** starting mha manager with file "/mha_share/application.cnf"... nohup: redirecting stderr to stdout >>> Done!

    NOTE:初回運転時に予熱するstartを直接呼び出す.shスクリプトの場合、MySQLの初期化が完了していないため、構築元のレプリケーション・リンクにエラーが発生します.データベースが初期化されている場合は、ウォームアップは必要ありません.

  • 注意事項
  • 初回実行時にはdocker-compose up -dを実行してMySQLの初期化
  • を行ってください
  • Docker Compose Serviceが1つのコンテナに対応することで、Docker Composeがデフォルトで構築したコンテナネットワークを楽しむことができ、service nameを直接使用してSSH通信
  • を行うことができる.
  • 本プロジェクトはMySQL MHAクラスタの学習にのみ使用され、同時にDockerの使用を練習する
  • 仮想IPを使用する場合はKeepalive,LVSなど
  • を自分で組み合わせることができる.
    転載先:https://www.cnblogs.com/nongchaoer/p/6410929.html