docker搭建elasticsearch集群

一、前言
目前除了数据库服务一般装在宿主机之外(保持高可用),其他的java应用理论上都可以使用docker容器来发布,当然也可以使用其他微服务技术,本篇就是搭建docker版本的elasticsearch集群简易指南。
二、准备工作
1、两台网络可通的centos 7 机器(同一内网最好)
2、已经安装好docker
安装方法多种,或者直接yum install docker,为了加速下载速度,请修改docker镜像库地址为国内地址,建议修改为网易镜像。方法如下:

vim /etc/docker/daemon.json

插入或者修改为如下内容(vi语法不再介绍)

{
 "registry-mirrors" : [
   "https://hub-mirror.c.163.com"
 ]
}

重启docker服务

systemctl restart docker

三、安装步骤
1、脚本准备和执行
主节点脚本示例

docker run -d --restart unless-stopped --net=host --name="elasticsearch"   -e "path.data=/data/elkdata/elasticsearch/data"   -e "network.host=0.0.0.0"   -v /data/elkdata/elasticsearch/data:/usr/share/elasticsearch/data --privileged=true   -e "TZ=Asia/Shanghai" elasticsearch:2.4.5

参数说明:
-d Docker在后台运行;
--restart unless-stopped 若容器当掉,Docker自动启动容器;
--net=host 网络运行为宿主机模式
--name="elasticsearch" 容器名称
-e "path.data=/data/elkdata/elasticsearch/data" Elasticsearch的数据目录 也可以改其他
-e "network.host=0.0.0.0" 提供网络访问
-v /data/elkdata/elasticsearch/data:/usr/share/elasticsearch/data 将日志数据卷挂载到宿主机硬盘上
--privileged=true 配合-v使用, 给docker内的用户以root权限,否则容器无法填写挂在宿主机的目录内文件。
-e "TZ=Asia/Shanghai" 使用中国时间,不然容器的时间不是中国时间
elasticsearch:2.4.5 使用2.4.5版本
tips:
-e "key=value" //docker启动是指定环境变量, 企图给elasticsearch.yml配置文件初始化(效果自己判断)
-v 宿主机绝对路径目录:容器内目录 //把容器内目录指向宿主机对应目录

静待安装结束后,可以执行 docker ps 看下是否已经启动,


image.png

如果有其他有问题 还可以执行docker logs elasticsearch 查看应用启动情况


image.png

2、安装完成后修改配置文件elasticsearch.yml
elasticsearch.yml 是elasticsearch最重要的配置文件,声明机器的名称 节点属性 发布地址等等重要信息,
两个elasticsearch应用,通过修改elasticsearch便能够变成集群共同对外提供服务。
修改方法:
进入docker 应用内部

docker exec -it elasticsearch /bin/bash

进入(cd ls命令在docker内部可以使用)到config目录下 找到elasticsearch.yml文件 目录为 /usr/share/elasticsearch/config (要记下这个目录,替换时要指明目录地址)

root@ecs-x-large-2-linux-20200225090856:/usr/share/elasticsearch/config# pwd
/usr/share/elasticsearch/config

修改 elasticsearch.yml 内容
据我实验,centos 里的docker容器内部无法使用vi命令 ,我们用文件替换的方式来修改docker elasticsearch应用内部的这个文件elasticsearch.yml
先在宿主机建个elasticsearch.yml 文件 找个目录 比如我的临时目录/data/ricky

[root@ecs-x-large-2-linux-20200225090856 ricky]# pwd
/data/ricky

建个空白的配置文件

vi elasticsearch.yml 

添加或者修改如下的配置内容(master节点配置)
注意:参数名称和值的冒号之后必须有空格(yml语法)

transport.tcp.port: 9300
cluster.name: elasticsearch
node.name: 192.168.0.122
node.master: true
node.data: true
network.host: 0.0.0.0
network.publish_host: 192.168.0.122
discovery.zen.ping.unicast.hosts: ["192.168.0.122:9300", "192.168.0.11:9300"]

采用替换文件的方式修改yml配置(docker cp 命令进行文件替换)

docker cp elasticsearch.yml  elasticsearch:/usr/share/elasticsearch/config

重启elasticsearch 应用

docker restart elasticsearch

参数说明

transport.tcp.port: 9300 // TCP访问端口 默认就是9300
cluster.name: elasticsearch // 集群名称 重要 寻址使用
node.name: 192.168.0.122 //节点名称 一般用本机ip
node.master: true // 是否为主节点,为true表示可以升级为主节点
node.data: true //是否为数据节点
network.host: 0.0.0.0 // 网络访问
network.publish_host: 192.168.0.122 //发布地址
discovery.zen.ping.unicast.hosts: ["192.168.0.122:9300", "192.168.0.11:9300"] //集群重要配置,集群搜索的ip地址目录,第一个就是主节点。
配置说明参考地址:note.master 和note.data的不同组合 可以引申不同的集群策略 此处不再延伸 有兴趣搜索
https://blog.csdn.net/yjclsx/article/details/81319454
https://blog.csdn.net/zmx729618/article/details/80363875
https://www.elastic.co/guide/cn/elasticsearch/guide/current/important-configuration-changes.html
3、检查修改后的启动情况
参考查询集群状态语法
https://blog.csdn.net/u014078154/article/details/80094276
//www.greatytc.com/p/252d97a94200

curl localhost:9200/_cluster/health?pretty

当然此时因为还没装另一个节点,节点数量肯定是1个了


image.png

4、安装另一个节点(data节点 ip为192.168.0.11的这个) 具体方法参照1、2点
节点安装脚本 这些声明可以和主节点一致。

docker run -d --restart unless-stopped --net=host --name="elasticsearch"   -e "path.data=/data/elkdata/elasticsearch/data"   -e "network.host=0.0.0.0"   -v /data/elkdata/elasticsearch/data:/usr/share/elasticsearch/data --privileged=true   -e "TZ=Asia/Shanghai" elasticsearch:2.4.5

安装结束 一样的要修改yml
节点的yml配置文件(重要):

cluster.name: elasticsearch
node.name: 192.168.0.11
node.master: false
node.data: true
network.host: 0.0.0.0

一样替换命令(目录一样)

docker cp elasticsearch.yml  elasticsearch:/usr/share/elasticsearch/config

重启elasticsearch 应用

docker restart elasticsearch

重启节点elasticsearch 应用

docker restart elasticsearch

再次检查状态

curl localhost:9200/_cluster/health?pretty

会发现 不管在哪台查看 都可以看到完整的集群状态信息(两个节点) 说明已经搭建完成


image.png
curl localhost:9200/_cat/nodes?v
image.png

查看master节点(如果集群不成功 在子节点处访问不会有输出 内部会报找不到master的错误)
curl localhost:9200/_cat/master?v

四、其他问题
如果没有两台应用都启动正常 ,但是集群显示不在一起,检查配置,重启应用。
docker restart elasticsearch

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容