Docker 构建 elasticsearch + kibana
elasticsearch
环境准备
修改系统配置
cat >> /etc/sysctl.conf <<-'EOF'
net.ipv4.ip_forward=1
vm.max_map_count=655360
EOF
重新加载配置
sysctl -p && systemctl restart network
下载ik分词器
本次部署使用的是7.10.1版本,可在此处直接下载,其它版本请在github自行下载。
将ik分词器解压后上传到/usr/local/ik
下
下载镜像
docker pull elasticsearch:7.10.1
部署单节点
准备ik分词器
将ik分词器解压后上传到用户目录下
mkdir -p /usr/local/es/plugins
cp -r /usr/local/ik /usr/local/es/plugins
创建容器
docker run -d \
-p 9200:9200 \
-p 9300:9300 \
--name=es \
--restart=always \
--privileged=true \
--network=my-network \
--network-alias=es-alias \
-e TZ=Asia/Shanghai \
-v /usr/local/es/data:/usr/share/elasticsearch/data \
-v /usr/local/es/logs:/usr/share/elasticsearch/logs \
-v /usr/local/es/plugins:/usr/share/elasticsearch/plugins \
-e "cluster.name=docker-es" \
-e "node.name=docker-node" \
-e "network.host=0.0.0.0" \
-e "transport.tcp.port=9300" \
-e "http.port=9200" \
-e "discovery.type=single-node" \
-e "http.cors.enabled=true" \
-e "http.cors.allow-origin=*" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "TAKE_FILE_OWNERSHIP=true" \
elasticsearch:7.10.1
- cluster.name:配置es集群名称
- node.name:节点名称
- network.host:绑定主机的ip地址,允许外网访问
- transport.tcp.port:设置集群节点之间交互的tcp端口
- http.port:设置http端口
- discovery.type:单机模式
- http.cors.enabled:开启cors跨域访问支持,默认为false
- http.cors.allow-origin:跨域访问允许的域名地址:允许所有域名
- ES_JAVA_OPTS=-Xms512m -Xmx512m:设置jvm占用内存大小
验证
访问目标ip加9200端口,出现es信息即部署成功
部署集群(一主二从)
准备ik分词器
mkdir -p /usr/local/es_cluster/node_1/plugins
cp -r /usr/local/ik /usr/local/es_cluster/node_1/plugins
mkdir -p /usr/local/es_cluster/node_2/plugins
cp -r /usr/local/ik /usr/local/es_cluster/node_2/plugins
mkdir -p /usr/local/es_cluster/node_3/plugins
cp -r /usr/local/ik /usr/local/es_cluster/node_3/plugins
创建容器
节点1
docker run -d \
-p 9201:9200 \
-p 9301:9300 \
--name=es_node_1 \
--restart=always \
--privileged=true \
--network=elk \
--network-alias=elk_node_1 \
-e TZ=Asia/Shanghai \
-v /usr/local/es_cluster/node_1/data:/usr/share/elasticsearch/data \
-v /usr/local/es_cluster/node_1/logs:/usr/share/elasticsearch/logs \
-v /usr/local/es_cluster/node_1/plugins:/usr/share/elasticsearch/plugins \
-e "cluster.name=docker-cluster" \
-e "node.name=node-1" \
-e "node.master=true" \
-e "node.data=true" \
-e "network.host=0.0.0.0" \
-e "transport.tcp.port=9300" \
-e "http.port=9200" \
-e "cluster.initial_master_nodes=node-1" \
-e "discovery.seed_hosts=172.24.102.95:9301,172.24.102.95.100:9302,172.24.102.95:9303" \
-e "gateway.auto_import_dangling_indices=true" \
-e "http.cors.enabled=true" \
-e "http.cors.allow-origin=*" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "TAKE_FILE_OWNERSHIP=true" \
elasticsearch:7.10.1
- cluster.name:配置es集群名称
- node.name:节点名称
- node.master:是否可以成为master节点
- node.data:是否允许该节点存储数据,默认开启
- network.host:绑定主机的ip地址,允许外网访问
- transport.tcp.port:设置集群节点之间交互的tcp端口
- http.port:设置http端口
- cluster.initial_master_nodes:设置哪些ES节点参与第一次master节点选举,其值可以是ES节点IP地址(如:192.168.1.100或192.168.1.100:9300),也可以是ES节点名称
- discovery.seed_hosts:设置当前节点与哪些ES节点建立连接,其值可以是127.0.0.1
- gateway.auto_import_dangling_indices:是否自动引入dangling索引,默认false
- http.cors.enabled:开启cors跨域访问支持,默认为false
- http.cors.allow-origin:跨域访问允许的域名地址:允许所有域名
- ES_JAVA_OPTS=-Xms512m -Xmx512m:设置jvm占用内存大小
- cluster.name:配置es集群名称
节点2
docker run -d \
-p 9202:9200 \
-p 9302:9300 \
--name=es_node_2 \
--restart=always \
--privileged=true \
--network=elk \
--network-alias=elk_node_2 \
-e TZ=Asia/Shanghai \
-v /usr/local/es_cluster/node_2/data:/usr/share/elasticsearch/data \
-v /usr/local/es_cluster/node_2/logs:/usr/share/elasticsearch/logs \
-v /usr/local/es_cluster/node_2/plugins:/usr/share/elasticsearch/plugins \
-e "cluster.name=docker-cluster" \
-e "node.name=node-2" \
-e "node.master=true" \
-e "node.data=true" \
-e "network.host=0.0.0.0" \
-e "transport.tcp.port=9300" \
-e "http.port=9200" \
-e "cluster.initial_master_nodes=node-1" \
-e "discovery.seed_hosts=172.24.102.95:9301,172.24.102.95.100:9302,172.24.102.95:9303" \
-e "gateway.auto_import_dangling_indices=true" \
-e "http.cors.enabled=true" \
-e "http.cors.allow-origin=*" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "TAKE_FILE_OWNERSHIP=true" \
elasticsearch:7.10.1
节点3
docker run -d \
-p 9203:9200 \
-p 9303:9300 \
--name=es_node_3 \
--restart=always \
--privileged=true \
--network=elk \
--network-alias=elk_node_2 \
-e TZ=Asia/Shanghai \
-v /usr/local/es_cluster/node_3/data:/usr/share/elasticsearch/data \
-v /usr/local/es_cluster/node_3/logs:/usr/share/elasticsearch/logs \
-v /usr/local/es_cluster/node_3/plugins:/usr/share/elasticsearch/plugins \
-e "cluster.name=docker-cluster" \
-e "node.name=node-3" \
-e "node.master=true" \
-e "node.data=true" \
-e "network.host=0.0.0.0" \
-e "transport.tcp.port=9300" \
-e "http.port=9200" \
-e "cluster.initial_master_nodes=node-1" \
-e "discovery.seed_hosts=172.24.102.95:9301,172.24.102.95.100:9302,172.24.102.95:9303" \
-e "gateway.auto_import_dangling_indices=true" \
-e "http.cors.enabled=true" \
-e "http.cors.allow-origin=*" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "TAKE_FILE_OWNERSHIP=true" \
elasticsearch:7.10.1
验证
访问es地址加端口号加/_cat/nodes
,查看集群信息。名字前带星号的是主节点。