ElasticSearch Auto Build With Docker

ElasticSearch Auto Build With Docker

近日因為大數據寫入與分析應用需求的關系

需要大量的使用到ElasticSearch

然而,每次在不同的環境要佈署ELK並配置不同的node來達到Sharding的效果的工作覺得繁瑣

因此手刻了一些半自動化部署Elasticsearch的Cluster的機制(同一台主機,不同的Docker),不同台需要參考使用Docker Swarn

 

以下是相關Shell Script操作,相關步驟如下:

0.設定相關的環境變數,例如java memory, elasticsearch version

1.詢問要建立的容器名稱

2.詢問export的port名稱(有2組,通常為9200、9300)

3.動態建立容器網路(若容器放在同一個網路下無綁定方向問題問題)

4.動態建立cluster的目錄(容器名稱會建立在此目錄下再建立對應容器的目錄)與相關config/esdatadir、log、data目錄,並設立權限

5.動態從版控取得對應的ElasticSearch的config,也可以自行改成放在某個統一位置取得 (網址:http://xxx.xxx.xxx.xxx:yyyy是git的位置)

6. sudo sysctl -w vm.max_map_count=262144(這句不知為什麼一定要執行..java環境才起的來)

7.啟動Docker(並結合相關參數)

#!/bin/bash


sudo docker ps -a
read -p "Enter your elasticsearch container_name(eg. es1, es2): " p_container_name

container_name=$p_container_name
java_memory="2g"
es_version="5.6.6"

read -p "Enter your elasticsearch container_name default export port1(eg. 9200, 9201, 9202): " port1

export_port1=$port1

read -p "Enter your elasticsearch container_name default export port1(eg. 9300, 9301, 9302): " port2
export_port2=$port2

network_name="es_net"

if [ ! "$(sudo docker network ls |grep $network_name)" ]; then
  sudo docker network create "$network_name"
  echo "network created!"
else
  sudo docker network ls | grep "$network_name"
  echo "network $network_name already exist!"
fi

echo "continue..."

DIRECTORY="es_cluster"

sudo cd /mnt

if [ ! -d "$DIRECTORY" ]; then
  sudo mkdir "$DIRECTORY"
fi

cd es_cluster
sudo mkdir "$container_name"
cd "$container_name"

echo "$container_name folder created!"

sudo git init
sudo git remote add origin "http://xxx.xxx.xxx.xxx:yyyy/scm/mes/elasticsearch.git"
sudo git pull origin master
sudo mkdir config/scripts
sudo mkdir esdatadir
cd esdatadir
sudo mkdir log
sudo mkdir data
sudo chmod 777 /mnt/es_cluster/$container_name/esdatadir/*
sudo chmod 777 /mnt/es_cluster/$container_name/config/scripts

echo "$container_name configuration setting done!"

cd /mnt/es_cluster/$container_name

sudo sysctl -w vm.max_map_count=262144

sudo docker run -d -v "/mnt/es_cluster/$container_name/esdatadir/data":/var/lib/elasticsearch \
 -v "/mnt/es_cluster/$container_name/esdatadir/log":/var/log/elasticsearch \
 -v "/mnt/es_cluster/$container_name/config":/usr/share/elasticsearch/config \
 -p "$export_port1:9200" -p "$export_port2:9300" --name $container_name -e "bootstrap.memory_lock=true" \
 -e ES_JAVA_OPTS="-Xms$java_memory -Xmx$java_memory" --ulimit memlock=-1:-1 \
 --restart always \
 --net "$network_name" \
 elasticsearch:$es_version

echo "$container_name docker container up done!"

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *