locp.cassandra
rol-ansible-cassandra
Rol de Ansible para instalar y configurar Apache Cassandra.
Requisitos
Identificación de la Familia del SO
El playbook de Ansible debe recopilar suficientes datos para que se establezca la variable ansible_os_family
.
Módulos de Python
En sistemas Debian que configuren cassandra_configure_apache_repo
como True, tenga en cuenta que se utiliza el
módulo apt_repository
. Por lo tanto, se necesitan los siguientes requisitos en el host que ejecuta este módulo:
- python-apt (python 2)
- python3-apt (python 3)
Variables del Rol
cassandra_15770_workaround
: (predeterminado: False) CASSANDRA-15770 afectó a Debian 10 y Ubuntu 20.04, que se corrigió posteriormente en las versiones 3.0.21, 3.11.7, 4.0. Dado que estamos ejecutando nuestras pruebas contra 3.11.6 en este momento, esto aplica la corrección a/etc/init.d/cassandra
si se establece en True.cassandra_2356_workaround
: (predeterminado: False) CASSANDRA-2356 afectó a los paquetes deb para versiones de Cassandra anteriores a 4.0.cassandra_cms_heap_new_size_mb
: Un hecho personalizado que devuelve un valor (MB) que puede ser adecuado para establecer el HEAP_NEWSIZE al usar el recolector Concurrent Mark Sweep (CMS). Vea Ajuste de recursos de Java para más detalles. Requiere que se establezcan los hechoscassandra_memtotal_mb
ycassandra_processor_vcpus
.cassandra_cms_max_heapsize_mb
: Un hecho personalizado que devuelve un valor (MB) que puede ser adecuado para establecer el MAX_HEAP_SIZE al usar el recolector Concurrent Mark Sweep (CMS). Vea Ajuste de recursos de Java para más detalles. Requiere que se establezca el hechocassandra_memtotal_mb
.cassandra_configuration
(predeterminado: ninguno): La configuración para Cassandra. Vea el ejemplo de playbook a continuación.cassandra_configuration_directory
(predeterminado:/etc/cassandra/default.conf
en RedHat y/etc/cassandra
en Debian): El directorio de configuración de Cassandra.cassandra_configuration_file
(predeterminado:/etc/cassandra/default.conf/cassandra.yaml
en RedHat y/etc/cassandra/cassandra.yaml
en Debian): La ubicación del archivo de configuración de Cassandra.cassandra_configuration_templ
(predeterminado:cassandra.yaml.j2
): Nombre del archivo de plantilla para la configuración de Cassandra.cassandra_configure_apache_repo
(predeterminado: False): Si se debe configurar el repositorio de Apache Cassandra.VER TAMBIÉN:
cassandra_repo_apache_release
.cassandra_dc
: Si está definido, establecerá el Datacenter encassandra-rackdc.properties
.Esta opción está obsoleta y será eliminada en una futura versión. Utilice
cassandra_regex_replacements
en su lugar.cassandra_directories
: Si está definido, esto creará directorios después de que se haya instalado el paquete (por lo tanto, cuando el usuario de cassandra esté disponible) pero antes de que se configure Cassandra. Vea el ejemplo de playbook para más detalles.Tenga en cuenta que cuando se usa con la opción
cassandra_join_cluster
, las rutas especificadas aquí se eliminarán (con todos sus contenidos) y se volverán a crear para que el nodo pueda unirse a un clúster correctamente.cassandra_heap_new_size_mb
: Un hecho personalizado que devuelve un valor (MB) que puede ser adecuado para establecer el HEAP_NEWSIZE. Vea Ajuste de recursos de Java para más detalles. Requiere que se establezcan los hechoscassandra_memtotal_mb
ycassandra_processor_vcpus
.cassandra_install_packages
(predeterminado: True): Un valor booleano que indica si este rol de Ansible debe intentar instalar paquetes o no. Si se establece en False, permite que un usuario use este rol para configurar Cassandra, pero no intenta instalarlo (por ejemplo, lo han instalado desde el código fuente).cassandra_join_cluster
(predeterminado: False): Esta es una función experimental, ¡use con extrema precaución! Si se establece como verdadero y se encuentra quecassandra_node_count
es 1 en un nodo, se llevarán a cabo las siguientes acciones en ese nodo antes de que se configure:- Cassandra se detendrá.
- El directorio/directorios de datos de Cassandra se borrarán de todos los datos.
Una vez hecho esto, el nodo será reconfigurado y se unirá a un clúster (que debería ser más grande que un nodo).
cassandra_max_heapsize_mb
: Un hecho personalizado que devuelve un valor (MB) que puede ser adecuado para establecer el MAX_HEAP_SIZE. Vea Ajuste de recursos de Java para más detalles. Requiere que se establezca el hechocassandra_memtotal_mb
.cassandra_memtotal_mb
(predeterminado:ansible_memtotal_mb
si se establece): Se utiliza para calcularcassandra_cms_max_heapsize_mb
,cassandra_max_heapsize_mb
,cassandra_cms_heap_new_size_mb
ycassandra_heap_new_size_mb
.cassandra_path
: Esta variable se introdujo en la versión 1.4.0, pero se olvidó de documentarse. Como se indicó aquí, si la variable se define cuando se establece y se elimina el directorio, no se vuelve a crear. La variable ahora se ha obsoleto a favor decassandra_directories
.cassandra_node_count
: Una variable de solo lectura que intenta contener el número de nodos en el clúster. Solo se establecerá sicassandra_join_cluster
está establecido comoTrue
.cassandra_package
(predeterminado:cassandra
): El nombre del paquete que se instalará para proporcionar Cassandra.cassandra_processor_vcpus
(predeterminado:ansible_processor_vcpus
si se establece): Se utiliza para calcularcassandra_cms_heap_new_size_mb
ycassandra_heap_new_size_mb
.cassandra_rack
: Si está definido, establecerá el rack encassandra-rackdc.properties
.Esta opción está obsoleta y será eliminada en una futura versión. Utilice
cassandra_regex_replacements
en su lugar.cassandra_regex_replacements
(predeterminado: []): Una lista de hashes que describen unpath
que es relativo alcassandra_configuration_directory
,regexp
que es una expresión regular para encontrar en un archivo yline
es el reemplazo dentro del archivo. Vea el ejemplo de playbook para más detalles.cassandra_repo_apache_release
(predeterminado: Ninguno): El nombre de la serie de versiones (puede ser 40x, 311x o 30x). Esto debe establecerse sicassandra_configure_apache_repo
está establecido como True.cassandra_service_enabled
(predeterminado: sí): ¿Debería habilitarse el servicio de Cassandra? (puede ser sí o no).cassandra_service_restart
(predeterminado: True): Si se establece como verdadero, los cambios en el archivo de configuración de Cassandra o los directorios de datos garantizarán que el servicio de Cassandra se actualice después de los cambios. Establecer esta bandera como falsa desactivará este comportamiento, permitiendo así que los cambios se realicen pero permitiendo al usuario controlar cuándo se reinicia el servicio.cassandra_systemd_enabled
(predeterminado: False): ¿Debería habilitarse el servicio de Cassandra a través de systemd? Si se establece como True, se colocará un archivo de unidad encassandra_systemd_path
creado a partir de la plantillacassandra_systemd_template
.cassandra_systemd_path
(predeterminado:/usr/lib/systemd/system/cassandra.service
): La ruta a un archivo de unidad para Cassandra. Esta variable se ignora sicassandra_systemd_enabled
es False.cassandra_systemd_template
(predeterminado:"systemd/system/cassandra.service.j2"
): La ruta a una plantilla de la cual crear un archivo de unidad para Cassandra. Esta variable se ignora sicassandra_systemd_enabled
es False.cassandra_task_delay
(predeterminado: 10): Las tareas de Ansible que dependen de la conectividad de red (es decir,apt
,apt_key
,apt_repository
,package
yyum
) pueden verse afectadas por alta latencia, por lo que esas tareas están configuradas para reintentar. Este parámetro controla cuánto esperar entre los intentos. Vea tambiéncassandra_task_retries
.cassandra_task_retries
(predeterminado: 5): Las tareas de Ansible que dependen de la conectividad de red (es decir,apt
,apt_key
,apt_repository
,package
yyum
) pueden verse afectadas por alta latencia, por lo que esas tareas están configuradas para reintentar. Este parámetro define cuántos intentos se deben realizar. Vea tambiéncassandra_task_delay
.
Ejemplo de Playbook
Este playbook debería ser suficiente para configurar Cassandra con una configuración muy básica configuración:
---
- name: Ejemplo de Playbook para el rol locp.cassandra
hosts: cassandra
remote_user: root
vars:
cassandra_configuration:
authenticator: PasswordAuthenticator
cluster_name: MyCassandraCluster
commitlog_directory: /data/cassandra/commitlog
commitlog_sync: periodic
commitlog_sync_period_in_ms: 10000
data_file_directories:
- /data/cassandra/data
endpoint_snitch: GossipingPropertyFileSnitch
hints_directory: "/data/cassandra/hints"
listen_address: "{{ ansible_default_ipv4.address }}"
# Para un valor razonable para establecer num_tokens, por favor vea
# https://cassandra.apache.org/doc/latest/getting_started/production.html#tokens
num_tokens: 4
partitioner: org.apache.cassandra.dht.Murmur3Partitioner
saved_caches_directory: /data/cassandra/saved_caches
seed_provider:
- class_name: "org.apache.cassandra.locator.SimpleSeedProvider"
parameters:
# Esto establece la semilla en el primer nodo en el grupo de Ansible llamado
# cassandra.
- seeds: "{{ hostvars[groups['cassandra'][0]]['ansible_default_ipv4'].address }}"
start_native_transport: true
cassandra_configure_apache_repo: true
# Crear una estructura de directorios alternativa para los datos de Cassandra.
# En este ejemplo, habrá un directorio llamado /data propiedad de root
# con permisos rwxr-xr-x. Tendrá una serie de subdirectorios
# todos los cuales se establecerán por defecto como propiedad del usuario de cassandra
# con permisos rwx------.
cassandra_directories:
root:
group: root
mode: "0755"
owner: root
paths:
- /data
data:
paths:
- /data/cassandra
- /data/cassandra/commitlog
- /data/cassandra/data
- /data/cassandra/hints
- /data/cassandra/saved_caches
cassandra_regex_replacements:
- path: cassandra-env.sh
line: 'MAX_HEAP_SIZE="{{ cassandra_max_heapsize_mb }}M"'
regexp: '^#MAX_HEAP_SIZE="4G"'
- path: cassandra-env.sh
line: 'HEAP_NEWSIZE="{{ cassandra_heap_new_size_mb }}M"'
regexp: '^#HEAP_NEWSIZE="800M"'
- path: cassandra-rackdc.properties
line: 'dc=DC1'
regexp: '^dc='
- path: cassandra-rackdc.properties
line: 'rack=RACK1'
regexp: '^rack='
cassandra_repo_apache_release: 40x
roles:
- role: locp.cassandra
Para ver los playbooks que se utilizan para pruebas vea molecule/default/converge.yml y molecule/combine_cluster/converge.yml.
Licencia
Información del Autor
Desarrollado por la League of Crafty Programmers Ltd.
Para plantear problemas o hacer contribuciones, visite https://github.com/locp/ansible-role-cassandra/issues
Ansible role to install Apache Cassandra.
ansible-galaxy install locp.cassandra