1.创建项目
2.编写j2和site
site:
---
- hosts: all
gather_facts: False
vars:
# zookeeper port
zoo_port1: 2900
zoo_port2: 3900
zoo_listen_port: 2181
# zookeeper user
zookeeper_group: hadoop
zookeeper_group_id: 1200
zookeeper_user: zookeeper
zookeeper_user_id: 1203
# env path
zookeeper_home: /data/service/zookeeper
zookeeper_dataDir: /data/zk_data
# env version
zookeeper_version: 3.4.9
# zk jvm setting
ZK_MM_OPTS: "-server -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Xms2024m -Xmx2048m -XX:ParallelGCThreads=33 -XX:ConcGCThreads=8 -XX:CMSInitiatingOccupancyFraction=85"
ZK_GC_OPT: "-verbose.gc -XX: +PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+PrintTenuringDistribution -Xloggc:/data/log/zookeeper/zk-gc.log -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/log/zookeeper/java_pid%p.hprof"
# zk log
ZOO_LOG_DIR: /data/log/zookeeper
zookeeper.log.file: zookeeper.log
zookeeper.log.threshold: DEBUG
zookeeper.tracelog.file: zookeeper_trace.log
log4j.rootLogger: INFO, LOGFILE
log4j.appender.LOGFILE: org.apache.log4j.RollingFileAppender
log4j.appender.LOGFILE.MaxFileSize: 100MB
log4j.appender.LOGFILE.MaxBackupIndex: 10
log4j.appender.LOGFILE.File: ${zookeeper.log.dir}/${zookeeper.log.file}
log4j.appender.LOGFILE.layout: org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern: %d{dd MMM yyyy HH:mm:ss,SSS} %-5p [%t] (%C.%M:%L) %x - %m%n
roles:
- { role: zk_install }
log4j:
zookeeper.log.dir={{ZOO_LOG_DIR}}
zookeeper.log.file={{zookeeper.log.file}}
zookeeper.log.threshold={{zookeeper.log.threshold}}
zookeeper.tracelog.dir={{ZOO_LOG_DIR}}
zookeeper.tracelog.file={{zookeeper.tracelog.file}}
log4j.rootLogger={{log4j.rootLogger}}
log4j.appender.LOGFILE={{log4j.appender.LOGFILE}}
log4j.appender.LOGFILE.MaxFileSize={{log4j.appender.LOGFILE.MaxFileSize}}
log4j.appender.LOGFILE.MaxBackupIndex={{log4j.appender.LOGFILE.MaxBackupIndex}}
log4j.appender.LOGFILE.File={{log4j.appender.LOGFILE.File}}
log4j.appender.LOGFILE.layout={{log4j.appender.LOGFILE.layout}}
log4j.appender.LOGFILE.layout.ConversionPattern={{log4j.appender.LOGFILE.layout.ConversionPattern}}
zoo.cfg:
clientPort={{ zoo_listen_port }}
tickTime=2000
initLimit=10
syncLimit=5
dataDir={{ zookeeper_dataDir }}
maxClientCnxns=512
autopurge.purgeInterval=24
autopurge.snapRetainCount=3
{% for host in groups['all'] %}
server.{{ loop.index }}={{ hostvars[host].ansible_ssh_host }}:{{ zoo_port1 }}:{{ zoo_port2 }}
{% endfor %}
zk-env:
#!/bin/bash
###zk dir setting
export ZK_HOME={{zookeeper_home}}
export ZK_BIN=${ZK_HOME}/bin
export PATH=$PATH:$ZK_BIN
###zk jvm setting
export ZK_MM_OPTS={{ZK_MM_OPTS}}
export ZK_GC_OPT={{ZK_GC_OPT}}
myid:
{% for ip in groups['all'] %}
{% if ip == inventory_hostname %}
{{ loop.index }}
{% endif %}
{% endfor %}
3.编写main和handler
main写zk的wget、解压缩、创建文件目录等等,再加上j2文件:
- name: "copy zookeeper user env script"
template: src="./zk-env.sh.j2" dest="/etc/profile.d/zk-env.sh" mode=0755
- name: Config zoo.cfg
template: src="./zoo.cfg.j2" dest="{{zookeeper_home}}/conf/zoo.cfg" mode=0755
- name: Config log4j.properties
template: src="./log4j.properties.j2" dest="{{zookeeper_home}}/conf/log4j.properties" mode=0755
- name: Config myid
template: src="./myid.j2" dest="/data/zk_data/myid" mode=0755
handler加上启动命令就ok了 !!
zk自动化部署就完事了。