cdelgehier.XtraDB-Cluster

Estado de Construcción

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:

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

Acerca del proyecto

Install and configure a Cluster Mysql

Instalar
ansible-galaxy install cdelgehier.XtraDB-Cluster
Licencia
other
Descargas
544
Propietario