一、完整过程比较长,我仅给出Azure vm extension script 一键部署Elasticsearch集群的安装脚本,有需要的同学,可以邮件我,我给你完整的ARM Template

如果你不是用Azure VM ,也没关系,我的bash脚本都是一个个的函数,你可以自己改造成自己的Linux安装脚本。

二、此脚本的诞生是为了解决两个问题:
  1. ELK在线安装有时候会异常缓慢,导致整个在线安装脚本奔溃
  2. 一个一个vm节点部署Elasticsearch集群比较繁琐,此处实现一键自动生成集群

大致的思路是先离线下载好安装包,存放到自己的容易下载的地方,我此处用的是Azure blob storage,只要达到一个目的:你能通过一个链接,能快速,方便地访问下载到Elasticsearch的安装包即可。利用Azure VM extension,调用我给出的脚本,自行下载和安装。

三、达到的目的:
  1. 运行成功后,自动创建多台虚拟机,并且虚拟机ES之间组成集群
  2. ES集群得到初步优化,vm system在适配ES上也得到初步优化
四、安装脚本:
#!/bin/bash
# Copyright (c) Microsoft. All rights reserved.
# Licensed under ELASTIC LICENSE
##
# Author : Wenbo Yang July/16/2018
##
# Reference: https://github.com/Azure/azure-diagnostics-tools/blob/master/ELK-Semantic-Logging/ELK/AzureRM/logstash-on-ubuntu/logstash-install-ubuntu.sh
# Reference: https://github.com/Azure/azure-quickstart-templates/blob/master/elasticsearch/scripts/elasticsearch-ubuntu-install.sh
# Reference: https://github.com/Azure/azure-quickstart-templates/blob/master/elasticsearch-vmss/install-elasticsearch.sh
# Reference: https://github.com/Azure/azure-diagnostics-tools/blob/master/ES-MultiNode/es-ubuntu-install.sh
## # Log method to control/redirect log output
log()
{
echo "$1"
logger "$1"
} if [ "${UID}" -ne 0 ];
then
log "Script executed without root permissions"
echo "You must be root to run this program." >&2
exit 3
fi # TEMP FIX - Re-evaluate and remove when possible
# This is an interim fix for hostname resolution in current VM
grep -q "${HOSTNAME}" /etc/hosts
if [ $? == 0 ]
then
echo "${HOSTNAME} found in /etc/hosts"
else
echo "${HOSTNAME} not found in /etc/hosts"
# Append it to the hosts file if not there
echo "127.0.0.1 ${HOSTNAME}" >> /etc/hosts
log "hostname ${HOSTNAME} added to /etc/hosts"
fi #Loop through options passed
while getopts :p:c:m:e:k:h optname; do
log "Option $optname set with value ${OPTARG}"
case $optname in
p) #set cluster name
FIRSTPRIVATEIP=${OPTARG}
;;
c) #set cluster name
NODECOUNT=${OPTARG}
;;
e) #set master mode
ES_DOWNLOAD_URL=${OPTARG}
;;
k) #set master mode
KIBANA_DOWNLOAD_URL=${OPTARG}
;;
h) #show help
help
exit 2
;;
\?) #unrecognized option - show help
echo -e \\n"Option -${BOLD}$OPTARG${NORM} not allowed."
help
exit 2
;;
esac
done # Usage: get_discovery_endpoints start_address node_count
# Example: get_discovery_endpoints 10.0.1.4 3
# (returns ["10.0.1.4", "10.0.1.5", "10.0.1.6"]
get_discovery_endpoints()
{
declare start_address=$1
declare address_prefix=${start_address%.*} # Everything up to last dot (not including)
declare -i address_suffix_start=${start_address##*.} # Last part of the address, interpreted as a number
declare retval='['
declare -i i
declare -i suffix for (( i=0; i<$2; ++i )); do suffix=$(( address_suffix_start + i )) retval+="\"${address_prefix}.${suffix}\", " done retval=${retval:0:-2} # Remove last comma and space retval+=']' echo $retval } # Install Oracle Java install_java() { log "Installing Java" add-apt-repository -y ppa:webupd8team/java apt-get -y update > /dev/null
echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections
echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections
apt-get -y install oracle-java8-installer > /dev/null
java -version
if [ $? -ne 0 ]; then
log "Java installation failed"
exit 1
fi
} # Install ES with Debian Package manually
install_es()
{
log "Installing Elaticsearch"
sudo wget -q "$ES_DOWNLOAD_URL" -O elasticsearch.deb
sudo dpkg -i elasticsearch.deb
} # Install Kibana with Debina Package manually
install_kibana()
{
log "Installing Kibana"
sudo wget -q "$KIBANA_DOWNLOAD_URL" -O kibana.deb
sudo dpkg -i kibana.deb
} # Configure elasticsearch
configure_es()
{
log "Update configuration"
mv /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.bak
echo "cluster.name: elasticsearch" >> /etc/elasticsearch/elasticsearch.yml
echo "node.name: ${HOSTNAME}" >> /etc/elasticsearch/elasticsearch.yml
declare -i minimum_master_nodes=$((($NODECOUNT / 2) + 1))
echo "discovery.zen.minimum_master_nodes: 2" >> /etc/elasticsearch/elasticsearch.yml
discovery_endpoints=$(get_discovery_endpoints $FIRSTPRIVATEIP $NODECOUNT)
echo $discovery_endpoints
echo "discovery.zen.ping.unicast.hosts: $discovery_endpoints" >> /etc/elasticsearch/elasticsearch.yml
IPADDRESS=$(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}')
echo "network.host: ${IPADDRESS}" >> /etc/elasticsearch/elasticsearch.yml
echo "http.port: 9200" >> /etc/elasticsearch/elasticsearch.yml
echo "bootstrap.memory_lock: true" >> /etc/elasticsearch/elasticsearch.yml echo "node.master: true" >> /etc/elasticsearch/elasticsearch.yml
echo "node.data: true" >> /etc/elasticsearch/elasticsearch.yml
echo "path.data: /var/lib/elasticsearch" >> /etc/elasticsearch/elasticsearch.yml
echo "path.logs: /var/log/elasticsearch" >> /etc/elasticsearch/elasticsearch.yml
sudo update-rc.d elasticsearch defaults 95 10
service elasticsearch start
#sudo systemctl stop elasticsearch.service
sleep 30 if [ <code>systemctl is-failed elasticsearch.service</code> == 'failed' ];
then
log &quot;Elasticsearch unit failed to start&quot;
exit 1
fi
} # Configure kibana
configure_kibana()
{
IPADDRESS=$(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}')
echo &quot;server.host: \&quot;${IPADDRESS}\&quot;&quot; &gt;&gt; /etc/kibana/kibana.yml
echo &quot;elasticsearch.url: \&quot;http://${IPADDRESS}:9200\&quot;&quot; &gt;&gt; /etc/kibana/kibana.yml
sudo update-rc.d kibana defaults 95 10
service kibana start
#sudo systemctl stop kibana.service
sleep 10 if [ <code>systemctl is-failed kibana.service</code> == 'failed' ];
then
log &quot;Kibana unit failed to start&quot;
exit 1
fi
} configure_system()
{
echo &quot;options timeout:1 attempts:5&quot; &gt;&gt; /etc/resolvconf/resolv.conf.d/head
resolvconf -u
ES_HEAP=<code>free -m |grep Mem | awk '{if ($2/2 &gt;31744) print 31744;else printf &quot;%.0f&quot;, $2/2;}'</code>
echo &quot;ES_JAVA_OPTS=\&quot;-Xms${ES_HEAP}m -Xmx${ES_HEAP}m\&quot;&quot; &gt;&gt; /etc/default/elasticsearch
echo &quot;JAVA_HOME=$JAVA_HOME&quot; &gt;&gt; /etc/default/elasticsearch
echo 'MAX_OPEN_FILES=65536' &gt;&gt; /etc/default/elasticsearch
echo 'MAX_LOCKED_MEMORY=unlimited' &gt;&gt; /etc/default/elasticsearch #https://www.elastic.co/guide/en/elasticsearch/reference/current/setting-system-settings.html#systemd
mkdir -p /etc/systemd/system/elasticsearch.service.d
touch /etc/systemd/system/elasticsearch.service.d/override.conf
echo '[Service]' &gt;&gt; /etc/systemd/system/elasticsearch.service.d/override.conf
echo 'LimitMEMLOCK=infinity' &gt;&gt; /etc/systemd/system/elasticsearch.service.d/override.conf
} log &quot; ---------------begin------------------- &quot;
install_java
log &quot;Master Node install elasticsearch and kibana&quot;
log &quot;Install configure and start elasticsearch&quot;
install_es
configure_system
configure_es
log &quot;Install configure and start kibana&quot;
install_kibana
configure_kibana

Azure vm 扩展脚本自动部署Elasticsearch集群的更多相关文章

  1. Docker部署Elasticsearch集群

    http://blog.sina.com.cn/s/blog_8ea8e9d50102wwik.html Docker部署Elasticsearch集群 参考文档: https://hub.docke ...

  2. Centos8 部署 ElasticSearch 集群并搭建 ELK,基于Logstash同步MySQL数据到ElasticSearch

    Centos8安装Docker 1.更新一下yum [root@VM-24-9-centos ~]# yum -y update 2.安装containerd.io # centos8默认使用podm ...

  3. Centos8 Docker部署ElasticSearch集群

    ELK部署 部署ElasticSearch集群 1.拉取镜像及批量生成配置文件 # 拉取镜像 [root@VM-24-9-centos ~]# docker pull elasticsearch:7. ...

  4. 日志分析系统 - k8s部署ElasticSearch集群

    K8s部署ElasticSearch集群 1.前提准备工作 1.1 创建elastic的命名空间 namespace编排文件如下: elastic.namespace.yaml --- apiVers ...

  5. 使用Elasticsearch Operator快速部署Elasticsearch集群

    转载自:https://www.qikqiak.com/post/elastic-cloud-on-k8s/ 随着 kubernetes 的快速发展,很多应用都在往 kubernetes 上面迁移,现 ...

  6. 利用 docker 部署 elasticsearch 集群(单节点多实例)

    文章目录 1.环境介绍 2.拉取 `elasticserach` 镜像 3.创建 `elasticsearch` 数据目录 4.创建 `elasticsearch` 配置文件 5.配置JVM线程数量限 ...

  7. Ambari?自动部署Hadoop集群

    自动部署?Ambari Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目.就 Ambari 的作用来说,就是创建 ...

  8. centos7下部署elasticSearch集群

    OS:Centos7x虚拟机 1H2Gjdk:1.8elasticsearch:5.6.0 单节点配置请参考:centos7下elasticSearch安装配置 配置master节点 # 在配置文件的 ...

  9. 在kubernetes集群中部署ElasticSearch集群--ECK

    Elastic Cloud on Kubernetes (ECK) ---ECK是这个说法哈. 基本于k8s operator的官方实现. URL: https://www.elastic.co/gu ...

随机推荐

  1. 懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法

       懒人小工具2:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法    github地址:https://github.com/Jimmey-Jiang/J ...

  2. 该如何以正确的姿势插入SVG Sprites?

    大家好,我是苏南,今天要给大家分享的是SVG sprite(也叫雪碧图),所谓雪碧图,当然就不是我们常喝的雪碧饮料(Sprites)哦,哈哈- 当下流程的移动端,手机型号太多太多,今天工作项目中突然发 ...

  3. StoryLine3变量存储与跳转后台时的使用

    前言 公司项目原因,接触到storyline3(后面简称SL)课件制作工具,类似ppt,但是又多了互动.交互,且页面元素可添加触发器,触发器中可执行js代码. 1.官方教程 在SL中,会有“了解详情. ...

  4. Dijkstra及其堆优化

    朴素Dijkstra #include<bits/stdc++.h> using namespace std; const int inf=9999999; bool book[105]; ...

  5. NEWBE CRALWER 产品需求文档

    1.产品概述 本产品是学霸软件系统的爬虫部分,由NEWBE团队负责.主要任务是从网上爬取出相关数据后提供给C705组使用. 2.产品的发展经历 2.1 产品的发展经历 本产品从2014.10.29开始 ...

  6. 《Linux内核分析》第七周学习总结

    <Linux内核分析>第七周学习总结                         ——可执行程序的装载 姓名:王玮怡  学号:20135116 一.理论部分总结 (一)可执行程序的装载 ...

  7. 【实践报告】Linux实践三

    Linux实践——程序破解 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即“空指令”.执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP ...

  8. Daily Scrum- 12/28

    Meeting Minutes 讨论alpha 的feed back; 决定添加按钮向下的动作,作为feature; 完成了界面的微调,开始使用alpha.1进行feed back的收集 Burndo ...

  9. .Net反编译软件

    .Net反编译软件 https://www.cnblogs.com/xiandnc/p/10132491.html 一说起.net的反编译软件,大家首先想到的就是Reflector,ILSpy,dot ...

  10. Why yarn

    http://www.cnblogs.com/LeftNotEasy/archive/2012/02/18/why-yarn.html https://www.ibm.com/developerwor ...