본문 바로가기
데이터 엔지니어( 실습 정리 )

ansible - 주키퍼 동적 설치

by 세용용용용 2024. 7. 22.

도커 컨테이너 실습[주키퍼] 동적 실행 (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

 

 

최종 셋팅 확인