基於Docker Compose構建的MySQL MHA集群


Docker MySQL MHA

基於Docker 1.13.1之上構建的MySQL MHA Docker Compose 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的service, 主庫容器默認映射端口3406

slave_1 - Docker compose中名為slave_1的service, 從庫容器默認映射端口3407

manager - Docker compose中名為manager的service, 作為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鏡像mha_manager所需的Dockerfile及其依賴文件的存放目錄, 在docker-compose.yml有定義

  • mha_node

    構建Docker鏡像mha_node所需的Dockerfile及其依賴文件的存放目錄, 在docker-compose.yml有定義

  • reset.sh

    停止project並刪除所有數據庫的日志與庫(配置文件除外)

  • shutdown.sh

    單純地停止project

  • start.sh

    1. 啟動project
    2. 在各個容器中生成ssh key
    3. 將ssh key分別復制到其他容器中, 使得容器之間都可以使用SSH免密登錄
    4. 使masterslave_1形成復制鏈路
    5. 根據自定義的MySQL賬戶密碼生成MHA配置文件
    6. masterha_check_ssh檢測容器間的SSH正確性
    7. masterha_check_repl檢測復制的健康狀況
    8. 啟動masterha_manager並將日志寫入employees_share中的mha.log

啟動

  1. 首次運行時請先初始化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連接代表初始化完成

  2. 預熱后運行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未完成初始化而造成構建主從復制鏈路出錯, 如果是數據庫已經經過初始化則不需要進行預熱

注意事項

  1. 首次運行時請先運行docker-compose up -d進行MySQL的初始化
  2. 一個Docker Compose Service對應一個容器, 以此享用Docker Compose默認構建的容器網絡, 即可直接使用service name進行SSH通信
  3. 本項目僅用於學習MySQL MHA集群, 同時練習Docker的使用
  4. 要使用虛擬IP的話可自行搭配Keepalive, LVS等


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM