ELK docker 安装elasticsearch 集群之一
在安装中,感觉有点困难,因es的版本6与7还是挺有区别的。
非docker版本在之前有写过一篇文章,介绍安装es集群。 https://www.cnblogs.com/a393060727/p/12111542.html
1、docker软件下载相关镜像
下载软件,全部统一一个版本:7.1.1。
// 文件收集logstash # docker pull logstash:7.1.1 // 存储,搜索引擎 elasticsearch # docker pull elasticsearch:7.1.1 // 视图管理 # docker pull kibana:7.1.1 // 日志搬运工 Filebeat # docker pull filebeat:7.1.1 |
确认下载完成
# docker images |
1、docker安装相关软件
3.1、创建自定义网络network
在所有安装的软件,都使用该自定义网络,用于连接到连接到同一网络的其他服务。
# docker network create esnetwork // 查看网络有哪些 # docker network ls // 删除网络 # docker network rm 网络ID // 查看一个网络的信息 # docker network inspect ec876e3251a7 |
3.2、调高JVM线程数限制数量
// 编辑文件,增加内容 # vi /etc/sysctl.conf // 增加如下内容 vm.max_map_count=262144
// 让配置生效 # sysctl -p |
注:这一步是为了防止启动容器时,报出如下错误: bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] |
1、挂在文件配置
elasticsearch.yml配置说明:
参数 |
说明 |
cluster.name |
集群名称,相同名称为一个集群 |
node.name |
节点名称,集群模式下每个节点名称唯一 |
node.master |
当前节点是否可以被选举为master节点,是:true、否:false |
node.data |
当前节点是否用于存储数据,是:true、否:false |
path.data |
索引数据存放的位置 |
path.logs |
日志文件存放的位置 |
bootstrap.memory_lock |
需求锁住物理内存,是:true、否:false |
bootstrap.system_call_filter |
SecComp检测,是:true、否:false |
network.host |
监听地址,用于访问该es |
network.publish_host |
可设置成内网ip,用于集群内各机器间通信 |
http.port |
es对外提供的http端口,默认 9200 |
discovery.seed_hosts |
es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点 |
cluster.initial_master_nodes |
es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master |
http.cors.enabled |
是否支持跨域,是:true,在使用head插件时需要此配置 |
http.cors.allow-origin |
"*" 表示支持所有域名 |
4.1 elasitsearch 高可用配置
现固定一个目录是用用于保存ES集群数据、日志、配置文件的。
目前我使用的是:
// 新建目录 # mkdir -p /home/soft/ES/ // 配置文件目录 # mkdir -p /home/soft/ES/config // 数据目录 # mkdir -p /home/soft/ES/data // 日志目录 # mkdir -p /home/soft/ES/logs
|
4.2.0 创建IK分词器目录
在宿主机下载分词器,找到相应版本7.1.1分词器。
因为是集群,而为了分词器之间互不影响,所以建立文件夹不同的文件夹,将7.1下载的zip包复制到这些目录下,解压,即可。
在与config同级目录下新建目录 # mkdir -p /home/soft/ES/plugins/plugins04 # mkdir -p /home/soft/ES/plugins/plugins05 # mkdir -p /home/soft/ES/plugins/plugins06 3个目录都这样操作再讲压缩包复制到这些目录内,进入目录解压 # cd /home/soft/ES/plugins/plugins04 # unzip elasticsearch-analysis-ik-7.1.1.zip 缩短目录名称 # mv elasticsearch-analysis-ik-7.1.1 ik |
4.2.1创建数据存储挂载目录在ES目录下data创建目录用于挂载数据
# mkdir -p /home/soft/ES/data/data04 # mkdir -p /home/soft/ES/data/data05 # mkdir -p /home/soft/ES/data/data06 |
4.2.2创建数据存储挂载目录在ES目录下logs创建目录用于挂载日志
# mkdir -p /home/soft/ES/logs/logs04 # mkdir -p/home/soft/ES/logs/logs05 # mkdir -p /home/soft/ES/logs/logs06 |
4.2.3 配置文件信息
就是各个容器节点的配置文件,挂载时指定
节点es04.yml
# vi es04.yml
cluster.name: esinner node.name: es04 node.master: true node.data: true bootstrap.memory_lock: false bootstrap.system_call_filter: false network.host: 172.19.0.14 http.port: 9200 transport.tcp.port: 9300 http.cors.enabled: true http.cors.allow-origin: "*" discovery.seed_hosts: ["172.19.0.14","172.19.0.15","172.19.0.16"] cluster.initial_master_nodes: ["172.19.0.14"] discovery.zen.minimum_master_nodes: 2 |
节点es05.yml
# vi es05.yml
cluster.name: esinner node.name: es05 node.master: true node.data: true bootstrap.memory_lock: false bootstrap.system_call_filter: false network.host: 172.19.0.15 http.port: 9200 transport.tcp.port: 9300 http.cors.enabled: true http.cors.allow-origin: "*" discovery.seed_hosts: ["172.19.0.14","172.19.0.15","172.19.0.16"] cluster.initial_master_nodes: ["172.19.0.14"] discovery.zen.minimum_master_nodes: 2 |
节点es06.yml
# vi es07.yml
cluster.name: esinner node.name: es06 node.master: true node.data: true bootstrap.memory_lock: false bootstrap.system_call_filter: false network.host: 172.19.0.16 http.port: 9200 transport.tcp.port: 9300 http.cors.enabled: true http.cors.allow-origin: "*" discovery.seed_hosts: ["172.19.0.14","172.19.0.15","172.19.0.16"] cluster.initial_master_nodes: ["172.19.0.14"] discovery.zen.minimum_master_nodes: 2 |
4.2.4、安装elasticsearch
将端口映射出来,通过参数 -p。
将es的端口原样暴露出来,设置容器固定IP,配置文件使用config文件夹下的,将es插件(IK分词器)、es日志、数据信息保存到宿主机。
docker run --restart=always -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ docker run --restart=always -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ docker run --restart=always -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ |
测试
# curl http://192.168.89.138:9204 # curl http://192.168.89.138:9205 # curl http://192.168.89.138:9206 返回结果: [root@localhost data]# curl http://192.168.89.138:9204 { "name" : "es04", "cluster_name" : "esinner", "cluster_uuid" : "QLo293zCRO-syPbY4kJCwg", "version" : { "number" : "7.1.1", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "7a013de", "build_date" : "2019-05-23T14:04:00.380842Z", "build_snapshot" : false, "lucene_version" : "8.0.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } |
验证集群是否OK
# curl http://192.168.89.137:9200/_cat/nodes?pretty 访问任意的节点都会得到如下结果: [root@localhost data]# curl http://192.168.89.138:9206/_cat/nodes?pretty 172.19.0.16 74 93 5 0.03 0.07 0.11 mdi * es06 172.19.0.15 60 93 5 0.03 0.07 0.11 mdi - es05 172.19.0.14 55 93 5 0.03 0.07 0.11 mdi - es04 |
查看集群相应:
{ "error" : { "root_cause" : [ { "type" : "master_not_discovered_exception", "reason" : null } ], "type" : "master_not_discovered_exception", "reason" : null }, "status" : 503 } |
解决:
配置错误。初始化节点要配置成一样的。都指向同一个机器就可以了。 配置信息增加节点,指定初始化默认master节点: cluster.initial_master_nodes |
集群测试:
访问任意一个节点都是
如果关闭掉其中的master节点。集群会自动选举出现的节点作为主节点。如图。
再次恢复节点后,节点将作为从节点加入进来。
至此,集群成功。