- 基于docker-compose.yml安装ElasticSearch集群(单机两个节点)
ElasticSearch是基于java的,而新版本需要支持LTS,所以需要安装jdk9以上版本,这里选择11
docker pull openjdk:11
- vm.max_map_count内核设置,需要至少为262144用于生产
sysctl -w vm.max_map_count=262144
- 新建目录创建docker-compose.yml文件
注意,docker-compose.yml中network1是提前创建好的网络名称,具体操作指令如下
docker network create -d bridge --subnet 100.0.0.0/16 --gateway 10.0.0.1 network1
docker-compose.yml文件内容如下
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.1@sha256:2dcd2f31e246a8b13995ba24922da2edc3d88e65532ff301d0b92cb1be358af5
container_name: es01
environment:
- node.name=es01
- discovery.seed_hosts=es02
- cluster.initial_master_nodes=es01,es02
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
# volumes:
# - $HOME/data/docker/es1/data:/usr/share/elasticsearch/data
# - $HOME/data/docker/es1/config:/usr/share/elasticsearch/config
# - $HOME/data/docker/es1/logs:/usr/share/elasticsearch/logs
# - $HOME/data/docker/es1/plugins:/usr/share/elasticsearch/plugins
ports:
- 9200:9200
networks:
default:
ipv4_address: 100.0.0.109
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.1@sha256:2dcd2f31e246a8b13995ba24922da2edc3d88e65532ff301d0b92cb1be358af5
container_name: es02
environment:
- node.name=es02
- discovery.seed_hosts=es01
- cluster.initial_master_nodes=es01,es02
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
# volumes:
# - $HOME/data/docker/es2/data:/usr/share/elasticsearch/data
# - $HOME/data/docker/es2/config:/usr/share/elasticsearch/config
# - $HOME/data/docker/es2/logs:/usr/share/elasticsearch/logs
# - $HOME/data/docker/es2/plugins:/usr/share/elasticsearch/plugins
networks:
default:
ipv4_address: 100.0.0.110
networks:
default:
external:
name: network1
-
执行指令docker-compose up -d
-
复制配置文件到挂载目录
docker cp es01:/usr/share/elasticsearch/ $HOME/data/docker/es1/
docker cp es02:/usr/share/elasticsearch/ $HOME/data/docker/es2/
如果复制完多了一层elasticsearch路径,将elasticsearch下所有文件移动到同级目录,示例mv elasticsearch/* .
-
停止并删除启动的容器
docker stop es01 es02 && docker rm es01 es02 -
修改docker-compose.yml文件(打开注释,也就是挂在目录部分)
-
重新执行docker-compose up -d
如果不需要安装x-pach,则忽略后续步骤,此时elasticsearch已经可以正常使用了
- 进入容器内部生成证书
docker exec -it es01 bash
/usr/share/elasticsearch/bin/elasticsearch-certutil ca
一路按回车,不建议输入密码,防止出错
执行完成后会生成elastic-stack-ca.p12文件
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca /usr/share/elasticsearch/elastic-stack-ca.p12
一路按回车,不建议输入密码,防止出错
会生成新的文件elastic-certificates.p12
退出容器exit
10. 复制生成的证书文件到挂载目录
docker cp es01:/usr/share/elasticsearch/elastic-stack-ca.p12 $HOME/data/docker/es1/config/
docker cp es01:/usr/share/elasticsearch/elastic-certificates.p12 $HOME/data/docker/es1/config/
- 拷贝证书到各个节点配置文件目录下
cp $HOME/data/docker/es1/config/*.p12 $HOME/data/docker/es2/config/
- 分别给证书文件授权
chmod 777 elastic-*.p12 - 进入到各个节点挂载目录,
cd $HOME/data/docker/es1/config
- 修改es1下的elasticsearch.yml文件,主要是为安装x-pach做准备
添加内容:
# 是否支持跨域,默认为false http.cors.enabled: true # 表示这个节点是否可以充当主节点 node.master: true # 是否充当数据节点 node.data: true # 这条配置表示开启xpack认证机制,使用密码登录 xpack.security.enabled: true xpack.security.transport.ssl.enabled: true 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
- 分别重启服务
docker restart es01 es02
- 分别进入容器中设置密码
docker exec -it es01 bash
cd /usr/share/elasticsearch/bin
- 执行
./elasticsearch-setup-passwords interactive
根据提示设置密码
默认账号elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
密码为上述步骤设置的
- 重启服务
docker restart es01 es02安装kibana(和es保持一致)
- 拉取同版本镜像
docker pull kibana:7.14.1
- 新建目录/root/data/docker/kibana/config用来保存kibana配置文件
mkdir -p /root/data/docker/kibana/config
- 新建kibana.yml配置文件,输入内容如下
#Kibana的映射端口 server.port: 5601 #网关地址 server.host: "0.0.0.0" #Kibana实例对外展示的名称 server.name: "kibana-100.0.0.101" #Elasticsearch的集群地址,也就是说所有的集群IP elasticsearch.hosts: ["http://100.0.0.109:9200","http://100.0.0.110:9200"] #设置页面语言,中文使用zh-CN,英文使用en i18n.locale: "zh-CN" xpack.monitoring.ui.container.elasticsearch.enabled: true elasticsearch.username: "kibana_system" elasticsearch.password: "上面设置时输入的密码"
- 启动kibana
docker run -d -p 5601:5601 --network network1 --ip 100.0.0.111 -v $HOME/data/docker/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml --name kibana kibana:7.14.1



