草庐IT

docker 部署 ES集群

lj907722644 2024-04-05 原文

docker 部署 ES集群

1. 安装docker

在/opt/software 目录下新建docker目录,上传docker_build.sh脚本并执行

sh docker_build.sh
#!/bin/bash
yum -y install gcc
yum -y install gcc-c++
##验证gcc版本
gcc -v

##卸载老版本
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
##更新yum软件包索引
yum makecache fast
## 安装docker ce
yum -y install docker-ce
## 启动docker
systemctl start docker 
docker version
## 创建加速器
cd /etc/docker
if [ ! -f "$daemon.json" ]; then
  touch "$daemon.json"
else
  rm -rf daemon.json
  touch "$daemon.json"
fi
tee /etc/docker/daemon.json <<-'EOF'
{
	"registry-mirrors": ["输入自己的加速器地址"]
}
EOF
systemctl daemon-reload
systemctl restart docker

2. 创建es配置文件

在/opt/software/es/config下新建 elasticsearch.yml 文件并编辑

每台服务器注意区分节点名称及IP

#集群名称 所有节点名称一致
cluster.name: scan-es-clusters

#当前该节点的名称,每个节点不能重复scan-es-node-1,scan-es-node-2,scan-es-node-3...
node.name: scan-es-node-1

#当前该节点是不是有资格竞选主节点
node.master: true

#当前该节点是否存储数据
node.data: true

#设置索引分片数
#index.number_of_shards: 20

#设置索引副本数
#index.number_of_replicas: 1

#设置为公开访问
network.host: 0.0.0.0

#设置其它节点和该节点交互的本机器的ip地址
network.publish_host: 192.168.3.126

# 设置映射端口
http.port: 9200

# 内部节点之间沟通端口
transport.tcp.port: 9300

#支持跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"

#配置集群的主机地址
discovery.seed_hosts: ["192.168.3.126", "192.168.3.127", "192.168.3.128"]
#初始主节点,使用一组初始的符合主条件的节点引导集群
cluster.initial_master_nodes: ["scan-es-node-1", "scan-es-node-2", "scan-es-node-3"]
#节点等待响应的时间,默认值是30秒,增加这个值,从一定程度上会减少误判导致脑裂
discovery.zen.ping_timeout: 30s

#配置集群最少主节点数目,通常为 (可成为主节点的主机数目 / 2) + 1
discovery.zen.minimum_master_nodes: 2
#配置集群最少正常工作节点数
#gateway.recover_after_nodes: 2

#禁用交换内存,提升效率
bootstrap.memory_lock: true

# http传输内容的最大容量
http.max_content_length: 200mb

3. 服务器优化配置

  1. root用户修改/etc/security/limits.conf,添加如下,提高进程及资源使用限制上限
* soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000
* hard memlock unlimited
* soft memlock unlimited
  1. 执行命令使其生效
source /etc/profile
  1. 修改/etc/systemd/system.conf,添加如下
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
  1. 重启服务器,或执行下面两个命令使其配置生效
systemctl daemon-reload
systemctl daemon-reexec
  1. 修改虚拟内存最大映射数
    系统虚拟内存默认最大映射数为65530,无法满足ES系统要求,需要调整为262144以上。
vim /etc/sysctl.conf

#添加参数
vm.max_map_count = 262144
  1. 重新加载/etc/sysctl.conf配置
sysctl -p

4. 安装es 7.17.4

  1. 拉取镜像

    docker pull elasticsearch:7.17.4
    
  2. es 数据挂在的目录设置读写权限

    chmod -R 777 /data/elasticsearch/
    
  3. 启动es

    注意:我们启动参数设置的-Xms4g -Xmx4g,根据服务器内存实际情况调整。
    ● Xms 为jvm启动是分配的最大内存
    ● Xmx 为jvm运行过程分配的最大内存
    ● Xss 为jvm启动的每个线程分配的内存大小,jdk1.5+默认1M

    docker run -d -p 9200:9200 -p 9300:9300 \
    -e "ES_JAVA_OPTS=-Xms4g -Xmx4g" \
    -v /opt/software/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
    -v /opt/software/es/plugins:/usr/share/elasticsearch/plugins \
    -v /data/elasticsearch/data:/usr/share/elasticsearch/data \
    --name elasticsearch  \
    --restart=always \
    elasticsearch:7.17.4
    
  4. 使用docker ps -a 发现容器频繁启动,查看日志发现有报错,重启一下服务器

    docker ps -a
    
    docker logs -f elasticsearch
    
    ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
    bootstrap check failure [1] of [1]: memory locking requested for elasticsearch process but memory is not locked
    

5. 安装head插件(版本太老,不推荐)

  1. 拉取镜像

    docker pull mobz/elasticsearch-head:5-alpine
    
  2. 启动ElasticSearch-head

    docker run -d -p 9100:9100 \
    --name elasticsearch-head \
    --restart=always \
    mobz/elasticsearch-head:5-alpine
    
  3. ElasticSearch-Head请求Content-Type问题及连接服务器问题
    进入elasticsearch-head容器内部,修改vendor.js及app.js文件

docker exec -it 容器id /bin/sh

vi /usr/src/app/_site/vendor.js

6886行 contentType: "application/x-www-form-urlencoded 
   改成 contentType: "application/json;charset=UTF-8"
   
7573行 var inspectData = s.contentType === "application/x-www-form-urlencoded" &&` 
  改成 var inspectData = s.contentType === "application/json;charset=UTF-8" &&
  
  
vi /usr/src/app/_site/app.js
4328行 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
将localhost修改为对应es服务器的IP地址,例如192.168.3.126
  1. 退出并重启容器

    ctrl + p + q
    
    docker restart 容器id
    
  2. web访问

    http://192.168.3.126:9100/
    
    http://192.168.3.127:9100/
    
    http://192.168.3.128:9100/
    

6. 安装kibana插件

  1. ifconfig查看docker网卡IP,例如:172.17.0.1

    ifconfig
    
  2. 拉取镜像

    docker pull kibana:7.17.4
    
  3. 启动容器

    docker run -d -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://172.17.0.1:9200 --name kibana --restart=always kibana:7.17.4
    
  4. web访问

    http://192.168.3.126:5601
    
    http://192.168.3.127:5601
    
    http://192.168.3.128:5601
    

有关docker 部署 ES集群的更多相关文章

  1. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  2. ruby-on-rails - Ruby on Rails 可以部署在 Azure 网站上吗? - 2

    我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/

  3. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  4. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  5. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  6. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  7. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  8. Ruby,使用包含 TK GUI 的 ocra 部署一个 exe - 2

    Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答

  9. ruby-on-rails - NameError(未初始化常量 Unzipper::Zip)但仅在 Heroku 部署(Rails)上 - 2

    我有一个类unzipper.rb,它使用Rubyzip解压文件。在我的本地环境中,我可以成功解压缩文件,而无需使用require'zip'明确包含依赖项但是在Heroku上,我得到一个NameError(uninitializedconstantUnzipper::Zip)我只能通过使用明确的require来解决问题:为什么这在H​​eroku环境中是必需的,但在本地主机上却不是?我的印象是Rails自动需要所有gem。app/services/unzipper.rbrequire'zip'#OnlyrequiredforHeroku.Workslocallywithout!class

  10. ruby - Sinatra + Heroku + Datamapper 使用 dm-sqlite-adapter 部署问题 - 2

    出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。请注意,这发生在我打开任何URL时-而不是在gitpush本身期间。我构建了一个默认的Facebook应用程序。gem文件:source:gemcuttergem"foreman"gem"sinatra"gem"mogli"gem"json"gem"httparty"gem"thin"gem"data_mapper"gem"heroku"group:productiondogem"pg"gem"dm-postgres-adapter"endgroup:development,:t

随机推荐