#!/bin/bashinstall_es(){#配置信息HOSTNAME=`hostname`#所有节点NODE_1=node-1NODE_2=node-2NODE_3=node-3NODE_1_IP=10.0.0.21NODE_2_IP=10.0.0.22NODE_3_IP=10.0.0.23#启动用户明码es_userES_USER_PASSWORD=123cd /etc    cat > sysctl.conf <<EOFvm.max_map_count=655350EOFsysctl -pcd /usr/lib/sysctl.d/    cat >> 00-system.conf <<EOFnet.ipv4.ip_forward=1EOFsystemctl restart networkulimit -ncd /etc/security/cat > limits.conf <<EOF* hard nofile 65536* soft nofile 65536* hard nproc 65536* soft nproc 65536EOFsysctl -p#创立es用户(ELK都用自建用户启动)useradd es_user#批改es用户明码echo "${ES_USER_PASSWORD}" | passwd --stdin es_user#同一目录mkdir -p {/data/software,/data/modules}cd /data/software/file="elasticsearch-7.16.1-linux-x86_64.tar.gz"if [ ! -f $file ]; then    yum install -y wget && wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.1-linux-x86_64.tar.gz    #exit 0fi#解压elasticsearch安装包cd /data/softwaretar -zxvf elasticsearch-7.16.1-linux-x86_64.tar.gz -C /data/modules/cd /data/modulesmv elasticsearch-7.16.1 escd /data/modules/es/configcat > elasticsearch.yml << EOF#node-1配置文件# 集群名称cluster.name: my-application# 集群节点名称node.name: ${HOSTNAME}# ES默认 只容许本地 127.0.0.1 和[::1] 拜访# 也能够设置成0.0.0.0 容许所有IP主机拜访# 如果不配置就默认认为是开发者模式,如果配置不正确会写入正告然而能正确运行# 如果配置了就会认为进入了生产环境, 如果配置不正确就会降级为异样,ES无奈正确启动。network.host: 0.0.0.0# 默认ES节点端口9200,如果是伪集群(在一台服务器上搭建集群),须要批改。http.port: 9200# 设置数据寄存门路,倡议批改这个门路到ES的装置文件夹里面,防止ES降级误删掉这个文件夹path.data: /data/modules/es/data/# 设置日志寄存门路,倡议批改这个门路到ES的装置文件夹里面,防止ES降级误删掉这个文件夹path.logs: /data/modules/es/log/# 发现其余节点主机配置 这里配置的是ES所在服务器的公网IP地址discovery.seed_hosts: ["${NODE_1_IP}:9300","${NODE_2_IP}:9300","${NODE_3_IP}:9300"]# 哪些节点能够被选举为主节点配置cluster.initial_master_nodes: ["${NODE_1}", "${NODE_2}","${NODE_3}"]EOF#配置内置JAVAcd /data/modules/es/bincat >> elasticsearch << EOFexport JAVA_HOME=/data/modules/es/jdkexport PATH=$JAVA_HOME/bin:$PATHEOFsleep 1s# 授予执行权限,modules文件夹权限受权给es_user 用户chmod u+x  /data/modules/es/binchown -R es_user:es_user /data/modules/es# 将ES数据存储文件夹权限受权给es_user用户mkdir -p /data/modules/es/datachown -R es_user /data/modules/es/data# 将ES 日志存储文件夹权限受权给es_user用户mkdir -p /data/modules/es/log/chown -R es_user /data/modules/es/log/#端口firewall-cmd --zone=public --add-port=9200/tcp --permanent;firewall-cmd --zone=public --add-port=9300/tcp --permanent;firewall-cmd --zone=public --add-service=http --permanent;firewall-cmd --zone=public --add-service=https --permanent;firewall-cmd --reload;firewall-cmd --list-all;#注册服务项cd /usr/lib/systemd/system/cat > es.service << "EOF"[Unit]Description=esAfter=network.target[Service]Type=simpleUser=es_userExecStart=/data/modules/es/bin/elasticsearchLimitMEMLOCK=infinityPrivateTmp=true[Install]WantedBy=multi-user.targetEOFsystemctl enable es.servicesystemctl start es.servicesystemctl status es.service#手动启动#.bin/elasticsearch -d -p pid }install_esdocker_kibana(){#配置信息HOSTNAME=`hostname`#所有节点sudo yum install net-tools -yIP=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"|grep "10."`NODE_1=node-1NODE_2=node-2NODE_3=node-3MASTER_1_IP=10.0.0.11NODE_1_IP=10.0.0.21NODE_2_IP=10.0.0.22NODE_3_IP=10.0.0.23#启动用户明码es_userES_USER_PASSWORD=123cat > docker-compose.yml << EOFversion: '3'services:  elasticsearch:                    # 服务名称    image: elasticsearch:7.16.1      # 应用的镜像    container_name: elasticsearch   # 容器名称    restart: always                 # 失败主动重启策略    environment:                                          - node.name=${HOSTNAME}                   # 节点名称,集群模式下每个节点名称惟一      - network.publish_host=${IP}  # 用于集群内各机器间通信,其余机器拜访本机器的es服务      - network.host=0.0.0.0     # 设置绑定的ip地址,能够是ipv4或ipv6的,默认为0.0.0.0      # es7.x 之后新增的配置,写入候选主节点的设施地址,在开启服务后能够被选为主节点      - discovery.seed_hosts=${NODE_1_IP},${NODE_2_IP},${NODE_3_IP}              # es7.x 之后新增的配置,初始化一个新的集群时须要此配置来选举master      - cluster.initial_master_nodes=${NODE_1_IP},${NODE_2_IP},${NODE_3_IP}       - cluster.name=es-cluster     # 集群名称,雷同名称为一个集群      - bootstrap.memory_lock=true  # 内存替换的选项,官网倡议为true      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"    # 设置内存    ulimits:                   memlock:        soft: -1              hard: -1    volumes:      - /data/modules/elk/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml  # 将容器中es的配置文件映射到本地,设置跨域, 否则head插件无奈连贯该节点      - esdata:/usr/share/elasticsearch/data  # 存放数据的文件, 留神:这里的esdata为 顶级volumes下的一项。    ports:      - 9200:9200    # http端口      - 9300:9300    # es节点间接交互的端口,非httpvolumes:  esdata:    driver: local    # 会生成一个对应的目录和文件,如何查看,上面有阐明。EOF}docker_kibana