데이터 엔지니어( 실습 정리 )
ansible - 주키퍼 동적 설치
세용용용용
2024. 7. 22. 14:38
도커 컨테이너 실습[주키퍼] 동적 실행 (tistory.com)
도커 컨테이너 실습[주키퍼] 동적 실행
업데이트(Update)2024-07-01- 주키퍼 개념 작성2024-07-02- 도커 레지스트리 활용 컨테이너 실행으로 스크립트 변경- proc.sh 스크립트 수정(절차지향 >>> 객체지향) 재 사용성을 위해 수정하였습니다.- compo
sy02229.tistory.com
기존 컨테이너 방식은 오버헤드 발생 단점... ㅠㅠ
local 환경에 ansible을 활용한 동적 설치를 통해 단점을 개선!!! 가쥬앗
0. 분산 애플리케이션 설정 공유자원( /data/work/system_download.txt )
[server_ip]|192.168.56.10|192.168.56.11|192.168.56.12
[zookeeper_ip]|192.168.56.10|192.168.56.11|192.168.56.12
-----------------------[zoo.cfg-start]-----------------------
[tickTime=]|2000
[initLimit=]|11
[syncLimit=]|5
[dataDir=]|/data/sy0218/apache-zookeeper-3.7.2-bin/data
[clientPort=]|2181
-----------------------[zoo.cfg-end]-----------------------
1. 인벤토리 ( /data/work/zookeeper_3.7.2_auto_ansible/hosts.ini )
인벤토리: 관리 대상 시스템의 리스트입니다.
[servers]
192.168.56.10
192.168.56.11
192.168.56.12
2. 플레이북 변수 파일 ( /data/work/zookeeper_3.7.2_auto_ansible/main.yml )
zoo_tar_path: "/data/download_tar"
zoo_tar_filename: "apache-zookeeper-3.7.2-bin.tar.gz"
work_dir: "/data/sy0218"
play_book_dir: "/data/work/zookeeper_3.7.2_auto_ansible"
3. 주키퍼 동적 설정을 위한 entrypoint.sh (/data/work/zookeeper_3.7.2_auto_ansible/entrypoint.sh)
(0) 주키퍼 tar wget
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz
(1) zoo.cfg : 샘플 설정파일 >>> 해당 파일을 동적으로 설정할것
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=11
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
clientPort=2181
(2) entrypoint.sh
#!/usr/bin/bash
system_file="/data/work/system_download.txt"
zoo_array=($(cat ${system_file} | grep zookeeper_ip | awk -F '|' '{for(i=2; i<=NF; i++) print $i}'))
len_array=${#zoo_array[@]}
conf_dir=$1
work_dir=$2
file_name=$(find ${conf_dir} -type f -name *zoo.cfg*)
zoo_dir=$(find ${work_dir} -type d -name "*apache-zookeeper-?.?.?*")
sed -i '/server.*:2888:3888/d' ${file_name}
for ((i=0; i<len_array; i++));
do
current_ip=${zoo_array[$i]}
echo "server.$((i+1))=${current_ip}:2888:3888" >> ${file_name}
ssh ${current_ip} "ln -s ${zoo_dir} ${work_dir}/zookeeper"
ssh ${current_ip} "mkdir -p ${zoo_dir}/data"
ssh ${current_ip} "echo $((i+1)) > ${zoo_dir}/data/myid"
done
zoo_config=$(awk '/\[zoo.cfg-start\]/{flag=1; next} /\[zoo.cfg-end\]/{flag=0} flag' ${system_file})
while IFS= read -r zoo_config_low;
do
zoo_env_name=$(echo $zoo_config_low | awk -F '|' '{print $1}' | sed 's/[][]//g')
zoo_env_value=$(echo $zoo_config_low | awk -F '|' '{print $2}')
sed -i "s|^${zoo_env_name}.*$|${zoo_env_name}${zoo_env_value}|" ${file_name}
done <<< $zoo_config
4. 플레이북 yml 파일 ( /data/work/zookeeper_3.7.2_auto_ansible/zookeeper_deploy.yml )
---
- name: Create zookeeper_tar directory
hosts: servers
become: yes
vars_files:
- /data/work/zookeeper_3.7.2_auto_ansible/main.yml
tasks:
- name: Create zookeeper_tar directory
file:
path: "{{ zoo_tar_path }}"
state: directory
- name: Create work directory
file:
path: "{{ work_dir }}"
state: directory
- name: Copy zookeeper_tar to servers
hosts: localhost
become: yes
vars_files:
- /data/work/zookeeper_3.7.2_auto_ansible/main.yml
tasks:
- name: Copy zookeeper_tar to servers
copy:
src: "{{ play_book_dir }}/{{ zoo_tar_filename }}"
dest: "{{ zoo_tar_path }}/{{ zoo_tar_filename }}"
mode: "0644"
delegate_to: "{{ item }}"
with_items:
- '192.168.56.10'
- '192.168.56.11'
- '192.168.56.12'
- name: Extract zookeeper_tar
hosts: servers
become: yes
vars_files:
- /data/work/zookeeper_3.7.2_auto_ansible/main.yml
tasks:
- name: Extract the zookeeper tarball
unarchive:
src: "{{ zoo_tar_path }}/{{ zoo_tar_filename }}"
dest: "{{ work_dir }}"
remote_src: yes
- name: entrypoint_sh start
hosts: localhost
become: yes
vars_files:
- /data/work/zookeeper_3.7.2_auto_ansible/main.yml
tasks:
- name: entry_point_sh start
shell: "{{ play_book_dir }}/entrypoint.sh {{ play_book_dir }} {{work_dir}}"
- name: zoo.cfg cp zookeeper_dir
hosts: localhost
become: yes
vars_files:
- /data/work/zookeeper_3.7.2_auto_ansible/main.yml
tasks:
- name: zoo.cfg cp zookeeper_dir
copy:
src: "{{ play_book_dir }}/zoo.cfg"
dest: "{{ work_dir }}/zookeeper/conf/zoo.cfg"
delegate_to: "{{ item }}"
with_items:
- '192.168.56.10'
- '192.168.56.11'
- '192.168.56.12'
- name: zookeeper run
hosts: servers
become: yes
vars_files:
- /data/work/zookeeper_3.7.2_auto_ansible/main.yml
tasks:
- name: zookeeper run
shell: "{{ work_dir }}/zookeeper/bin/zkServer.sh start"
실행 명령어
ansible-playbook -i /data/work/zookeeper_3.7.2_auto_ansible/hosts.ini /data/work/zookeeper_3.7.2_auto_ansible/zookeeper_deploy.yml
최종 셋팅 확인

