Docker部署Elasticsearch集群并开启安全设置_kubeshere elasticsearch xpack.security.transport.s-程序员宅基地

技术标签: Linux 系统服务运维  Elasticsearch  Docker  elasticsearch  搜索引擎  elasticsearch集群  docker  

一:准备资料

  • 部署了docker的centos
  • 两或者三台服务器部署elasticsearch
  • ip1、ip2

二:docker安装、Elasticsearch安装

1.1安装docker


[root@ecs-b3bf-0225795 ~]# yum install docker

[root@ecs-b3bf-0225795 ~]# systemctl start docker

1.2ES需要开启文件读取的配置

[root@ecs-b3bf-0225795 ~]# vi /etc/sysctl.conf

#加入这一行配置
vm.max_map_count = 655350

[root@ecs-b3bf-0225795 ~]# sysctl -p

1.3安装Elasticsearch

[root@ecs-b3bf-0225795 ~]# mkdir -p /home/docker/elasticsearch

[root@ecs-b3bf-0225795 ~]# cd /home/docker/elasticsearch/

[root@ecs-b3bf-0225795 elasticsearch]# docker pull docker.io/library/elasticsearch:7.6.2

安装完成后----先别启动
创建好我们后期的所有数据存储、插件、日志、配置目录
[root@ecs-b3bf-0225795 elasticsearch]# mkdir data
[root@ecs-b3bf-0225795 elasticsearch]# mkdir logs
[root@ecs-b3bf-0225795 elasticsearch]# mkdir -p plugins/ik
[root@ecs-b3bf-0225795 elasticsearch]# mkdir config
[root@ecs-b3bf-0225795 elasticsearch]# 
[root@ecs-b3bf-0225795 elasticsearch]# chmod -R 775 data
[root@ecs-b3bf-0225795 elasticsearch]# chmod -R 775 logs
[root@ecs-b3bf-0225795 elasticsearch]# chmod -R 775 plugins
[root@ecs-b3bf-0225795 elasticsearch]# chmod -R 775 config

安装ik分词器

[root@ecs-b3bf-0225795 plugins]# cd plugins/ik
[root@ecs-b3bf-0225795 ik]# wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
[root@ecs-b3bf-0225795 ik]# unzip elasticsearch-analysis-ik-7.6.2.zip
[root@ecs-b3bf-0225795 ik]# 
[root@ecs-b3bf-0225795 ik]# 

将配置文件copy出来,放在到挂在路径


[root@ecs-b3bf-0225795 elasticsearch]# cd /home/docker/elasticsearch/
[root@ecs-b3bf-0225795 elasticsearch]# 
[root@ecs-b3bf-0225795 elasticsearch]# docker run -p 9200:9200 -p 9300:9300 \
--privileged=true --name es7 \
-e ES_JAVA_OPTS="-Xms4096m -Xmx4096m" \
-v /home/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /home/docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /home/docker/elasticsearch/logs:/usr/share/elasticsearch/logs \
-d elasticsearch:7.6.2
[root@ecs-b3bf-0225795 elasticsearch]# 
[root@ecs-b3bf-0225795 elasticsearch]# 
[root@ecs-b3bf-0225795 elasticsearch]# docker cp -a es7:/usr/share/elasticsearch/config/ /home/docker/elasticsearch/
[root@ecs-b3bf-0225795 elasticsearch]# docker kill es7
[root@ecs-b3bf-0225795 elasticsearch]# docker rm es7

将我们es启动系统内的配置文件cp到我们挂载的物理路径

elasticsearch.yml

#集群名称
cluster.name: material-es
#当前该节点的名称
node.name: node-1
#是不是有资格竞选主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 3
#给当前节点自定义属性(可以省略)
#node.attr.rack: r1
#数据存档位置
path.data: /usr/share/elasticsearch/data
#日志存放位置
path.logs: /usr/share/elasticsearch/log
#是否开启时锁定内存(默认为是)
#bootstrap.memory_lock: true
#设置网关地址,我是被这个坑死了,这个地址我原先填写了自己的实际物理IP地址,
#然后启动一直报无效的IP地址,无法注入9300端口,这里只需要填写0.0.0.0
network.host: 0.0.0.0
#设置其它结点和该结点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址,设置当前物理机地址,
#如果是docker安装节点的IP将会是配置的IP而不是docker网管ip
network.publish_host: 175.6.3.132
#设置映射端口
http.port: 9200
#内部节点之间沟通端口
transport.tcp.port: 9300
#集群发现默认值为127.0.0.1:9300,如果要在其他主机上形成包含节点的群集,如果搭建集群则需要填写
#es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点,也就是说把所有的节点都写上
discovery.seed_hosts: ["175.6.3.132:9300","175.6.3.133:9300","175.6.3.134:9300"]
#当你在搭建集群的时候,选出合格的节点集群,有些人说的太官方了,
#其实就是,让你选择比较好的几个节点,在你节点启动时,在这些节点中选一个做领导者,
#如果你不设置呢,elasticsearch就会自己选举,这里我们把三个节点都写上
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点
#简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用,
gateway.recover_after_nodes: 2
#删除索引是是否需要显示其名称,默认为显示
#action.destructive_requires_name: true
# 是否支持跨域,默认为false
http.cors.enabled: true
# 当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。比如只允许本地地址。/https?:\/\/localhost(:[0-9]+)?/
http.cors.allow-origin: "*"

替换好新的配置文件

启动命令-每台机器都执行同样的指令
[root@ecs-b3bf-0225795 elasticsearch]# docker run -p 9200:9200 -p 9300:9300 \
--privileged=true --name es7 \
-e ES_JAVA_OPTS="-Xms4096m -Xmx4096m" \
-v /home/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /home/docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /home/docker/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /home/docker/elasticsearch/config:/usr/share/elasticsearch/config \
-d elasticsearch:7.6.2

三:安全设置

安全性处理:基于上述已经在运行的容器之上,在主机上执行此运行方式即可
获取p12文件 打开安全设置

3.1生成 p12文件

[root@ecs-b3bf-0225795 elasticsearch]# cd /
[root@ecs-b3bf-0225795 ~]# docker run -dit --name=es elasticsearch:7.6.2 /bin/bash
f87b0e87cbe6cc5a1c53e6e343914072369641cef216815ca0d4f18e50a9da5e

[root@ecs-b3bf-0225795 ~]# docker exec -it es /bin/bash
[root@ecs-b3bf-0225795 elasticsearch]# 进入我们临时的es容器内去执行命令
[root@ecs-b3bf-0225795 elasticsearch]# bin/elasticsearch-certutil ca
[root@ecs-b3bf-0225795 elasticsearch]# 一路回车操作
[root@ecs-b3bf-0225795 elasticsearch]# 一路回车操作
[root@ecs-b3bf-0225795 elasticsearch]# bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
[root@ecs-b3bf-0225795 elasticsearch]# 一路回车操作
[root@ecs-b3bf-0225795 elasticsearch]# 一路回车操作
[root@ecs-b3bf-0225795 elasticsearch]# 生成完成后
[root@ecs-b3bf-0225795 elasticsearch]# 
[root@ecs-b3bf-0225795 elasticsearch]# ls
-rw------- 1 root root 3451 Mar  1 17:42 elastic-certificates.p12
...
[root@ecs-b3bf-0225795 elasticsearch]# 退出当前容器
[root@ecs-b3bf-0225795 elasticsearch]# exit; 
exit
[root@ecs-b3bf-0225795 ~]# 复制我们生成的p12到物理路径
[root@ecs-b3bf-0225795 ~]# docker cp -a es:/usr/share/elasticsearch/elastic-certificates.p12 /home/docker/elasticsearch/config/
[root@ecs-b3bf-0225795 ~]# 
[root@ecs-b3bf-0225795 ~]# docker kill es
es
[root@ecs-b3bf-0225795 ~]# docker rm es
es
[root@ecs-b3bf-0225795 ~]# 停止es集群所有节点
[root@ecs-b3bf-0225795 ~]# docker kill es7
[root@ecs-b3bf-0225795 ~]# docker rm es7

elasticsearch.yml 开启安全配置


# 打开安全设置
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.type: PKCS12
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.type: PKCS12
xpack.security.audit.enabled: true

将新文件配置文件,elasticsearch.yml 、elastic-certificates.p12  推送到每个节点的目录:

/home/docker/elasticsearch/config

并授权所有用户可读

[root@ecs-b3bf-0225795 ~]# 授权所有用户可读
[root@ecs-b3bf-0225795 ~]# chmod +r /home/docker/elasticsearch/config/elastic-certificates.p12

3.2生成Es的访问密码

切记:集群三个节点之间的9200,9300 一定要都可以互通,自动生成密码:需要记录下来,需要开启9200,9300端口
[root@ecs-b3bf-0225795 ~]# 启动我们的集群
[root@ecs-b3bf-0225795 ~]# docker run -p 9200:9200 -p 9300:9300 \
--privileged=true --name es7 \
-e ES_JAVA_OPTS="-Xms4096m -Xmx4096m" \
-v /home/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /home/docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /home/docker/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /home/docker/elasticsearch/config:/usr/share/elasticsearch/config \
-v /home/docker/elasticsearch/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 \
-d elasticsearch:7.6.2
[root@ecs-b3bf-0225795 ~]# 
[root@ecs-b3bf-0225795 ~]# 进入当前启动节点es7的容器内
[root@ecs-b3bf-0225795 ~]# docker exec -it es7 /bin/bash
[root@ac0fa780b8db elasticsearch]#
[root@ac0fa780b8db elasticsearch]#
[root@ac0fa780b8db elasticsearch]# ./bin/elasticsearch-setup-passwords auto
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y


Changed password for user apm_system
PASSWORD apm_system = I5kYgua12jyhTWgGE6DoR

Changed password for user kibana
PASSWORD kibana = QehLVOFFTmoVSlK2121n4hU

Changed password for user logstash_system
PASSWORD logstash_system = e0woYM550en2121kSmfCph0
......

Changed password for user elastic
PASSWORD elastic = qRJvpTYcvslk1WhfvRfHE
如果你是单机启动,配置文件内只需要有这些就够了
[root@iZ8vb3lp570ckrtrhp6f42Z config]# cat elasticsearch.yml 
cluster.name: "material-es"
network.host: 0.0.0.0
#当前该节点的名称
node.name: "node-1"

# 打开安全设置
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.type: PKCS12
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.type: PKCS12
xpack.security.audit.enabled: true

启动时需要加个参数,告知非集群启动
[root@ecs-b3bf-0225795 ~]# docker run -p 9200:9200 -p 9300:9300 \
--privileged=true --name es7 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms4096m -Xmx4096m" \
-v /home/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /home/docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /home/docker/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /home/docker/elasticsearch/config:/usr/share/elasticsearch/config \
-v /home/docker/elasticsearch/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 \
-d elasticsearch:7.6.2

我们需要的是:elastic 这个用户

备注:生成的账户与密码会互传到子节点,子节点不需要去执行此操作

 有效参考资料:

CentOS ES7.6集群搭建

CentOS ES7.6.2 Docker安装部署

CentOS ES7.6集群搭建Elasticsearch安全策略-开启密码账号访问CentOS ES7.6集群搭建

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yexiaomodemo/article/details/123221627

智能推荐

创建自己的Visual Studio插件仓库_marketplace 自定义插件仓库-程序员宅基地

文章浏览阅读546次。文章目录使用插件的问题如何建立私有插件仓库下载插件安装文件创建插件仓库描述Atom.xml添加私有插件仓库下载安装使用插件的问题目前在使用Visual Studio 2019时,看到很多优秀的插件;推荐插件;但是Vs2019在线安装时,非常慢,经常安装失败;当然,可以去官方插件市场 下载后,再安装;但是对于插件选择和安装这类不是经常操作的事,过一段时间就会忘了;是不是可以建立自己的插件仓库呢?把平时好用的插件收集起来,放在一起,下次安装时,就不漏装,同时也可以共享给其它同事;如何建立私有插件仓库下载_marketplace 自定义插件仓库

11g安装-程序员宅基地

文章浏览阅读292次。硬件:内存 1GB 硬盘空间>18GB 我下载的是DVD版本的OS,在虚拟机软件中先将OS载入到了光驱中. 在Linux中,一定要注意大小写.特别是命令. 首先在虚拟机软件中安装CentOS,在安装时, 1 SWAP分区我设置了2048MB即内存的2倍,其它空间都装载到了//"///"根目录,共计两个分区 2 配置好静态IP地址 3 选择//"自定义安装//",安装必需的软件包//"GNOME图形界面//" ,Developments Tools和Le

jsf+hibernate+spring学习-程序员宅基地

文章浏览阅读807次。jsf负责视图层,完成了struts的的功能;spring应该是个代理,如同抽屉一样;hibernate封装数据操作,也就是所谓的持久层。理解比较肤浅:步骤:1添加jsf,spring,hibernate适配器 ,在web。xml添加spring代理,jsf配置由IDE自动完成。2配置hibernate,根据数据库生成xml,bean,dao,bean完成基础set、get操作;dao封装了C_jsf+hibernate+spring

用Python解决高数所有计算题--sympy求解极限、积分、微分、二元一次方程等-程序员宅基地

文章浏览阅读2.3w次,点赞19次,收藏152次。IT派 - {技术青年圈}持续关注互联网、区块链、人工智能领域sympy是什么?Sympy是一个数学符号库(sym代表了symbol,符号),包括了积分,微分方程等各种数..._python sympy求解 sin(x 2 ) = √ 3 /2 .

「死磕Java并发编程」说说Java Atomic 原子类的实现原理_java atomic原理-程序员宅基地

文章浏览阅读1w次,点赞31次,收藏132次。<!-- TOC -->- [线程安全真的是线程的安全吗?](#线程安全真的是线程的安全吗)- [什么是 Atomic?](#什么是-atomic)- [实现一个计数器](#实现一个计数器)- [AtomicInteger 源码分析](#atomicinteger-源码分析)- [AtomicLong 和 LongAdder 谁更牛?](#atomiclong-和-longadder-谁更牛)- [总结](#总结)<!-- /TOC -->.._java atomic原理

mysql的语法错误集合_mysql语句中的语法错误有哪些-程序员宅基地

文章浏览阅读1.3k次。1.Every derived table must have its own alias(sql语法错误)Every derived table must have its own alias:每一个派生出来的表都必须有一个自己的别名下面是我执行的错误的sql语句:select *from port as p join (select *from node as n where n.nodeNa..._mysql语句中的语法错误有哪些

随便推点

【Oracle】sum(..) over(..)用法分析_oracle sum over-程序员宅基地

文章浏览阅读1.2w次,点赞3次,收藏25次。今天再看sql优化详解的时候,提到了一个sum(..) over(..)于是自己实验并在网上找了相关的一些文章来看下面创建一张表:create sequence xulieincrement by 1start with 1maxvalue 9999999999;create table test(id number(20),name varchar2(20),sal number(38......_oracle sum over

设备scan和驱动入门安装_mkespn驱动地址-程序员宅基地

文章浏览阅读4.3k次。一 驱动入门实例VS2012编译调试WDM驱动(KdPrint无调试信息 debugview win7无调试信息)对于WDM驱动 VS2012有向导可以新建WDM项目 如图 这点说明不用自己配置 文件目录 C/C++ 选项 LINK 选项 等一系列的参数 比以前方便了不少新建以后是空项目 放入《windows驱动开发技术详解》中第一章的WDM代码_mkespn驱动地址

电子计算机名词缩写_芯片clock from copper 是什么-程序员宅基地

文章浏览阅读4k次。1、CPU 3DNow!(3D no waiting,无须等待的3D处理) AAM(AMD Analyst Meeting,AMD分析家会议) ABP(Advanced Branch Prediction,高级分支预测) ACG(Aggressive Clock Gating,主动时钟选择) AIS(Alternate Instruction Set,交替指令集) ALAT(advanced lo_芯片clock from copper 是什么

The Non-Inverting Amplifier Output Resistance by Adrian S. Nastase [转载]-程序员宅基地

文章浏览阅读258次。Source Address:http://masteringelectronicsdesign.com/the-non-inverting-amplifier-output-resistance/It is customary to consider the output resistance of the non-inverting amplifier as being zer..._"op-aep gain gain of the \"non-inverting"

python循环执行_python循环-程序员宅基地

文章浏览阅读262次。循环在以前的例子里,有些时候我们需要多次执行相同的任务,我们使用一个计数器来检查代码需要执行的次数。这个技术被称为循环。知识点while 循环print() 函数的 end 参数列表索引切片for 循环range() 函数continue 关键字for 循环中的 else 关键字实验步骤1. while 循环while 语句的语法如下:while condition:statement1state..._x-x/2+x/3-x/4…..x/50循环程序

高性能的移动用户体验是这样炼成的!-程序员宅基地

文章浏览阅读3.6k次。在人际关系中,良好的第一印象是非常重要的,人们愿意在彼此身上寻求信任与诚实,并期望在接下来的经历中重现和增强这些好感。同样的道理也体现在移动应用或互联网产品中。在打造良好的品牌信誉及其与终端用户之间持久信任关系的过程中,“设计”扮演着极其重要的角色。  在用户的期望中,移动应用应该是准确、友好和高效的。然而,移动设备自身的局限性确实为产品的设计带来了不少挑战。要打造值得信赖的移动应用用户体

推荐文章

热门文章

相关标签