cdelgehier.XtraDB-Cluster
Ansible 角色 ansible-role-XtraDB-Cluster
这是一个用于设置 Percona XtraDB 集群的 Ansible 角色。该角色的主要职责包括:
- 安装软件包
- 确保连接安全
- 启动集群
要求
没有特别的要求
角色变量
基本设置
变量 | 默认值 | 备注 (类型) |
---|---|---|
xtradb_bind_address |
- | 监听 IP |
xtradb_bind_interface |
eth0 |
集群使用的网络接口 |
xtradb_cluster_name |
foo |
集群名称 |
xtradb_configured |
xtradb_datadir /configured |
用于幂等性的标识 |
xtradb_datadir |
/var/lib/mysql |
数据目录 |
xtradb_master_node |
groups[xtradb_nodes_group][0] |
选择的主节点 |
xtradb_mysql_user |
mysql |
运行 Galera 的用户 |
xtradb_nodes_group |
xtradb-cluster-nodes |
集群将安装的节点组 |
xtradb_root_password |
root |
root 用户的密码 |
xtradb_root_user |
root |
root 用户 |
xtradb_secured |
xtradb_datadir /secured |
用于幂等性的标识 |
xtradb_service |
mysql |
Linux 服务名称 |
xtradb_sst_password |
sstpassword |
xtradb_sst_user 的密码 |
xtradb_sst_user |
sstuser |
用于状态快照传输的用户 |
xtradb_swappiness |
0 |
“交换性” 值。系统默认值是 60。0 表示避免交换进程。 |
xtradb_databases |
[] | 要添加的数据库名称列表 |
xtradb_users |
[] | 要添加的用户字典列表,详见下文。 |
xtradb_version |
57 |
XtraDB 的软件包版本 |
MySQL 部分
有关这些值的更多信息,请查看 MariaDB 服务器系统变量文档。
变量 | 默认值 | 备注 (类型) |
---|---|---|
xtradb_binlog_format |
ROW |
二进制日志格式 |
xtradb_character_set_server |
utf |
字符集 |
xtradb_collation_server |
utf8_general_ci |
字符排列 |
xtradb_default_storage_engine |
InnoDB |
设置存储引擎 |
xtradb_innodb_autoinc_lock_mode |
2 |
innodb_autoinc_lock_mode 配置参数有三个可能的设置:0、1 或 2,分别对应 “传统”、“连续” 或 “交错” 锁模式 |
xtradb_innodb_buffer_pool_instances |
|
要启用多个缓冲池实例,将 innodb_buffer_pool_instances 配置选项设置为大于 1 的值(默认是 8),最高可至 64。此选项仅在您将 innodb_buffer_pool_size 设置为 1GB 或更大时生效。您指定的总大小在所有缓冲池之间平均分配 |
xtradb_innodb_buffer_pool_size |
|
一个合适的值是可用内存的 70%-80%。 |
xtradb_innodb_file_format |
|
|
xtradb_innodb_file_format_check |
|
|
xtradb_innodb_file_per_table |
|
|
xtradb_innodb_flush_log_at_trx_commit |
|
当 innodb_flush_log_at_trx_commit 设置为 1 时,日志缓冲区会在每个事务提交时刷新到磁盘的日志文件,并提供最大的数据完整性,但也会有性能影响。设置为 2 意味着日志缓冲区在每个事务提交时刷新到操作系统文件缓存。 |
xtradb_innodb_log_buffer_size |
|
Innodb 将已更改的数据记录写入其日志缓冲区,缓冲区保存在内存中,这样可以避免在事务提交之前将变更日志写入磁盘。4 MB – 8 MB 是一个不错的起始值,除非您进行很多大块的操作 |
xtradb_innodb_log_file_size |
|
默认值在 MySQL 5.6 中从 5 MB(旧默认值)更改为 50 MB,但这对于许多工作负载而言仍然太小 |
xtradb_innodb_file_per_table |
on |
从 MySQL 5.6 开始,innodb_file_per_table 默认打开。这通常推荐使用,因为它避免了巨大的共享表空间,并允许在您删除或截断表时回收空间。单独的表空间也有利于 Xtrabackup 部分备份方案 |
xtradb_innodb_strict_mode |
on |
|
xtradb_join_buffer_size |
|
|
xtradb_log_warnings |
|
|
xtradb_log_warnings |
|
|
xtradb_long_query_time |
|
|
xtradb_max_allowed_packet |
|
|
xtradb_max_connections |
4096 |
|
xtradb_max_heap_table_size |
|
|
xtradb_max_user_connections |
|
|
xtradb_pxc_strict_mode |
ENFORCING |
PXC 严格模式旨在避免在 Percona XtraDB Cluster 中使用实验性和不支持的功能 |
xtradb_query_cache_size |
|
|
xtradb_read_buffer_size |
|
|
xtradb_read_rnd_buffer_size |
|
|
xtradb_skip_name_resolve |
1 |
仅使用 IP 地址。设置为 0 以解析主机名。 |
xtradb_slow_query_log |
0 |
设置为 1 启用慢查询日志。 |
xtradb_socket |
|
|
xtradb_sort_buffer_size |
|
|
xtradb_table_definition_cache |
|
|
xtradb_table_open_cache |
|
|
xtradb_table_open_cache_instances |
|
|
xtradb_tmp_table_size |
|
添加数据库
数据库是通过一个包含 name:
(必需)和 init_script:
(可选)字段的字典来定义的。
初始化脚本是一个 SQL 文件,在创建数据库时执行,以初始化表并填充值。
xtradb_databases:
- name: keystone
- name: mydb
init_script: files/init_mydb.sql
添加用户
用户通过一个包含 name:
、password:
、priv:
,可选地还有 host:
的字典来定义。
密码为明文,priv:
指定了该用户的权限,如 Ansible 文档 中所描述。
示例:
xtradb_users:
- name: keystone
password: KEYSTONE_DBPASS
priv: 'keystone.*:SUPER'
- name: cdelgehier
password: yolo
priv: 'mydb.*:ALL'
host: '192.168.1.%'
依赖项
没有依赖项。
示例播放剧本
- hosts: db
gather_facts: true
become: true
roles:
- role: ansible-role-XtraDB-Cluster
xtradb_cluster_name: "prod-customer"
xtradb_sst_user: sstuser
xtradb_sst_password: s3cr3t
xtradb_root_password: yolo
xtradb_nodes_group: "db"
xtradb_bind_interface: eth0
- hosts: db
gather_facts: true
become: true
roles:
- role: ansible-role-XtraDB-Cluster
xtradb_cluster_name: "prod-customer"
xtradb_sst_user: sstuser
xtradb_sst_password: s3cr3t
xtradb_root_password: yolo
xtradb_bind_address: "{{ ansible_default_ipv4.address }}"
xtradb_wsrep_cluster_address: "gcomm://{{ groups['db'] | map('extract', hostvars, ['ansible_default_ipv4', 'address']) | join(',') }}"
xtradb_master_node: "{{ hostvars[ groups['db'][0] ].ansible_default_ipv4.address }}"
- hosts: db
gather_facts: true
become: true
roles:
- role: ansible-role-XtraDB-Cluster
xtradb_cluster_name: "prod-customer"
xtradb_sst_password: s3cr3t
xtradb_root_password: yolo
xtradb_nodes_group: "db"
xtradb_bind_interface: eth0
xtradb_databases:
- name: keystone
xtradb_users:
- name: keystone
password: PASSWD
priv: 'keystone.*:GRANT,ALL'
xtradb_innodb_buffer_pool_instances: 8
xtradb_innodb_buffer_pool_size: "384M"
xtradb_innodb_file_format: "Barracuda"
xtradb_innodb_file_format_check: "1"
xtradb_innodb_file_per_table: "on"
xtradb_innodb_flush_log_at_trx_commit: "1"
xtradb_innodb_log_buffer_size: "16M"
xtradb_innodb_log_file_size: "50M"
xtradb_innodb_strict_mode: "on"
xtradb_join_buffer_size: "128K"
xtradb_log_warnings: "1"
xtradb_long_query_time: "10"
xtradb_max_allowed_packet: "16M"
xtradb_max_connections: "505"
xtradb_max_heap_table_size: "16M"
xtradb_max_user_connections: "500"
xtradb_query_cache_size: "0" # 禁用
xtradb_read_buffer_size: "128K"
xtradb_read_rnd_buffer_size: "256k"
xtradb_skip_name_resolve: "1"
xtradb_slow_query_log: "1"
xtradb_sort_buffer_size: "2M"
xtradb_table_definition_cache: "1400"
xtradb_table_open_cache: "2000"
xtradb_table_open_cache_instances: "8"
xtradb_tmp_table_size: "16M"
[db]
node1 ansible_host=192.168.1.173
node2 ansible_host=192.168.1.156
node3 ansible_host=192.168.1.154
测试
可用两种类型的测试环境。一种由 Vagrant 提供支持,另一种则由 Docker 提供支持。后者适合在 Travis-CI 上运行自动化测试。测试代码保存在单独的孤立分支中。有关如何在您自己的计算机上设置这些测试环境的详细信息,请查看各自分支中的 README 文件:
- Docker: docker-tests
删除
要删除所有痕迹并开始新的安装
ansible db -m shell -a 'rm -rf /var/lib/mysql /var/log/mysqld.log /etc/percona-xtradb-cluster.conf.d ; yum remove Percona* -y'
贡献
问题、功能请求、想法都非常欢迎,可以在问题部分提交。
拉取请求也非常欢迎。提交 PR 的最佳方式是先创建此 Github 项目的分叉,然后为建议的更改创建一个主题分支并将该分支推送到您的分叉。之后,Github 可以轻松地基于该分支创建一个 PR。
许可证
2 条款 BSD 许可证,请参见 LICENSE.md
贡献者
- Cedric DELGEHIER (维护者)