安装elasticsearch
- 基于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 100.0.0.1 network1
docker-compose.yml文件内容如下
version: '2.2'
services:
es01:
image: elasticsearch:7.14.1
container_name: es01
environment:
- node.name=es01
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- cluster.name=es-docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms4G -Xmx4G"
ulimits:
memlock:
soft: -1
hard: -1
# volumes:
# - /data/docker/es/es1/data:/usr/share/elasticsearch/data
# - /data/docker/es/es1/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
# - /data/docker/es/es1/logs:/usr/share/elasticsearch/logs
# - /data/docker/es/es1/plugins:/usr/share/elasticsearch/plugins
# - /data/docker/es/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
ports:
- 9200:9200
networks:
default:
ipv4_address: 100.0.0.100
es02:
image: elasticsearch:7.14.1
container_name: es02
environment:
- node.name=es02
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- cluster.name=es-docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms4G -Xmx4G"
ulimits:
memlock:
soft: -1
hard: -1
# volumes:
# - /data/docker/es/es2/data:/usr/share/elasticsearch/data
# - /data/docker/es/es2/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
# - /data/docker/es/es2/logs:/usr/share/elasticsearch/logs
# - /data/docker/es/es2/plugins:/usr/share/elasticsearch/plugins
# - /data/docker/es/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
ports:
- 9201:9200
networks:
default:
ipv4_address: 100.0.0.101
es03:
image: elasticsearch:7.14.1
container_name: es03
environment:
- node.name=es03
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- cluster.name=es-docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms4G -Xmx4G"
ulimits:
memlock:
soft: -1
hard: -1
# volumes:
# - /data/docker/es/es3/data:/usr/share/elasticsearch/data
# - /data/docker/es/es3/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
# - /data/docker/es/es3/logs:/usr/share/elasticsearch/logs
# - /data/docker/es/es3/plugins:/usr/share/elasticsearch/plugins
# - /data/docker/es/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
ports:
- 9202:9200
networks:
default:
ipv4_address: 100.0.0.102
networks:
default:
external:
name: network1
- 执行指令
docker-compose up -d
- 分别复制配置文件到对应的挂载目录
5.0mkdir /data/docker/es/{es1,es2,es3}
5.1 es1docker cp es01:/usr/share/elasticsearch/data/ /data/docker/es/es1/data/
docker cp es01:/usr/share/elasticsearch/logs/ /data/docker/es/es1/logs/
docker cp es01:/usr/share/elasticsearch/plugins/ /data/docker/es/es1/plugins/
docker cp es01:/usr/share/elasticsearch/config/elasticsearch.yml /data/docker/es/es1/elasticsearch.yml
5.2 es2docker cp es02:/usr/share/elasticsearch/data/ /data/docker/es/es2/data/
docker cp es02:/usr/share/elasticsearch/logs/ /data/docker/es/es2/logs/
docker cp es02:/usr/share/elasticsearch/plugins/ /data/docker/es/es2/plugins/
docker cp es02:/usr/share/elasticsearch/config/elasticsearch.yml /data/docker/es/es2/elasticsearch.yml
5.3 es3docker cp es03:/usr/share/elasticsearch/data/ /data/docker/es/es3/data/
docker cp es03:/usr/share/elasticsearch/logs/ /data/docker/es/es3/logs/
docker cp es03:/usr/share/elasticsearch/plugins/ /data/docker/es/es3/plugins/
docker cp es03:/usr/share/elasticsearch/config/elasticsearch.yml /data/docker/es/es3/elasticsearch.yml
如果不需要安装x-pach,则打开docker-compose.yml注释,停止并删除已启动的es01,es02,es03,再次运行docker-compose up -d,此时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
- 复制生成的证书文件到挂载目录
docker cp es01:/usr/share/elasticsearch/elastic-stack-ca.p12 /data/docker/es/
docker cp es01:/usr/share/elasticsearch/elastic-certificates.p12 /data/docker/es/
- 给挂载目录的证书文件授权
chmod 777 elastic-*.p12
- 停止并删除启动的容器
docker stop es01 es02 es03 && docker rm es01 es02 es03
- 修改docker-compose.yml文件(打开注释,也就是挂载目录部分)
-
分别
进入到各个节点挂载目录
cd /data/docker/es1/
- 修改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-compose up -d
- 进入容器中设置密码(任意一台设置即可)
docker exec -it es01 bash
cd /usr/share/elasticsearch/bin
- 设置登录密码
自定义密码则使用./elasticsearch-setup-passwords interactive
自动生成密码则使用 ./elasticsearch-setup-passwords auto注意保存密码
./elasticsearch-setup-passwords interactive
根据提示设置密码
默认账号elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
密码为上述步骤设置的
- 重启服务
docker restart es01 es02 es03
自动生成的密码忘记处理办法
- 进入容器内部
docker exec -it es01 bash
- 创建一个超级用户 vick (名称任意,不要和默认重复即可),按照提示输入密码
./bin/elasticsearch-users useradd vick -r superuser
- 使用创建的超级账号来修改密码
curl -XPUT -u vick:密码 http://localhost:9200/_xpack/security/user/elastic/_password -H "Content-Type: application/json" -d '
{
"password": "新密码"
}'
安装kibana(和es保持一致)
- 拉取同版本镜像
docker pull kibana:7.14.1
- 新建目录/root/data/docker/kibana/config用来保存kibana配置文件
mkdir -p /data/docker/kibana/config
- 新建kibana.yml配置文件,输入内容如下
#Kibana的映射端口
server.port: 5601
#网关地址
server.host: "0.0.0.0"
#Kibana实例对外展示的名称
server.name: "kibana"
#Elasticsearch的集群地址,也就是说所有的集群IP
elasticsearch.hosts: ["http://100.0.0.100:9200","http://100.0.0.101:9201","http://100.0.0.102:9202"]
#设置页面语言,中文使用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.103 -v /data/docker/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml --name kibana kibana:7.14.1
安装IK分词器
原因就不多说了,默认分词器对中文不友好
- 下载IK分词器下载地址
- 上传到挂载的插件目录【对应上述:/data/docker/es1/plugins/】下,scp elasticsearch-analysis-ik.zip root@xxxx.xxx.xx:/xxx/x/
- 解压
unzip elasticsearch-analysis-ik.zip
将解压内容放在plugins/ik/下 - es2、es3对应也复制一份
cp -r ./plugins/ik ../es2/plugins/
- 重启服务
docker restart es01 es02 es03