locp.cassandra
ansible-role-cassandra
一个用于安装和配置 Apache Cassandra 的 Ansible 角色。
需求
操作系统家族识别
Ansible playbook 必须收集足够的信息,以便设置 ansible_os_family
变量。
Python 模块
在将 cassandra_configure_apache_repo
设置为 True 的 Debian 系统上,请注意使用了 apt_repository
模块。因此在执行此模块的主机上需要以下要求。
- python-apt (python 2)
- python3-apt (python 3)
角色变量
cassandra_15770_workaround
: (默认: False) CASSANDRA-15770 影响了 Debian 10 和 Ubuntu 20.04,后来在版本 3.0.21、3.11.7、4.0 中修复。由于我们目前正在对 3.11.6 进行测试,如果设置为 True,将把修复应用于/etc/init.d/cassandra
。cassandra_2356_workaround
: (默认: False) CASSANDRA-2356 影响了 Cassandra 4.0 之前的 deb 软件包。cassandra_cms_heap_new_size_mb
: 一个自定义事实,返回的值(MB)可能适合在使用并发标记清扫(CMS)收集器时设置 HEAP_NEWSIZE。有关更多详细信息,请参见 调整 Java 资源。需要设置cassandra_memtotal_mb
和cassandra_processor_vcpus
事实。cassandra_cms_max_heapsize_mb
: 一个自定义事实,返回的值(MB)可能适合在使用并发标记清扫(CMS)收集器时设置 MAX_HEAP_SIZE。有关更多详细信息,请参见 调整 Java 资源。需要设置cassandra_memtotal_mb
事实。cassandra_configuration
(默认: 无): Cassandra 的配置。请参见下面的示例 playbook。cassandra_configuration_directory
(默认:/etc/cassandra/default.conf
在 RedHat 上和/etc/cassandra
在 Debian 上): Cassandra 配置的目录。cassandra_configuration_file
(默认:/etc/cassandra/default.conf/cassandra.yaml
在 RedHat 上和/etc/cassandra/cassandra.yaml
在 Debian 上): Cassandra 配置文件的位置。cassandra_configuration_templ
(默认:cassandra.yaml.j2
): Cassandra 配置的模板文件名。cassandra_configure_apache_repo
(默认: False): 是否配置 Apache Cassandra 库。另见:
cassandra_repo_apache_release
。cassandra_dc
: 如果定义,将在cassandra-rackdc.properties
中设置数据中心。此选项已被弃用,并将在将来的版本中移除。请改用
cassandra_regex_replacements
。cassandra_directories
: 如果定义,这将在软件包安装后创建目录(因此在 cassandra 用户可用时),但在配置 Cassandra 之前。有关更多详细信息,请参见示例 playbook。请注意,当与
cassandra_join_cluster
选项一起使用时,这里指定的路径将被删除(包括所有内容)并重新创建,以便节点能正确加入集群。cassandra_heap_new_size_mb
: 一个自定义事实,返回的值(MB)可能适合设置 HEAP_NEWSIZE。请参见 调整 Java 资源 获取更多详细信息。需要设置cassandra_memtotal_mb
和cassandra_processor_vcpus
事实。cassandra_install_packages
(默认: True): 一个布尔值,表示此 Ansible 角色是否应尝试安装软件包。如果设置为 False,则允许用户使用此角色配置 Cassandra,但不尝试安装(例如,他们从源代码安装)。cassandra_join_cluster
(默认: False): 这是一个实验性功能,使用时需谨慎!如果设置为 true 且发现该节点的cassandra_node_count
为 1,在配置该节点之前将进行以下操作:- 将停止 Cassandra
- 清除 Cassandra 数据目录中的所有数据。
完成后,将重新配置节点并加入一个(应该比一个节点大)的集群。
cassandra_max_heapsize_mb
: 一个自定义事实,返回的值(MB)可能适合设置 MAX_HEAP_SIZE。请参见 调整 Java 资源 获取更多详细信息。需要设置cassandra_memtotal_mb
事实。cassandra_memtotal_mb
(默认:ansible_memtotal_mb
如果设置): 用于计算cassandra_cms_max_heapsize_mb
、cassandra_max_heapsize_mb
、cassandra_cms_heap_new_size_mb
和cassandra_heap_new_size_mb
。cassandra_path
此变量在版本 1.4.0 中引入,但未记录。如 指出,如果在变量设置时定义此变量且目录被删除,则不会重新创建。此变量现已弃用,建议使用cassandra_directories
。cassandra_node_count
: 一个只读变量,尝试包含集群中的节点数。仅在cassandra_join_cluster
设置为True
时才会被设置。cassandra_package
(默认:cassandra
): 用于提供 Cassandra 的软件包名称。cassandra_processor_vcpus
(默认:ansible_processor_vcpus
如果设置): 用于计算cassandra_cms_heap_new_size_mb
和cassandra_heap_new_size_mb
。cassandra_rack
: 如果定义,将在cassandra-rackdc.properties
中设置机架。此选项已被弃用,并将在将来的版本中移除。请改用
cassandra_regex_replacements
。cassandra_regex_replacements
(默认: []): 一个哈希列表,描述path
,它相对cassandra_configuration_directory
,regexp
是在文件中查找的正则表达式,line
是文件中的替换内容。有关更多详细信息,请参见示例 playbook。cassandra_repo_apache_release
(默认: 无): 发行系列名称(可以是 40x、311x 或 30x 之一)。如果将cassandra_configure_apache_repo
设置为 True,必须设置此项。cassandra_service_enabled
(默认: 是): Cassandra 服务是否应启用(可以是是或否)。cassandra_service_restart
(默认: True): 如果设置为 true,对 Cassandra 配置文件或数据目录的更改将确保在更改后刷新 Cassandra 服务。将此标志设置为 false 会禁用此行为,因此允许进行更改,但允许用户控制服务何时重启。cassandra_systemd_enabled
(默认: False): 如果设置为 True,将通过 systemd 启用 Cassandra 服务,那么单位文件将放置在cassandra_systemd_path
中,来自模板cassandra_systemd_template
。cassandra_systemd_path
(默认:/usr/lib/systemd/system/cassandra.service
): Cassandra 的单位文件路径。如果cassandra_systemd_enabled
为 False,则忽略此变量。cassandra_systemd_template
(默认:systemd/system/cassandra.service.j2
): 创建 Cassandra 单位文件的模板路径。如果cassandra_systemd_enabled
为 False,则忽略此变量。cassandra_task_delay
(默认: 10): 依赖网络连接的 Ansible 任务(即apt
、apt_key
、apt_repository
、package
和yum
)可能会受到高延迟的影响,因此这些任务被配置为重试。此参数是尝试之间的等待时间。另见cassandra_task_retries
。cassandra_task_retries
(默认: 5): 依赖网络连接的 Ansible 任务(即apt
、apt_key
、apt_repository
、package
和yum
)可能会受到高延迟的影响,因此这些任务被配置为重试。此参数是应尝试的次数。另见cassandra_task_delay
。
示例 Playbook
此 playbook 应足够配置 Cassandra 的非常简单 配置:
---
- name: locp.cassandra 角色示例 Playbook
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 }}"
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:
- seeds: "{{ hostvars[groups['cassandra'][0]]['ansible_default_ipv4'].address }}"
start_native_transport: true
cassandra_configure_apache_repo: true
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
要查看用于 测试 的 playbooks,请参见 molecule/default/converge.yml 和 molecule/combine_cluster/converge.yml。
许可证
作者信息
由 League of Crafty Programmers Ltd. 开发。
如有问题或想要贡献,请访问 https://github.com/locp/ansible-role-cassandra/issues。