一、单节点部署过程
1. 拉取镜像
docker pull elasticsearch:7.10.1
2. 创建目录
mkdir -p /opt/docker/elasticsearch/config /opt/docker/elasticsearch/data /opt/docker/elasticsearch/plugins
3. 赋予数据权限
chmod -R +777 /opt/docker/elasticsearch
4. 编辑es配置
echo "http.host: 0.0.0.0" >> /opt/docker/elasticsearch/config/elasticsearch.yml
如果使用8.0以上版本镜像启动失败(因为默认启用了xpack):
echo "xpack.security.enabled: false" >> /opt/docker/elasticsearch/config/elasticsearch.yml
5. 创建容器
docker run --restart=always -it --name elasticsearch --privileged=true -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -v /opt/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /opt/docker/elasticsearch/data:/usr/share/elasticsearch/data -v /opt/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.10.1
elasticsearch.yml是挂载的配置文件
data是挂载的数据,
plugins是es的插件,如ik,而数据挂载需要权限,需要设置data文件的权限为可读可写,需要下边的指令
chmod -R 777 /opt/elasticsearch/data
-e "discovery.type=single-node" 设置为单节点
特别注意:
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \ 测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了ES
6. 开放端口
firewall-cmd --permanent --zone=public --add-port=9200/tcp
firewall-cmd --permanent --zone=public --add-port=9300/tcp
#kibana的
firewall-cmd --permanent --zone=public --add-port=5601/tcp
firewall-cmd --reload
firewall-cmd --list-port
二、集群部署过程
1. 准备工作
#拉取镜像
docker pull elasticsearch:7.10.1
#创建专用网络
docker network create es-net
#为每个节点创建数据目录
mkdir -p /opt/docker/elasticsearch/node1/config /opt/docker/elasticsearch/node1/data /opt/docker/elasticsearch/node1/plugins
mkdir -p /opt/docker/elasticsearch/node2/config /opt/docker/elasticsearch/node2/data /opt/docker/elasticsearch/node2/plugins
mkdir -p /opt/docker/elasticsearch/node3/config /opt/docker/elasticsearch/node3/data /opt/docker/elasticsearch/node3/plugins
2. 节点配置
每个节点的config目录下创建elasticsearch.yml,这是展示es-node1的配置:
#es集群名
cluster.name: my-es
#节点名称,不同节点不同名es-node1,es-node2,es-node3,即docker container——name
node.name: es-node1
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
#默认true
#bootstrap.memory_lock: true
#为避免麻烦直接0.0.0.0
network.bind_host: 0.0.0.0
#当前节点ip
network.publish_host: 你的ip
#设置映射端口
http.port: 9200
#内部节点之间沟通端口
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
# node写你机器的ip或者节点名都行
discovery.seed_hosts: ["es-node1:9300","es-node2:9301","es-node3:9302"]
#没有zookeeper,所以主节点都是随机选举的
cluster.initial_master_nodes: ["es-node1", "es-node2","es-node3"]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点
#z这个数量一般是总机器数量-1,我3台所以是2
gateway.recover_after_nodes: 2
#删除索引是是否需要显示其名称,默认为显示
#action.destructive_requires_name: true
3. 权限设置
chmod -R 777 /opt/docker/elasticsearch
4. 端口开放
firewall-cmd --permanent --zone=public --add-port=9200/tcp
firewall-cmd --permanent --zone=public --add-port=9300/tcp
firewall-cmd --permanent --zone=public --add-port=9201/tcp
firewall-cmd --permanent --zone=public --add-port=9301/tcp
firewall-cmd --permanent --zone=public --add-port=9202/tcp
firewall-cmd --permanent --zone=public --add-port=9302/tcp
firewall-cmd --reload
5. 逐个运行容器,每个容器启动后调整内核参数
docker run --restart=always -it --name es-node1 --privileged=true -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -v /opt/docker/elasticsearch/node1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /opt/docker/elasticsearch/node1/data:/usr/share/elasticsearch/data -v /opt/docker/elasticsearch/node1/plugins:/usr/share/elasticsearch/plugins --net es-net -d elasticsearch:7.10.1
docker exec -it es-node1 bash -c "echo 'vm.max_map_count=262144'>>/etc/sysctl.conf && sysctl -p"
docker run --restart=always -it --name es-node2 --privileged=true -p 9201:9201 -p 9301:9301 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -v /opt/docker/elasticsearch/node2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /opt/docker/elasticsearch/node2/data:/usr/share/elasticsearch/data -v /opt/docker/elasticsearch/node2/plugins:/usr/share/elasticsearch/plugins --net es-net -d elasticsearch:7.10.1
docker exec -it es-node2 bash -c "echo 'vm.max_map_count=262144'>>/etc/sysctl.conf && sysctl -p"
docker run --restart=always -it --name es-node3 --privileged=true -p 9202:9202 -p 9302:9302 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -v /opt/docker/elasticsearch/node3/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /opt/docker/elasticsearch/node3/data:/usr/share/elasticsearch/data -v /opt/docker/elasticsearch/node3/plugins:/usr/share/elasticsearch/plugins --net es-net -d elasticsearch:7.10.1
docker exec -it es-node3 bash -c "echo 'vm.max_map_count=262144'>>/etc/sysctl.conf && sysctl -p"
6. 测试
# 测试是否启动成功
curl http://127.0.0.1:9200
# 查看集群健康
curl http://127.0.0.1:9200/_cluster/health
三、kibana安装
1. 直接启动kibana容器
docker pull kibana:7.10.1
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.191.128:9200 -p 5601:5601 -d kibana:7.10.1
2. 进入容器修改相应内容(测试地址不通时尝试)
server.port: 5601
server.host: 0.0.0.0
elasticsearch.hosts: ["http://192.168.191.128:9200","http://192.168.191.128:9201","http://192.168.191.128:9202"]
i18n.locale: "Zh-CN"
3. 测试
然后访问页面
http://自己的IP地址:5601/app/kibana
firewall-cmd --permanent --zone=public --add-port=5601/tcp
firewall-cmd --list-port