timorunge.proxysql
ProxySQL
当前该角色与 ProxySQL 版本 >= v2.0.1 不兼容。
由于 MySQL 模块工具在从 MySQLdb 迁移到 PyMySQL 过程中存在 bug (#40123),该角色仅与 Ansible 2.7.9 或更高版本兼容。
版本 0.3.0 兼容 Ansible 2.7.0 或更低版本。
该角色安装和配置 ProxySQL - 一个高性能、高可用性、支持协议的 MySQL 代理。
自 2.3.0 版开始,Ansible 提供了一个 用于配置 ProxySQL 的模块。 该 Ansible 角色利用此功能,并添加了一些(希望是有用的)功能:
- 针对 不同操作系统 的自动安装
- (预)生成 proxysql.cnf
- 管理 ProxySQL 集群 (通过一个 自定义模块 来添加配置 ProxySQL 服务器的功能)
- 区分动态和静态的
global_variables
- 在必要时重启 ProxySQL
请查看本文件中的 "已知问题或:需注意事项" 部分。
要求
该角色需要 Ansible 2.5.0 或更高版本。
您可以使用 pip 简单安装(并定义)一个稳定版本:
pip install ansible==2.7.9
所有平台要求列在元数据文件中。
安装
ansible-galaxy install timorunge.proxysql
角色变量
可以传递给此角色的变量。有关所有变量,请查看 defaults/main.yml。
# 启用/禁用 ProxySQL 服务。
# 类型:布尔值
proxysql_service_enabled: True
# 如果静态变量发生变化,则重启 ProxySQL。静态变量的列表请查看 `vars/main.yml` 中的 `proxysql_non_dynamic_variables`。
# 类型:布尔值
proxysql_restart_on_static_variables_change: True
# 仓库
# 如果同时将 `proxysql_use_official_repo` 和 `proxysql_use_percona_repo` 设置为 `False`,模块将自动从 Github 下载定义的 `proxysql_version` 作为包并安装。
# 使用官方 ProxySQL 仓库。
# 类型:布尔值
proxysql_use_official_repo: True
# 使用 Percona 仓库。
# 类型:布尔值
proxysql_use_percona_repo: False
# 定义 Percona 仓库的版本。
# 类型:字符串
proxysql_percona_release: latest
# 如果不使用 ProxySQL 仓库,则应安装的 ProxySQL 版本。
# 类型:整数
proxysql_version: 1.4.15
# 配置
# ProxySQL 保存其数据库和日志的路径。
# 类型:字符串
proxysql_datadir: /var/lib/proxysql
# 定义 proxysql.cnf 模板
# 类型:字符串
proxysql_proxysql_cnf_template: proxysql.cnf.j2
# 定义 proxysql-admin.cnf 模板
# 类型:字符串
proxysql_proxysql_admin_cnf_template: proxysql-admin.cnf.j2
# ProxySQL 本身配置的登录变量。仅在 `main.yml` 文件内部使用,旨在简化配置。
# 类型:字符串
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
# 格式:
# 类型:字典
# 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 }}"
# 格式:
# 类型:字典
# 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_servers 表的行。这些定义了传入 MySQL 流量路由的后端服务器。
# 完整参考请查看:
# https://docs.ansible.com/ansible/latest/modules/proxysql_backend_servers_module.html
# 重要:该模块使用 `hostgroup`(数据库中的正确名称),而不是 `hostgroup_id`(这是 Ansible 模块中的默认名称)!
# 格式:
# 类型:字典
# 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
proxysql_backend_servers: {}
# ProxySQL 服务器
# `proxysql_proxysql_servers`:包含来自管理界面的 proxysql_servers 表的行。这些定义了用于集群的 ProxySQL 服务器。
# 完整参考请查看:
# `library/proxysql_proxysql_servers.py`,因为这不是官方 Ansible 包的一部分。
# 格式:
# 类型:字典
# 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_proxysql_servers: {}
# 复制主机组
# `proxysql_replication_hostgroups`:表示一对 writer_hostgroup 和 reader_hostgroup。ProxySQL 将监控指定主机组中所有服务器的 read_only 值,并根据 read_only 的值将服务器分配给 writer 或 reader 主机组。
# 完整参考请查看:
# https://docs.ansible.com/ansible/latest/modules/proxysql_replication_hostgroups_module.html
# 格式:
# 类型:字典
# 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`:包含来自管理界面的 mysql_users 表的行。这些定义了可以连接到代理的用户,以及代理可以连接到后端服务器的用户。
# 完整参考请查看:
# http://docs.ansible.com/ansible/latest/proxysql_mysql_users_module.html
# 格式:
# 类型:字典
# 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: 2
# 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_mysql_users: {}
# 查询规则
# `proxysql_query_rules` 包含来自 mysql_query_rules 表的行。这些定义了用于分类和路由传入 MySQL 流量的规则,依据各种标准(匹配模式、运行查询的用户等)。
# 完整参考请查看:
# http://docs.ansible.com/ansible/latest/proxysql_query_rules_module.html
# 格式:
# 类型:字典
# 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
proxysql_query_rules: {}
# Percona ProxySQL 管理工具
# ProxySQL Admin (proxysql-admin) 解决方案将 Percona XtraDB 集群节点配置到 ProxySQL 中。
# 完整参考请查看:
# https://github.com/percona/proxysql-admin-tool
# 格式:
# 类型:字典
# 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_repo
设置为 False
)。
这基本上是(经过一些小的修改)用于测试的 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_repo
设置为 True
)。ProxySQL 自身在 16.04 以后的 Ubuntu 上不提供软件包。
对于更新的 Ubuntu 版本,只需将 proxysql_use_official_repo
设置为 False
,或者使用 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_repo
设置为 True
)。
查看 测试部分 以获取 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 软件包安装
您可以直接从 GitHub 发布页面 安装 ProxySQL。只需定义 proxysql_version
。将 proxysql_use_official_repo
和 proxysql_use_percona_repo
设置为 False
。
- 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_change
设置为 False
。
在这种情况下,您会遇到一个 已知问题,这并不是大问题。在这种情况下,幂等性测试将失败。
您在手动重启后不需要再次应用 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) ProxySQL > 1.4.7 在 Ubuntu 16.04 上(已修复)
在 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.literal
是 Connection
类的一部分,并将单个对象返回为字符串,而将多个对象作为序列返回,同时也会转换每个序列。
def literal(self, o):
# ...
return self.escape(o, self.encoders)
self.escape
应该会对给定对象中的所有特殊字符进行转义,并使用映射字典提供每种类型的引号功能。默认情况下,不变,使用的是 MySQLdb.converters
。
字符串的映射是 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 - 这是 MySQLdb 的一个分支 - 可以解决这个问题。
2) Ubuntu > 16.04 的软件包(已修复)
ProxySQL 本身并未为 Ubuntu > 16.04 提供 "最新" 软件包。此 Ansible 角色通过下载 16.04 版本并安装它来规避此问题(这种行为可能会在将来改变)。
从 Ubuntu >= 18.04 开始,libcrypto++6
和 libssl1.0.0
有软件包依赖关系(会自动解决)。
3) 非动态全局变量
ProxySQL 有一些无法在运行时更改的 global_variables
(见 vars/main.yml 中的 proxysql_non_dynamic_variables
)。也就是说,这本身并不是问题,因为此 ProxySQL 角色会处理此事(通过生成 proxysql.cnf
),并在有这样的变量更改时提供自动重启的可能性(将 proxysql_restart_on_static_variables_change
设置为 True
)。
此角色还将在 ProxySQL 数据库本身中设置此值,而这里问题就出现了:
如果您更改多个静态变量,技术上说一切都是正常的。
ProxySQL 会重启并从 proxysql.cnf
中获取新值。但只有第一个值会在数据库中更改。
这并不是一个 *"大问题"*,因为实际值会正确地从配置文件中获取,但您会在下次 Ansible 运行中看到更改集,这将:
- 再次重启 ProxySQL
- 幂等性测试将失败(如果您不从头开始引导)
一个潜在的解决方案可能是不在 ProxySQL 数据库中设置 proxysql_non_dynamic_variables
。
4) ProxySQL 集群
ProxySQL 集群依然处于实验阶段。引自 集群文档: "因为该功能仍处于实验阶段,表不会自动从磁盘加载。"
要从 proxysql.cnf
初始化,必须定义 hostname
(显然)和 port
(它不采用默认值)。
5) ProxySQL 和 CentOS 上的 Percona 仓库...
...因一些依赖问题而无法工作。
从技术上讲,我们需要以下软件包才能正确应用 Ansible:
proxysql_dependency_pkgs:
- MySQL-python
- mysql
启用 Percona 仓库后,MySQL-python
和 mysql
的软件包依赖关系会发生冲突。
yum install MySQL-python
...
============================================================================================
软件包 架构 版本 仓库 大小
============================================================================================
正在安装:
MySQL-python x86_64 1.2.5-1.el7 base 90 k
安装依赖项:
Percona-Server-shared-56 x86_64 5.6.43-rel84.3.el7 percona-release-x86_64 619 k
事务摘要
============================================================================================
安装 1 个包 (+1 个依赖包)
yum install mysql
...
============================================================================================
软件包 架构 版本 仓库 大小
============================================================================================
正在安装:
Percona-Server-client-57 x86_64 5.7.24-27.1.el7 percona-release-x86_64 6.8 M
安装依赖项:
Percona-Server-shared-57 x86_64 5.7.24-27.1.el7 percona-release-x86_64 748 k
Percona-Server-shared-compat-57 x86_64 5.7.24-27.1.el7 percona-release-x86_64 1.2 M
事务摘要
============================================================================================
安装 1 个包 (+2 个依赖包)
如您所见,MySQL-python
依赖于 Percona-Server-shared-56
,而 mysql
依赖于 Percona-Server-shared-57
。
测试
测试使用 Docker 和 docker_test_runner 完成,后者启动以下容器,具有不同的环境设置:
- CentOS 7
- Debian 9 (Stretch)
- Ubuntu 16.04 (Xenial Xerus)
- Ubuntu 18.04 (Bionic Beaver)
在所有容器上安装 Ansible 2.7.9,并且应用 test playbook。
有关更多详细信息和其他检查,请查看 docker_test_runner 配置 和 Docker 入口点。 以下表格提供了高层概述:
发行版 | 版本 | 官方仓库 | Percona 仓库 | 软件包 |
---|---|---|---|---|
CentOS | 7 | 是 | 否 | 1.4.15 |
Debian | 9 | 是 | 是 | 1.4.15 |
Ubuntu | 16.04 | 是 | 是 | 1.4.15 |
Ubuntu | 18.04 | 否 | 是 | 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)
依赖项
- proxysql_proxysql_servers.py 已添加到此角色的库文件夹中。
许可证
BSD 3-Clause "New" or "Revised" License
作者信息
- Timo Runge