cdelgehier.XtraDB-Cluster
Rol de Ansible ansible-role-XtraDB-Cluster
Un rol de Ansible para configurar un clúster Percona XtraDB. Específicamente, las responsabilidades de este rol son:
- instalar paquetes
- asegurar conexiones
- inicializar el clúster
Requerimientos
No hay requerimientos específicos.
Variables del rol
BÁSICAS
Variable | Predeterminado | Comentarios (tipo) |
---|---|---|
xtradb_bind_address |
- | La IP de escucha |
xtradb_bind_interface |
eth0 |
La interfaz utilizada por el clúster |
xtradb_cluster_name |
foo |
Un nombre para el clúster |
xtradb_configured |
xtradb_datadir /configured |
Una cookie para la idempotencia |
xtradb_datadir |
/var/lib/mysql |
Directorio de datos |
xtradb_master_node |
groups[xtradb_nodes_group][0] |
El nodo elegido para ser maestro |
xtradb_mysql_user |
mysql |
El usuario para ejecutar Galera |
xtradb_nodes_group |
xtradb-cluster-nodes |
Grupo de nodos donde se instalará el clúster |
xtradb_root_password |
root |
Contraseña para el usuario root |
xtradb_root_user |
root |
El usuario root |
xtradb_secured |
xtradb_datadir /secured |
Una cookie para la idempotencia |
xtradb_service |
mysql |
Nombre del servicio en Linux |
xtradb_sst_password |
sstpassword |
Contraseña para el xtradb_sst_user |
xtradb_sst_user |
sstuser |
Usuario utilizado para la transferencia de instantáneas de estado |
xtradb_swappiness |
0 |
Valor de "Swappiness". El valor predeterminado del sistema es 60. Un valor de 0 significa que se evita cambiar de procesos. |
xtradb_databases |
[] | Lista de nombres de las bases de datos a añadir |
xtradb_users |
[] | Lista de diccionarios que especifican los usuarios a añadir. Ver más abajo para detalles. |
xtradb_version |
57 |
Versión del paquete de XtraDB |
Parte de MySQL
Para más información sobre los valores, lee la documentación de las Variables del Sistema de MariaDB.
Variable | Predeterminado | Comentarios (tipo) |
---|---|---|
xtradb_binlog_format |
ROW |
El formato de registro binario |
xtradb_character_set_server |
utf |
El conjunto de caracteres |
xtradb_collation_server |
utf8_general_ci |
La colación |
xtradb_default_storage_engine |
InnoDB |
Configurando el Motor de Almacenamiento |
xtradb_innodb_autoinc_lock_mode |
2 |
Hay tres configuraciones posibles para el parámetro de configuración innodb_autoinc_lock_mode. Las configuraciones son 0, 1 o 2, para los modos de bloqueo "tradicional", "consecutivo" o "entremezclado", respectivamente |
xtradb_innodb_buffer_pool_instances |
|
Para habilitar múltiples instancias de buffers, establece la opción de configuración innodb_buffer_pool_instances en un valor mayor que 1 (el predeterminado es 8) hasta 64 (el máximo). Esta opción solo tiene efecto cuando configuras innodb_buffer_pool_size a un tamaño de 1GB o más. El tamaño total que especifiques se divide entre todos los buffers |
xtradb_innodb_buffer_pool_size |
|
Un buen valor es del 70%-80% de la memoria disponible. |
xtradb_innodb_file_format |
|
|
xtradb_innodb_file_format_check |
|
|
xtradb_innodb_file_per_table |
|
|
xtradb_innodb_flush_log_at_trx_commit |
|
Cuando innodb_flush_log_at_trx_commit se establece en 1, el buffer de registro se vacía en cada confirmación de transacción al archivo de registro en disco y proporciona la máxima integridad de datos, pero también tiene un impacto en el rendimiento. Configurarlo en 2 significa que el buffer de registro se vacía en la caché de archivos del sistema operativo en cada confirmación de transacción. La implicación de 2 es óptima y mejora el rendimiento si no te preocupa ACID y puedes perder transacciones en los últimos segundos en caso de fallos del sistema operativo. |
xtradb_innodb_log_buffer_size |
|
Innodb escribe los registros de datos cambiados en su buffer de log, que se mantiene en la memoria y ahorra E/S de disco para transacciones grandes ya que no necesita escribir el log de cambios en disco antes de la confirmación de la transacción. 4 MB - 8 MB es un buen comienzo, a menos que escribas muchos blobs grandes |
xtradb_innodb_log_file_size |
|
El valor predeterminado se cambió en MySQL 5.6 a 50 MB desde 5 MB (el antiguo predeterminado), pero aún es un tamaño demasiado pequeño para muchas cargas de trabajo |
xtradb_innodb_file_per_table |
on |
innodb_file_per_table está ACTIVADO por defecto desde MySQL 5.6. Esto se recomienda generalmente ya que evita tener un gran espacio de tabla compartido y permite recuperar espacio cuando eliminas o truncan una tabla. Un espacio de tabla separado también beneficia al esquema de respaldo parcial de Xtrabackup |
xtradb_innodb_strict_mode |
on |
|
xtradb_join_buffer_size |
|
|
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 |
El modo estricto PXC está diseñado para evitar el uso de funciones experimentales y no soportadas en Percona XtraDB Cluster |
xtradb_query_cache_size |
|
|
xtradb_read_buffer_size |
|
|
xtradb_read_rnd_buffer_size |
|
|
xtradb_skip_name_resolve |
1 |
Usar solo direcciones IP. Configúralo en 0 para resolver nombres de host. |
xtradb_slow_query_log |
0 |
Configúralo en 1 para habilitar el log de consultas lentas. |
xtradb_socket |
|
|
xtradb_sort_buffer_size |
|
|
xtradb_table_definition_cache |
|
|
xtradb_table_open_cache |
|
|
xtradb_table_open_cache_instances |
|
|
xtradb_tmp_table_size |
|
Añadir bases de datos
Las bases de datos se definen con un diccionario que contiene los campos name:
(requerido) y init_script:
(opcional).
El script de inicialización es un archivo SQL que se ejecuta cuando se crea la base de datos para inicializar tablas y poblarlas con valores.
xtradb_databases:
- name: keystone
- name: mydb
init_script: files/init_mydb.sql
Añadir usuarios
Los usuarios se definen con un diccionario que contiene los campos name:
, password:
, priv:
, y, opcionalmente, host:
.
La contraseña está en texto plano y priv:
especifica los permisos para este usuario como se describe en la documentación de Ansible.
Un ejemplo:
xtradb_users:
- name: keystone
password: KEYSTONE_DBPASS
priv: 'keystone.*:SUPER'
- name: cdelgehier
password: yolo
priv: 'mydb.*:ALL'
host: '192.168.1.%'
Dependencias
No hay dependencias.
Ejemplo de Playbook
- 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" # deshabilitar
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
Pruebas
Hay dos tipos de entornos de prueba disponibles. Uno potenciado por Vagrant, otro por Docker. Este último es adecuado para ejecutar pruebas automáticas en Travis-CI. El código de prueba se mantiene en ramas huérfanas separadas. Para obtener detalles sobre cómo configurar estos entornos de prueba en tu propia máquina, consulta los archivos README en las respectivas ramas:
- Docker: docker-tests
Eliminar
Para eliminar todos los rastros y comenzar una nueva instalación
ansible db -m shell -a 'rm -rf /var/lib/mysql /var/log/mysqld.log /etc/percona-xtradb-cluster.conf.d ; yum remove Percona* -y'
Contribuciones
Se agradecen problemas, solicitudes de características e ideas, y se pueden publicar en la sección de Problemas.
Se agradecen también mucho las solicitudes de extracción. La mejor manera de enviar un PR es creando primero un fork de este proyecto en Github, luego creando una rama temática para el cambio sugerido y empujando esa rama a tu propio fork. Github puede crear fácilmente un PR basado en esa rama.
Licencia
Licencia BSD de 2 cláusulas, ver LICENSE.md
Contribuyentes
- Cedric DELGEHIER (mantenedor)
ansible-galaxy install cdelgehier.XtraDB-Cluster