timorunge.proxysql

proxysql


現在、この役割はProxySQL >= v2.0.1に対応していません。

この役割は、MySQLdbからPyMySQLへの移行のバグのため、Ansible 2.7.9以上としか互換性がありません (#40123)。

リリース0.3.0はAnsible 2.7.0以下と互換性があります。


この役割は、ProxySQLをインストールし設定します - 高性能で高可用性のMySQL用プロトコル対応プロキシです。

バージョン2.3.0以降、AnsibleはProxySQLを設定するための モジュールを提供しています。 このAnsibleの役割は、この機能を使用しながら、いくつかの(役立つことを望む)機能を追加しています:

このドキュメントの「既知の問題または: 知っておくべきこと」セクションもご覧ください。

要件

この役割は、Ansible 2.5.0以上を必要とします。

安定バージョンのインストール(および定義)には、pipを使用できます:

pip install ansible==2.7.9

すべてのプラットフォーム要件は、メタデータファイルに記載されています。

インストール

ansible-galaxy install timorunge.proxysql

ロール変数

この役割に渡すことができる変数。すべての変数については、defaults/main.ymlを参照してください。

# ProxySQLをサービスとして有効/無効にします。
# 型: Bool
proxysql_service_enabled: True

# 静的変数が変更された場合にProxySQLを再起動します。静的
# 変数のリストは`vars/main.yml`の`proxysql_non_dynamic_variables`を見てください。
# 型: Bool
proxysql_restart_on_static_variables_change: True

# リポジトリ

# `proxysql_use_official_repo`と`proxysql_use_percona_repo`の両方が
# `False`に設定されている場合、モジュールは自動的に定義された
# `proxysql_version`をGithubからパッケージとしてダウンロードし、同じものをインストールします。

# 公式のProxySQLリポジトリを使用します。
# 型: Bool
proxysql_use_official_repo: True

# Perconaリポジトリを使用します。
# 型: Bool
proxysql_use_percona_repo: False

# Perconaリポジトリのリリースバージョンを定義します。
# 型: Str
proxysql_percona_release: latest

# ProxySQLリポジトリを使用しない場合にインストールされるProxySQLのバージョンです。
# 型: Int
proxysql_version: 1.4.15

# 設定

# ProxySQLがデータベースとログを保存すべきパスです。
# 型: Str
proxysql_datadir: /var/lib/proxysql

# proxysql.cnfテンプレートを定義します。
# 型: Str
proxysql_proxysql_cnf_template: proxysql.cnf.j2

# proxysql-admin.cnfテンプレートを定義します。
# 型: Str
proxysql_proxysql_admin_cnf_template: proxysql-admin.cnf.j2

# ProxySQL自体の設定のためのログイン変数です。これらは
# `main.yml`ファイル内でのみ使用され、設定を簡略化するためにここでも使用されます。
# 型: Str
proxysql_login_admin_host: 127.0.0.1
proxysql_login_admin_password: admin
proxysql_login_admin_port: 6032
proxysql_login_admin_user: admin

# グローバル变量
# `admin_variables`は`proxysql_global_variables_kv`内にあり、管理インターフェースの機能を制御するグローバル
# 变量を含みます。
# `admin_variables`は`admin-`で始まります。
# `mysql_variables`は`proxysql_global_variables_kv`内にあり、
# 受信するMySQLトラフィックの処理機能を制御するグローバル変数を含みます。
# `mysql_variables`は`mysql-`で始まります。

# 変数は文字列または整数である必要があります。真偽値は文字列としてマークしてください。例:"True"または"False"。

# 詳細については、次のサイトを参照してください:
# https://github.com/sysown/proxysql/wiki/Global-variables

# 形式:
# 型: Dict
# proxysql_global_variables:
#   load_to_runtime: "True"
#   save_to_disk: "True"
#   login_host: "{{ proxysql_login_admin_host }}"
#   login_password: "{{ proxysql_login_admin_password }}"
#   login_port: "{{ proxysql_login_admin_port }}"
#   login_user: "{{ proxysql_login_admin_user }}"
proxysql_global_variables:
  login_host: "{{ proxysql_login_admin_host }}"
  login_password: "{{ proxysql_login_admin_password }}"
  login_port: "{{ proxysql_login_admin_port }}"
  login_user: "{{ proxysql_login_admin_user }}"
# 形式:
# 型: Dict
# proxysql_global_variables_kv:
#   key: value
# 例:
# proxysql_global_variables_kv:
#   admin-admin_credentials: "{{ proxysql_login_admin_user }}:{{ proxysql_login_admin_password }}"
#   admin-mysql_ifaces: "{{ proxysql_login_admin_host }}:{{ proxysql_login_admin_port }}"
#   mysql-interfaces: 0.0.0.0:6033
#   mysql-commands_stats: "True"
#   mysql-threads: 4
proxysql_global_variables_kv: {}

# バックエンドサーバー
# `proxysql_backend_servers`:受信するMySQLトラフィックがルーティングされるバックエンドサーバーを定義します。

# 詳細については、次のサイトを参照してください:
# https://docs.ansible.com/ansible/latest/modules/proxysql_backend_servers_module.html
# 重要なこと:このモジュールは、データベース内の正しい名前である
# `hostgroup`を使用し、デフォルトは`hostgroup_id`です!

# 形式:
# 型: Dict
# proxysql_backend_servers:
#   mysql-srv1-hg1:
#     comment: mysql-srv1-hg1
#     hostgroup: 1
#     hostname: 172.16.77.101
#     login_host: "{{ proxysql_login_admin_host }}"
#     login_password: "{{ proxysql_login_admin_password }}"
#     login_port: "{{ proxysql_login_admin_port }}"
#     login_user: "{{ proxysql_login_admin_user }}"
#     max_connections: 1000
#     max_replication_lag: 0
#     status: ONLINE
#     weight: 1
#   mysql-srv1-hg2:
#     comment: mysql-srv1-hg2
#     hostgroup: 2
#     hostname: 172.16.77.101
#     login_host: "{{ proxysql_login_admin_host }}"
#     login_password: "{{ proxysql_login_admin_password }}"
#     login_port: "{{ proxysql_login_admin_port }}"
#     login_user: "{{ proxysql_login_admin_user }}"
#     max_connections: 1000
#     max_replication_lag: 0
#     status: ONLINE
#     weight: 1
proxysql_backend_servers: {}

# ProxySQLサーバー
# `proxysql_proxysql_servers`: クラスタ用のProxySQLサーバーを定義します。

# 詳細については、次のサイトを参照してください:
# `library/proxysql_proxysql_servers.py`

# 形式:
# 型: Dict
# proxysql_proxysql_servers:
#   proxysql-srv-1:
#     comment: proxysql-srv-1
#     hostname: 172.16.77.201
#     login_host: "{{ proxysql_login_admin_host }}"
#     login_password: "{{ proxysql_login_admin_password }}"
#     login_port: "{{ proxysql_login_admin_port }}"
#     login_user: "{{ proxysql_login_admin_user }}"
#     weight: 0
#   proxysql-srv-2:
#     comment: proxysql-srv-2
#     hostname: 172.16.77.202
#     login_host: "{{ proxysql_login_admin_host }}"
#     login_password: "{{ proxysql_login_admin_password }}"
#     login_port: "{{ proxysql_login_admin_port }}"
#     login_user: "{{ proxysql_login_admin_user }}"
#     weight: 0
proxysql_proxysql_servers: {}

# レプリケーショングループ
# `proxysql_replication_hostgroups`: 書き込みホストグループと読み取りホストグループのペアを示します。

# 詳細については、次のサイトを参照してください:
# https://docs.ansible.com/ansible/latest/modules/proxysql_replication_hostgroups_module.html

# 形式:
# 型: Dict
# proxysql_replication_hostgroups:
#   Cluster:
#     comment: Cluster
#     login_host: "{{ proxysql_login_admin_host }}"
#     login_password: "{{ proxysql_login_admin_password }}"
#     login_port: "{{ proxysql_login_admin_port }}"
#     login_user: "{{ proxysql_login_admin_user }}"
#     reader_hostgroup: 2
#     writer_hostgroup: 1
proxysql_replication_hostgroups: {}

# ユーザー
# `proxysql_mysql_users`: プロキシに接続できるユーザーと、プロキシがバックエンドサーバーに接続できるユーザーを定義します。

# 詳細については、次のサイトを参照してください:
# http://docs.ansible.com/ansible/latest/proxysql_mysql_users_module.html

# 形式:
# 型: Dict
# proxysql_mysql_users:
#   user1:
#     active: 1
#     backend: 1
#     default_hostgroup: 1
#     login_host: "{{ proxysql_login_admin_host }}"
#     login_password: "{{ proxysql_login_admin_password }}"
#     login_port: "{{ proxysql_login_admin_port }}"
#     login_user: "{{ proxysql_login_admin_user }}"
#     max_connections: 10000
#     password: Passw0rd
#     username: user1
#   user2:
#     active: 1
#     backend: 1
#     default_hostgroup: 2
#     login_host: "{{ proxysql_login_admin_host }}"
#     login_password: "{{ proxysql_login_admin_password }}"
#     login_port: "{{ proxysql_login_admin_port }}"
#     login_user: "{{ proxysql_login_admin_user }}"
#     max_connections: 1000
#     password: dr0wssaP
#     username: user2
proxysql_mysql_users: {}

# クエリルール
# `proxysql_query_rules`は受信するMySQLトラフィックを分類しルーティングするためのルールを定義します。

# 詳細については、次のサイトを参照してください:
# http://docs.ansible.com/ansible/latest/proxysql_query_rules_module.html

# 形式:
# 型: Dict
# proxysql_query_rules:
#   catchall:
#     active: 1
#     destination_hostgroup: 1
#     match_pattern: .*@.*
#     rule_id: 1
#   selectforupdate:
#     active: 1
#     destination_hostgroup: 1
#     match_pattern: ^SELECT.*FOR UPDATE
#     rule_id: 2
#   select:
#     active: 1
#     destination_hostgroup: 2
#     match_pattern: ^SELECT.*
#     rule_id: 3
proxysql_query_rules: {}

# Percona ProxySQL Admin
# ProxySQL Admin(proxysql-admin)は、Percona XtraDBクラスターのノードをProxySQLに設定します。

# 詳細については、次のサイトを参照してください:
# https://github.com/percona/proxysql-admin-tool

# 形式:
# 型: Dict
# proxysql_percona_admin_tool:
#   PROXYSQL_DATADIR: "{{ proxysql_datadir }}"
#   PROXYSQL_USERNAME: "{{ proxysql_login_admin_user }}"
#   PROXYSQL_PASSWORD: "{{ proxysql_login_admin_password }}"
#   PROXYSQL_HOSTNAME: "{{ proxysql_login_admin_host }}"
#   PROXYSQL_PORT: "{{ proxysql_login_admin_port }}"
#   CLUSTER_USERNAME: admin
#   CLUSTER_PASSWORD: admin
#   CLUSTER_HOSTNAME: localhost
#   CLUSTER_PORT: 3306
#   MONITOR_USERNAME: monitor
#   MONITOR_PASSWORD: monit0r
#   CLUSTER_APP_USERNAME: proxysql_user
#   CLUSTER_APP_PASSWORD: passw0rd
#   WRITE_HOSTGROUP_ID: 10
#   READ_HOSTGROUP_ID: 11
#   MODE: singlewrite
proxysql_percona_admin_tool:
  PROXYSQL_DATADIR: "{{ proxysql_datadir }}"
  PROXYSQL_USERNAME: "{{ proxysql_login_admin_user }}"
  PROXYSQL_PASSWORD: "{{ proxysql_login_admin_password }}"
  PROXYSQL_HOSTNAME: "{{ proxysql_login_admin_host }}"
  PROXYSQL_PORT: "{{ proxysql_login_admin_port }}"

1) 完全な設定例

ここでは、ProxySQLの完全な設定例を見ることができます。この場合、役割は1.4.15パッケージを直接ダウンロードし、リポジトリを使用しません (proxysql_use_official_repoFalseに設定されています)。

これは、テスト用に使用されるtest.ymlファイルの基本的に(小さな変更あり)同じものです。

- hosts: proxysql
  gather_facts: True
  vars:
    proxysql_version: 1.4.15
    proxysql_service_enabled: True
    proxysql_use_official_repo: True
    proxysql_login_admin_host: 127.0.0.1
    proxysql_login_admin_password: admin
    proxysql_login_admin_port: 6032
    proxysql_login_admin_user: admin
    proxysql_global_variables:
      login_host: "{{ proxysql_login_admin_host }}"
      login_password: "{{ proxysql_login_admin_password }}"
      login_port: "{{ proxysql_login_admin_port }}"
      login_user: "{{ proxysql_login_admin_user }}"
    proxysql_global_variables_kv:
      admin-admin_credentials: "{{ proxysql_login_admin_user }}:{{ proxysql_login_admin_password }}"
      admin-mysql_ifaces: "{{ proxysql_login_admin_host }}:{{ proxysql_login_admin_port }}"
      mysql-commands_stats: "True"
      mysql-connect_retries_on_failure: 10
      mysql-connect_timeout_server: 3000
      mysql-default_charset: utf8
      mysql-default_query_delay: 0
      mysql-default_query_timeout: 300000
      mysql-default_schema: information_schema
      mysql-default_sql_mode: >
                              STRICT_TRANS_TABLES,
                              ERROR_FOR_DIVISION_BY_ZERO,
                              NO_AUTO_CREATE_USER,
                              NO_ENGINE_SUBSTITUTION
      mysql-interfaces: 127.0.0.1:6033
      mysql-max_connections: 8192
      mysql-monitor_read_only_interval: 1500
      mysql-monitor_read_only_timeout: 500
      mysql-ping_timeout_server: 500
      mysql-poll_timeout: 2000
      mysql-query_retries_on_failure: 1
      mysql-sessions_sort: "True"
      mysql-threads: 4
    proxysql_backend_servers:
      mysql-srv1-hg1:
        comment: mysql-srv1-hg1
        hostgroup: 1
        hostname: 172.16.77.101
        login_host: "{{ proxysql_login_admin_host }}"
        login_password: "{{ proxysql_login_admin_password }}"
        login_port: "{{ proxysql_login_admin_port }}"
        login_user: "{{ proxysql_login_admin_user }}"
        max_connections: 1000
        max_replication_lag: 0
        status: ONLINE
        weight: 1
      mysql-srv1-hg2:
        comment: mysql-srv1-hg2
        hostgroup: 2
        hostname: 172.16.77.101
        login_host: "{{ proxysql_login_admin_host }}"
        login_password: "{{ proxysql_login_admin_password }}"
        login_port: "{{ proxysql_login_admin_port }}"
        login_user: "{{ proxysql_login_admin_user }}"
        max_connections: 1000
        max_replication_lag: 0
        status: ONLINE
        weight: 1
      mysql-srv2-hg2:
        comment: mysql-srv2-hg2
        hostgroup: 2
        hostname: 172.16.77.102
        login_host: "{{ proxysql_login_admin_host }}"
        login_password: "{{ proxysql_login_admin_password }}"
        login_port: "{{ proxysql_login_admin_port }}"
        login_user: "{{ proxysql_login_admin_user }}"
        max_connections: 2000
        max_replication_lag: 5
        status: ONLINE
        weight: 1
      mysql-srv3-hg2:
        comment: mysql-srv3-hg2
        hostgroup: 2
        hostname: 172.16.77.103
        login_host: "{{ proxysql_login_admin_host }}"
        login_password: "{{ proxysql_login_admin_password }}"
        login_port: "{{ proxysql_login_admin_port }}"
        login_user: "{{ proxysql_login_admin_user }}"
        max_connections: 2000
        max_replication_lag: 5
        status: OFFLINE_HARD
        weight: 1
    proxysql_proxysql_servers:
      proxysql-srv-1:
        comment: proxysql-srv-1
        hostname: 172.16.77.201
        login_host: "{{ proxysql_login_admin_host }}"
        login_password: "{{ proxysql_login_admin_password }}"
        login_port: "{{ proxysql_login_admin_port }}"
        login_user: "{{ proxysql_login_admin_user }}"
        port: 6032
        weight: 0
      proxysql-srv-2:
        comment: proxysql-srv-2
        hostname: 172.16.77.202
        login_host: "{{ proxysql_login_admin_host }}"
        login_password: "{{ proxysql_login_admin_password }}"
        login_port: "{{ proxysql_login_admin_port }}"
        login_user: "{{ proxysql_login_admin_user }}"
        port: 6032
        weight: 0
    proxysql_replication_hostgroups:
      Cluster:
        comment: Cluster
        login_host: "{{ proxysql_login_admin_host }}"
        login_password: "{{ proxysql_login_admin_password }}"
        login_port: "{{ proxysql_login_admin_port }}"
        login_user: "{{ proxysql_login_admin_user }}"
        reader_hostgroup: 2
        writer_hostgroup: 1
    proxysql_mysql_users:
      user1:
        active: 1
        backend: 1
        default_hostgroup: 1
        fast_forward: 0
        frontend: 1
        login_host: "{{ proxysql_login_admin_host }}"
        login_password: "{{ proxysql_login_admin_password }}"
        login_port: "{{ proxysql_login_admin_port }}"
        login_user: "{{ proxysql_login_admin_user }}"
        max_connections: 10000
        password: Passw0rd
        transaction_persistent: 1
        username: user1
      user2:
        active: 1
        backend: 1
        default_hostgroup: 1
        fast_forward: 0
        frontend: 1
        login_host: "{{ proxysql_login_admin_host }}"
        login_password: "{{ proxysql_login_admin_password }}"
        login_port: "{{ proxysql_login_admin_port }}"
        login_user: "{{ proxysql_login_admin_user }}"
        max_connections: 1000
        password: dr0wssaP
        transaction_persistent: 1
        username: user2
    proxysql_query_rules:
      catchall:
        active: 1
        apply: 1
        destination_hostgroup: 1
        flagIN: 0
        login_host: "{{ proxysql_login_admin_host }}"
        login_password: "{{ proxysql_login_admin_password }}"
        login_port: "{{ proxysql_login_admin_port }}"
        login_user: "{{ proxysql_login_admin_user }}"
        match_pattern: .*@.*
        negate_match_pattern: 0
        rule_id: 1
      selectforupdate:
        active: 1
        apply: 1
        destination_hostgroup: 1
        flagIN: 0
        login_host: "{{ proxysql_login_admin_host }}"
        login_password: "{{ proxysql_login_admin_password }}"
        login_port: "{{ proxysql_login_admin_port }}"
        login_user: "{{ proxysql_login_admin_user }}"
        match_pattern: ^SELECT.*FOR UPDATE
        negate_match_pattern: 0
        rule_id: 2
      select:
        active: 1
        apply: 0
        destination_hostgroup: 2
        flagIN: 0
        login_host: "{{ proxysql_login_admin_host }}"
        login_password: "{{ proxysql_login_admin_password }}"
        login_port: "{{ proxysql_login_admin_port }}"
        login_user: "{{ proxysql_login_admin_user }}"
        match_pattern: ^SELECT.*
        negate_match_pattern: 0
        rule_id: 3
  roles:
    - timorunge.proxysql

2) 公式リポジトリからのインストール

ProxySQLリポジトリを使用します(proxysql_use_official_repoTrueに設定されています)。 ProxySQLはUbuntu > 16.04用のパッケージを提供していません。

新しいUbuntuリリースの場合は、proxysql_use_official_repoFalseに設定するか、 Perconaリポジトリを使用します。

テストセクションを確認して、公式リポジトリのカバレッジを確認してください。

- hosts: proxysql
  vars:
    proxysql_use_official_repo: True
    proxysql_use_percona_repo: False
    proxysql_login_admin_host: 127.0.0.1
    proxysql_login_admin_password: admin
    proxysql_login_admin_port: 6032
    proxysql_login_admin_user: admin
    ...

3) Perconaリポジトリからのインストール

ProxySQLリポジトリを使用します(proxysql_use_percona_repoTrueに設定されています)。

テストセクションを確認して、Perconaリポジトリのカバレッジを確認してください。

- hosts: proxysql
  vars:
    proxysql_use_official_repo: False
    proxysql_use_percona_repo: True
    proxysql_login_admin_host: 127.0.0.1
    proxysql_login_admin_password: admin
    proxysql_login_admin_port: 6032
    proxysql_login_admin_user: admin
    ...

4) debまたはrpmパッケージからのインストール

ProxySQLを GitHubリリースから直接インストールできます。proxysql_versionを定義するだけです。proxysql_use_official_repoproxysql_use_percona_repoFalseに設定します。

- hosts: proxysql
  vars:
    proxysql_version: 1.4.15
    proxysql_use_official_repo: False
    proxysql_use_percona_repo: False
    proxysql_login_admin_host: 127.0.0.1
    proxysql_login_admin_password: admin
    proxysql_login_admin_port: 6032
    proxysql_login_admin_user: admin
    ...

5) 静的変数の変更後にProxySQLを再起動しない

静的変数の構成変更後に自分でProxySQLを再起動したい場合は、proxysql_restart_on_static_variables_changeFalseに設定する必要があります。

この場合、既知の問題に直面することになりますが、大したことではありません。 この場合、冪等性テストは失敗します。

手動で再起動した後は、再度Ansibleを適用する必要はありません。

- hosts: proxysql
  vars:
    proxysql_use_official_repo: False
    proxysql_restart_on_static_variables_change: False
    proxysql_login_admin_host: 127.0.0.1
    proxysql_login_admin_password: admin
    proxysql_login_admin_port: 6032
    proxysql_login_admin_user: admin
    ...

既知の問題または: 知っておくべきこと

1) Ubuntu 16.04でのProxySQL > 1.4.7の問題(修正済み)

Ubuntu 16.04では、Ansible(バージョンは関係ありません) / ProxySQL > 1.4.7が mysql-python / python-mysqldbを通じて正しく通信するのに問題があるようです。

例のエラー:

"サーバーを変更できません.. (1045, '認識されないトークン: \"\\'\\n  AND compression = 0\\n  AND weight = 1\\n  AND use_ssl = 0\\n  AND max_connections = 2000\\n  AND max_latency_ms = 0\\n  AND max_replication_lag = 5\"')"

注:

私は、Ubuntu 16.04上でpipを通じてインストールされたmysql-pythonについて ちょっとした調査を行いました。心配しないでください。python-mysqldbでも失敗します。


MySQLdb Pythonライブラリでは、executeメソッド(クラスBaseCursor)が 以下のようにクエリを生成します:

query = query % tuple([db.literal(item) for item in args])

db.literalConnectionクラスの一部であり、単一オブジェクトを文字列として、複数オブジェクトを シーケンスとして戻し、それぞれのシーケンスを変換します。

def literal(self, o):
  return self.escape(o, self.encoders)

self.escape は、特別な文字を持つオブジェクトをすべてエスケープし、各タイプに対するクォート関数を提供するために マッピング辞書を使用します。

文字列のマッピングはStringType: Thing2Literalです。そのため、文字列は Thing2Literalメソッドでエスケープされます。

def Thing2Literal(o, d):
  return string_literal(o, d)

string_literal は文字列オブジェクトをSQL文字列リテラルに変換します。これは、特別なSQL文字がすべてエスケープされ、 一重引用符で囲まれます。言い換えれば、次の処理を行います:

"'%s'" % escape_string(str(obj))

文字列をエスケープする過程で、文字列オブジェクトは削除されて単一引用符(')を返します。

テストではProxySQLのバージョンだけが変更されているため、ProxySQLの変更 (diff 1.4.7 vs. 1.4.8)が Ansibleの失敗を引き起こしていると考えています。ProxySQL自体は、Ansible経由で呼び出さなければ 正常に動作しているためです。


最後に…

この問題は、pipを通じて mysqlclientをインストールすることで解決されます。

2) Ubuntu > 16.04用パッケージの問題(修正済み)

ProxySQL自体は、Ubuntu > 16.04用の「最新」パッケージを提供していません。 このAnsible役割は、16.04リリースをダウンロードし、インストールすることで この問題を回避します(この動作は将来的に変更される可能性があります)。

Ubuntu >= 18.04からのlibcrypto++6libssl1.0.0に対するパッケージ依存は 自動的に解決されます。

3) 非動的グローバル変数

ProxySQLには、実行中に変更できないいくつかのglobal_variablesがあります (vars/main.ymlproxysql_non_dynamic_variables参照)。 とはいえ、ProxySQLロールは(proxysql.cnfを生成することによって)この問題に 対処し、変数が変更された場合に自動的に再起動する機会を提供します。

この役割はProxySQLデータベース内でもこの値を設定し、ここで問題が始まります:

複数の静的変数を変更すると、技術的にはすべてが正常です。 ProxySQLは再起動し、proxysql.cnfの新しい値を取得します。しかし、データベース自体では 最初の値だけが変更されます。

これは「大きな問題」ではありません。実際の値は設定ファイルから正しく取得されますが、 次回のAnsible実行で変更セットが見られることになります。

  • ProxySQLは再度再起動されます
  • 冪等性テストは失敗します(最初からブートストラップしない限り)

潜在的な解決策は、ProxySQLデータベース内でproxysql_non_dynamic_variablesを設定しないことかもしれません。

4) ProxySQLクラスタリング

ProxySQLクラスタリングはまだ実験的です。クラスタリング文書からの引用 (ProxySQLクラスタのドキュメント): "この機能はまだ実験段階にあるため、テーブルは自動的にディスクから読み込まれません。"

proxysql.cnfからの初期化では、hostname(明らかに)と port(デフォルト値を取らない)が定義されていることが重要です。

5) CentOSでのProxySQLとPerconaリポジトリ...

...依存関係に関するいくつかの問題があるため動作しません。

技術的には、Ansibleを正しく適用するために必要なパッケージは次の通りです:

proxysql_dependency_pkgs:
  - MySQL-python
  - mysql

Perconaリポジトリが有効な場合、MySQL-pythonmysqlのパッケージ依存が 衝突します。

yum install MySQL-python
yum install mysql

テスト

Build Status

テストはDockerdocker_test_runnerで行われており、異なる環境設定で次のコンテナを起動します:

  • CentOS 7
  • Debian 9 (Stretch)
  • Ubuntu 16.04 (Xenial Xerus)
  • Ubuntu 18.04 (Bionic Beaver)

すべてのコンテナにAnsible 2.7.9がインストールされ、テストプレイブックが 適用されます。

詳細や他のチェックについては、docker_test_runner設定Dockerエントリポイントを確認してください。 以下の表に高レベルの概要があります:

ディストリビューション バージョン 公式リポジトリ Perconaリポジトリ パッケージ
CentOS 7 yes no 1.4.15
Debian 9 yes yes 1.4.15
Ubuntu 16.04 yes yes 1.4.15
Ubuntu 18.04 no yes 1.4.15
# ローカルでのテスト:
curl https://raw.githubusercontent.com/timorunge/docker-test-runner/master/install.sh | sh
./docker_test_runner.py -f tests/docker_test_runner.yml

Travisのビルド時間は公開リポジトリでは制限されているため、自動テストは以下に限定されます:

  • CentOS 7
  • Debian 8 (Jessie)
  • Debian 9 (Stretch)
  • Ubuntu 16.04 (Xenial Xerus)
  • Ubuntu 18.04 (Bionic Beaver)

依存関係

ライセンス

BSD 3-Clause "New" or "Revised" License

著者情報

  • ティモ・ルンゲ
プロジェクトについて

This role installs and configures ProxySQL - the high performance, high availability, protocol aware proxy for MySQL.

インストール
ansible-galaxy install timorunge.proxysql
ライセンス
bsd-3-clause
ダウンロード
1.7k
所有者