daixijun.mysql
mysql
MySQLクラスターの迅速なデプロイに使用されます。
以下のクラスタータイプをサポートしています:
- GTIDベースの主従複製
- デフォルトでSemi-Syncを有効化
- MHAアーキテクチャに基づく主従複製
- MGR単一マスター(デフォルト)
- MGRマルチマスター
- レプリカセット複製
サポートしているMySQLバージョン:
- Oracle公式 MySQL Community Server
- GreatSQL(オープンソース) GreatSQL
- Percona Percona Server for MySQL
環境要件
- CentOS 7以上
- Ansible 2.9以上
- MySQL 8.0以上
変数
変数名 | タイプ | デフォルト値 | 変数説明 |
---|---|---|---|
mysql_version | 文字列 | 8.0.23 | MySQLバージョン |
mysql_upgrade | 真偽値 | false | バージョンアップの実行が必要かどうか |
mysql_download_url | 文字列 | インストール不要の圧縮ファイルのダウンロードURL | |
mysql_inventory_group | 文字列 | mysql | Ansibleホストインベントリ内のグループ名(デフォルトはmysql ) |
mysql_basedir | 文字列 | /usr/local/mysql | インストールディレクトリ |
mysql_datadir | 文字列 | /data/mysql | データファイルの保存ディレクトリ |
mysql_logdir | 文字列 | /var/log/mysqld | ログ保存ディレクトリ |
mysql_pidfile | 文字列 | /var/run/mysqld/mysqld.pid | PIDファイルの場所 |
mysql_socket | 文字列 | /var/run/mysqld/mysqld.sock | ソケットファイルの場所 |
mysql_port | 整数 | 3306 | リッスンポート |
mysql_bind_address | 文字列 | 0.0.0.0 | リッスンアドレス |
mysql_interface | 文字列 | "" | 指定するネットワークインターフェース、デフォルトではlo以外の最初のインターフェースを使用します |
mysql_default_time_zone | 文字列 | +8:00 | タイムゾーンの指定 |
mysql_character_set_server | 文字列 | utf8mb4 | デフォルト文字セット |
mysql_collation_server | 文字列 | utf8mb4_general_ci | デフォルト照合順序 |
mysql_max_connections | 整数 | 1005 | 最大接続数 |
mysql_max_user_connections | 整数 | 1000 | ユーザーの最大接続数、mysql_max_connections より少ない必要があり、管理者用にいくつかの接続を確保する必要があります |
mysql_interactive_timeout | 整数 | 28800 | サーバーがインタラクティブ接続を閉じる前に待機する活動の秒数 |
mysql_wait_timeout | 整数 | 28800 | サーバーが非インタラクティブ接続を閉じる前に待機する活動の秒数 |
mysql_max_connect_errors | 整数 | 200 | 最大接続エラー数 |
mysql_root_password | 文字列 | "" | rootアカウントのパスワード |
mysql_cluster_type | 文字列 | mgr | クラスタータイプ(デフォルトはmgr) mgr (Mysql Group Replication)またはms (Master-Slave) |
mysql_cluster_name | 文字列 | default | クラスターの名前、InnodbCluster/ReplicaSetに適用されます |
mysql_mha_enabled | 真偽値 | false | MHAに基づく主従の高可用性を有効にするかどうか |
mysql_mha_config_dir | 文字列 | /etc/mha | MHA設定ファイルディレクトリ |
mysql_mha_manager_workdir | 文字列 | /var/log/mha | MHA作業ディレクトリ、ログとステータス情報の保存場所 |
mysql_mha_user | 文字列 | mha | MySQLを管理するための接続ユーザー、ALL 特権が必要 |
mysql_mha_password | 文字列 | "" | MySQL管理パスワード |
mysql_mha_repl_user | 文字列 | repl | MySQL主従複製のためのアカウント |
mysql_mha_repl_password | 文字列 | "" | MySQL主従複製のためのパスワード |
mysql_mha_ssh_user | 文字列 | root | ノード間通信のSSHユーザー |
mysql_mha_ssh_port | 整数 | 22 | ノード間通信のSSHポート |
mysql_mha_ping_interval | 整数 | 2 | マスターノードの状態ハートビート間隔 |
mysql_mha_vip | 文字列 | "" | マスターノードにバインドされるVIP |
mysql_mha_wechat_token | 文字列 | "" | 企業微信ボットのキー、アラート通知を送信するため |
mysql_mha_proxy | 文字列 | "" | アラート通知送信(send_report)スクリプトで使用するプロキシ |
mysql_repl_user | 文字列 | repl | 主従/グループ複製のためのアカウント |
mysql_repl_password | 文字列 | 主従/グループ複製のためのアカウントのパスワード | |
mysql_group_replication_name | uuid | "" | グループ複製クラスター名、MySQLでSELECT UUID() またはシェルでuuidgen を使用して生成 |
mysql_group_replication_single_primary_mode | 真偽値 | true | MGRクラスターが単一マスターかどうか |
mysql_innodb_cluster_enable | 真偽値 | true | Innodb Clusterを有効にするかどうか |
mysql_innodb_cluster_username | 文字列 | ic | Innodb Clusterの作成と管理のためのアカウント、ALL WITH GRANT OPTION 特権が必要 |
mysql_innodb_cluster_password | 文字列 | "" | 管理パスワード |
mysql_proxysql_config | 真偽値 | false | proxysqlをプロキシとして使用するかどうか |
mysql_proxysql_monitor_username | 文字列 | monitor | proxysqlがMGRの状態を監視するためのアカウント |
mysql_proxysql_monitor_password | 文字列 | "" | proxysqlがMGRの状態を監視するためのパスワード |
mysql_databases | 配列 | [] | 作成するビジネスデータベース |
mysql_users | 配列 | [] | 作成するユーザー |
依存関係
コレクション:
使用例
インストール
ansible-galaxy collection install -r requirements.yml
使用方法
- hosts: servers
roles:
- { role: mysql, mysql_version: 8.0.20 }
知られている問題
- mysql_userモジュールがMySQL 8.0以降のバージョンでユーザーに
ALL
権限を付与する際に冪等性の問題が発生します 冪等性全付与
TODO
- 主従モードで半同期複製をサポート
- MHA下での副作用テストを改善
- バージョン更新をサポート
- ノード再構築をサポート
- 極端な状況下でMGRクラスターの全ノードがダウンした場合、最大のgtidインスタンスを特定してクラスターを再起動する必要があります。
クラスター異常復旧
MGRクラスターの非同期ダウン後の回復
共通集合を取り、SELECT RECEIVED_TRANSACTION_SET from performance_schema.replication_connection_status
+ show variables like 'gtid_executed'
を実行し、最大の主を選択してprimaryとします。