zookeeperd
Version information
This version is compatible with:
- Puppet Enterprise 2023.2.x, 2023.1.x, 2023.0.x, 2021.7.x, 2021.6.x, 2021.5.x, 2021.4.x, 2021.3.x, 2021.2.x, 2021.1.x, 2021.0.x, 2019.8.x, 2019.7.x, 2019.5.x, 2019.4.x, 2019.3.x, 2019.2.x, 2019.1.x, 2019.0.x
- Puppet >= 6.0.0 < 8.0.0
- ,
Start using this module
Add this module to your Puppetfile:
mod 'trepasi-zookeeperd', '5.0.0'
Learn more about managing modules with a PuppetfileDocumentation
zookeeperd
Table of Contents
- zookeeperd
- [Table of Contents](#table-of-contents)
Description
Yet another puppet module configuring zookeeper ...
Unique with this module are two features making the usually very painful zookeeper configuration as easy as it can be. First, as all zookeeper nodes need a unique ID to be given, this module provides a custom fact which calculatint a suitable value. Second, all zookeeper nodes need to get the list of all nodes belonging to its ensamble. By making use of puppet's exported resource feature, node definitions are exported and collected to building the server list. Utilizing both features will automate zookeeper configuration and eliminate the node ID and the list of servers from your puppet manifests and hiera.
Setup
Setup Requirements
It is presumed that zookeeper packages are available on your system via regular package management. This module won't configure any package management repositories.
Pluginsync needs to be enabled on your puppet deployment in order to get the custom fact working.
Stored config needs to be enabled on your puppetmaster infrastructure in order to get autoconfiguration feature working. Also, it is strongly recommended to use PuppetDB and consider it as a critical part of your configuration management system. Be aware, that manipulation, inconsistency and data loss from your PuppetDB may cause this module to disrupt your zookeeper clusters.
Beginning with zookeeperd
Install the module and its dependencies to your environment. Include the module to your manifests. You may utilize hiera to hold configuration parameter. The module carries most of its default values using hiera in module, which also serve as an example.
Usage
Automatic cluster configuration
This module enables to automatically create the configurations of zookeeper instances belonging to the same ensamble. To do so, enable autoconfiguration and set an ensamble name on all nodes of the cluster.
class{ zookeeperd:
ensamble => 'Awesamly easy way to your zookeeper cluster',
enable_autoconfig => true,
}
This will install zookeeper to all nodes this manifest applies to and configure all instances having the same ensamble name to one cluster. Note, that puppet needs at least two runs to get the configuration ready: the first run will export the node definitions, the second will collect all nodes. This is done by exporting zookeeperd::node
resources tagged with their ensamble and collecting the same resources having the matching ensamble tag. Each zookeeperd::node
resource will create one server
entry in the zoo.cfg configuration telling zookeeper the list of nodes within the cluster.
Manual configuration
If you don't trust your PuppetDB, or does not want stored configs on your PupppetMaster, you may add pass the list of nodes to the module through nodes parameter.
class{ zookeeperd:
myid => $id_of_this_node,
nodes => {
'first' => {
nodeid => 1,
nodename => 'first.zk.example.org',
},
'second' => {
nodeid => 2,
nodename => 'first.zk.example.org',
}
}
}
Zookeeper maintenance
As zookeeper needs maintenance to cleanup logs and snapshots this module provides a systemd service unit invoking the cleanup and a timer unit scheduling it. You may or may not like zookeepers internal maintenance scheduler, which you can configure via zookeeperd::config
.
By default, this module will create a systemd service unit called zookeeper-cleanup.service
which does the maintenance and a timer unit zookeeper-cleanup.timer
triggering a previous on a schedule.
Using zookeeperd fact
The module provides a custom fact which calculates a unique ID for all nodes. This fact is available $facts['zookeeperd']['myid']
. The myid parameter of the module defaults to this value. The value is calculated from the IP address ($facts['networking']['ip]
) of the node by converting it to a 32 bit integer.
Zookeeper documentation, however, states myid must between 1..255, the software itself is treating this as unsigned long, and it is not used for any logic nor arithmetic.
Configuration
zoo.cfg
The main configuration file of zookeeper, the zoo.cfg is created by taking key-value pairs from zookeeperd::config
hash. The module proves default values with the minimum parameters needed for zookeeper.
Reference
The module code is documented using puppet-strings. Visit https://rtib.github.io/puppet-zookeeperd/ to access detailed code documentation.
Limitations
This is where you list OS compatibility, version compatibility, etc. If there are Known Issues, you might want to include them under their own heading here.
Development
Puppet modules on the Puppet Forge are open projects, and community contributions are essential for keeping them great. Please follow the usual guidelines when contributing changes.
- fork the repository on GitHub
- make your improvements, preferably to a feature branch
- rebase your changes to the head of the master branch
- squash your changes into a single commit
- file a pull request and check the result of Travis-CI tests
Reference
Table of Contents
Classes
zookeeperd
: Main class of puppet module configuring nodes of an zookeeper ensamble.zookeeperd::config
: control the configuration of the nodezookeeperd::install
: control the configuration of the nodezookeeperd::service
: control the configuration of the node
Defined types
zookeeperd::node
: A short summary of the purpose of this defined type.
Classes
zookeeperd
zookeeperd
Puppet module to configure the nodes of an zookeeper ensamble.
Examples
include zookeeperd
zookeeperd::ensamble: 'Awesamly important, dynamically growing zookeeper cluster'
zookeeperd::enable_autoconfig: true
Parameters
The following parameters are available in the zookeeperd
class:
ensure
manage_packages
package_names
data_dir
user
group
cfg_path
config
maintenance_service
maintenance_schedule
maintenance_snapretention
manage_service
service_name
service_enabled
service_running
ensamble
nodes
myid
nodename
ensure
Data type: Enum['present', 'absent']
add or remove this node from ensamble
Default value: 'present'
manage_packages
Data type: Boolean
enable puppet to manage package installation
Default value: true
package_names
Data type: Array[String]
list of packages to be installed
Default value: []
data_dir
Data type: Stdlib::Absolutepath
path to the data directory of zookeeper
Default value: ''
user
Data type: Variant[Integer,String]
username of zookeeper service
Default value: 'zookeeper'
group
Data type: Variant[Integer,String]
groupname of zookeeper service
Default value: 'zookeeper'
cfg_path
Data type: Stdlib::Absolutepath
path to configuration directory
Default value: ''
config
Data type: Hash[String, Scalar]
parameter to generate zoo.cfg configration file
Default value: {}
maintenance_service
Data type: Boolean
establish the systemd units for maintenance cleanup service and its timer
Default value: true
maintenance_schedule
Data type: Array[String]
array for timer wallclocks to schedule maintenance clienups, refer to systemd.time(7)#Parsing Timestamps for details on the items of this array
Default value: []
maintenance_snapretention
Data type: Integer
configure the number of snapshots to be retained during cleanup
Default value: 3
manage_service
Data type: Boolean
enable puppet to manage the zookeeper serivce
Default value: true
service_name
Data type: String
name of the service to control
Default value: 'zookeeper'
service_enabled
Data type: Boolean
enable service at boot time
Default value: true
service_running
Data type: Boolean
ensure running of the service
Default value: true
ensamble
Data type: Optional[String]
name of the ensamble
Default value: undef
nodes
Data type: Hash
list of nodes, if autoconfiguration disable
Default value: {}
myid
Data type: Integer
node id of zookeeper instance
Default value: $facts['zookeeperd']['myid']
nodename
Data type: String
fqdn of this node
Default value: $facts['networking']['fqdn']
zookeeperd::config
zookeeperd::config
Internal class do not use of its own.
zookeeperd::install
zookeeperd::install
Internal class do not use of its own.
zookeeperd::service
zookeeperd::service
Internal class do not use of its own.
Defined types
zookeeperd::node
zookeeperd::node
A node definition to be added as server line in zoo.cfg file. One may define the nodes of an zookeeper ensamble by instanciating this resource. The module itself is implementing a factory to create nodes to all keys added to zookeeperd::nodes hash. This resource is also used with autoconfiguration, which exports this resource and collect all exported nodes of the same ensamble.
Examples
zookeeperd::node { 'first node of this cluster':
nodeid => 1,
nodename => 'first.zk.example.org',
}
zookeeperd::node { 'second node of this cluster':
nodeid => 2,
nodename => 'second.zk.example.org',
}
Parameters
The following parameters are available in the zookeeperd::node
defined type:
nodeid
Data type: Integer
node id (myid) of the zookeeper node to be added to this configuration
nodename
Data type: String
fqdn or IP address of the node to be added
ensure
Data type: Enum['present', 'absent']
ensure meta-parameter to add or remove this node
Default value: 'present'
cfgtgt
Data type: String
path to the configuration file to which this server should be added
Default value: $zookeeperd::cfg_path
ensamble
Data type: Optional[String]
name of the ensamble this node belongs to (used with autoconfig)
Default value: undef
leaderport
Data type: Integer
leader port parameter of the server
Default value: 2888
electionport
Data type: Integer
port used for leader election
Default value: 3888
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
v5.0.0 - 2023-06-29
Changed
v4.0.0 - 2021-05-20
Changed
v3.0.0 - 2019-02-13
Added
Changed
- BREAKING: replace enable_autoconfig feature toggle by type matching #14 (rtib)
- BREAKING: move zookeeper config parameters to extensible config hash #12 (rtib)
- BREAKING: upgrade to Hiera 5 #9 (rtib)
v2.2.1 - 2017-10-04
v2.2.0 - 2017-10-04
v2.1.1 - 2017-10-02
v2.1.0 - 2017-10-02
v2.0.1 - 2017-09-30
Dependencies
- puppetlabs/stdlib (>= 6.0.0 < 10.0.0)
- puppetlabs/concat (>= 6.0.0 < 10.0.0)
- puppet/systemd (>= 3.1.0 < 6.0.0)
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.