一、集群介绍
系统环境:Centos7.5
服务器节点:
主机名 | IP |
hadoop03 | 192.168.1.153 |
hadoop04 | 192.168.1.154 |
hadoop05 | 192.168.1.155 |
二、环境准备
1、安装docker:略过
2、安装docker compose
1)使用官方推荐方式(此方式需服务器翻外网)
curl -L "https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
2)自行下载
由于服务器连不上Github,因此手动下载:https://github.com/docker/compose/releases/
选择docker-compose-linux-x86_64并下载,然后上传到fuwuq 并下载,然后上传到服务器,
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
3)修改系统参数
vim /etc/sysctl.conf
vm.max_map_count = 262144
# 使配置生效
sysctl -p
# 临时修改,系统重启后就失效
sysctl -w vm.max_map_count=262144
三、安装elasticsearch
1、新建目录
在三台服务器上新建elasticsearch用户:
mkdir -p /soft/elasticsearch/es/
cd /soft/elasticsearch/es/
mkdir conf
mkdir logs
mkdir data
2、创建docker-compose.yml文件
三个节点分别执行
cd /soft/elasticsearch/es
touch docker-compose.yml
1)hadoop03节点
vim docker-compose.yml
version: '1.0'
services:
es: # 服务名称
image: elasticsearch:7.3.0 # 使用的镜像
container_name: es01 # 容器名称
restart: always # 失败自动重启策略
environment:
- node.name=es01 # 节点名称,集群模式下每个节点名称唯一
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
- network.publish_host=192.168.1.153 # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
- discovery.seed_hosts=192.168.1.153,192.168.1.154,192.168.1.155 # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
- cluster.initial_master_nodes=es01 # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=es-cluster-prod # 集群名称,相同名称为一个集群, 三个es节点须一致
# - http.cors.enabled=true # 是否支持跨域,是:true // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
# - http.cors.allow-origin="*" # 表示支持所有域名 // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- node.master=true
- node.data=true
- http.port=9200
- transport.tcp.port=9300
- "ES_JAVA_OPTS=-Xms2g -Xmx2g" # 设置内存,如内存不足,可以尝试调低点
ulimits: # 栈内存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- ./conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 将容器中es的配置文件映射到本地,设置跨域, 否则head插件无法连接该节点
- ./data:/usr/share/elasticsearch/data # 存放数据的文件
- ./logs:/usr/share/elasticsearch/logs #存放日志文件
- ./plugins:/usr/share/elasticsearch/plugins #存放插件
- ./conf/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 #存放证书
ports:
- 9200:9200 # http端口,可以直接浏览器访问
- 9300:9300 # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
networks:
- elk
es-head:
image: tobias74/elasticsearch-head:6
container_name: es-head
restart: always
ports:
- 9100:9100
networks:
- elk
networks:
elk:
driver: bridge
2)hadoop04节点
docker-compose.yml
version: '1.0'
services:
es: # 服务名称
image: elasticsearch:7.3.0 # 使用的镜像
container_name: es02 # 容器名称
restart: always # 失败自动重启策略
environment:
- node.name=es02 # 节点名称,集群模式下每个节点名称唯一
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
- network.publish_host=192.168.1.154 # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
- discovery.seed_hosts=192.168.1.153,192.168.1.154,192.168.1.155 # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
- cluster.initial_master_nodes=192.168.1.153 # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=es-cluster-prod # 集群名称,相同名称为一个集群, 三个es节点须一致
# - http.cors.enabled=true # 是否支持跨域,是:true // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
# - http.cors.allow-origin="*" # 表示支持所有域名 // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- node.master=true
- node.data=true
- http.port=9200
- transport.tcp.port=9300
- "ES_JAVA_OPTS=-Xms2g -Xmx2g" # 设置内存,如内存不足,可以尝试调低点
ulimits: # 栈内存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- ./conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 将容器中es的配置文件映射到本地,设置跨域, 否则head插件无法连接该节点
- ./data:/usr/share/elasticsearch/data # 存放数据的文件
- ./logs:/usr/share/elasticsearch/logs #存放日志文件
- ./plugins:/usr/share/elasticsearch/plugins #存放插件
- ./conf/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 #存放证书
ports:
- 9200:9200 # http端口,可以直接浏览器访问
- 9300:9300 # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
3)hadoop05节点
docker-compose.yml
version: '1.0'
services:
es: # 服务名称
image: elasticsearch:7.3.0 # 使用的镜像
container_name: es03 # 容器名称
restart: always # 失败自动重启策略
environment:
- node.name=es03 # 节点名称,集群模式下每个节点名称唯一
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
- network.publish_host=192.168.1.155 # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
- discovery.seed_hosts=192.168.1.153,192.168.1.154,192.168.1.155 # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
- cluster.initial_master_nodes=192.168.1.153 # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=es-cluster-prod # 集群名称,相同名称为一个集群, 三个es节点须一致
# - http.cors.enabled=true # 是否支持跨域,是:true // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
# - http.cors.allow-origin="*" # 表示支持所有域名 // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- node.master=true
- node.data=true
- http.port=9200
- transport.tcp.port=9300
- "ES_JAVA_OPTS=-Xms2g -Xmx2g" # 设置内存,如内存不足,可以尝试调低点
ulimits: # 栈内存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- ./conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 将容器中es的配置文件映射到本地,设置跨域, 否则head插件无法连接该节点
- ./data:/usr/share/elasticsearch/data # 存放数据的文件
- ./logs:/usr/share/elasticsearch/logs #存放日志文件
- ./plugins:/usr/share/elasticsearch/plugins #存放插件
- ./conf/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 #存放证书
ports:
- 9200:9200 # http端口,可以直接浏览器访问
- 9300:9300 # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
这里要注意的是, network.publish_host这个属性必须指定为宿主机的IP;否则它默认使用的本机IP,也就是容器自己的IP,由于三个docker容器分别在不容的服务器,这样是互相发现不了的,会报这个错:master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster,以及这个错:javax.net.ssl.SSLHandshakeException: Insufficient buffer remaining for AEAD cipher fragment (2). Needs to be more than tag size (16)。由于第一个错只是warn,而第二个错误直接是异常比较明显,所以一直在去网上搜索第二个错误,碰巧的是第二个错误网上大部分说是openJDK的一个bug,以至于快把我整抑郁了;但其实第二个错误是第一个错误引起的。
3、配置elasticsearch.yml
vim es/conf/elasticsearch.yml
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,Content-Type
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
4、获取授权证书
由于开启了X-Pack安全认证,需要获取证书,这里的思路是临时创建一个es容器,在里面生成证书后,拷贝出来:
#生成es临时容器
docker run -dit --name=es elasticsearch:7.3.0 /bin/bash
#进入容器内
docker exec -it es /bin/bash
#生成证书的命令
./bin/elasticsearch-certutil ca
#一通回车后
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
#又一通回车后,退出容器
exit
# 复制出来
docker cp es:/usr/share/elasticsearch/elastic-certificates.p12 .
#移除临时容器
docker kill es
docker rm es
# 将证书移动到conf目录下
mv elastic-certificates.p12 /soft/elasticsearch/es/conf
# 将证书拷贝到另外两台机器
scp /soft/elasticsearch/es/conf/elastic-certificates.p12 hadoop04:/soft/elasticsearch/es/conf
scp /soft/elasticsearch/es/conf/elastic-certificates.p12 hadoop05:/soft/elasticsearch/es/conf
5、授权
如果绑定安装一个本地目录或文件,那么它必须是elasticsearch用户可读的(在容器内部默认使用elasticsearch用户运行)。此外,该用户必须对数据和日志目录具有写权限。文章来源:https://www.toymoban.com/news/detail-438652.html
chmod -R 777 es
6、启动/停止
# -d表示后台启动
docker-compose up -d
# 命令将停止运行的容器,但不会删除它们
docker-compose stop
# 停止运行的容器,并且会删除已停止的容器以及已创建的所有网络;添加-v标记以删除所有卷。这对于通过运行在环境中进行完全重置非常有用
docker-compose down -v
7、设置密码
在hadoop03节点执行:
docker exec -it es01 /bin/bash
./bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
建议密码设置为一样的,方便记忆。
8、es-head连接不上es
1)跨域问题
在elasticsearch.yml配置文件中有如下设置:
# 如果不设置这个,只能在本机访问
network.host: 0.0.0.0
# 处理跨域问题
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,Content-Type
2)401(Unauthorized)问题
这是因为加了X-Pack认证,需要用户名密码才可以访问:
http://192.168.1.153:9100/?auth_user=elastic&auth_password=Zstax@123
按照如下方式访问即可:
四、安装kibana
1、新建目录
mkdir /soft/elasticsearch/kibana
cd kibana
mkdir conf
mkdir data
2、配置docker-compose
cd /soft/elasticsearch/kibana
vim docker-compose.yml
version: '1.0'
services:
kibana:
image: docker.elastic.co/kibana/kibana:7.3.0
container_name: kibana
environment:
- SERVER_NAME=kibana
- ELASTICSEARCH_HOSTS=http://192.168.1.153:9200 #这个地址如果是阿里云、华为云等云服务器,则需要是对外IP,也就是用户电脑能访问到的IP
- XPACK_MONITORING_ENABLED=true
ports:
- 5601:5601
volumes:
- ./conf/kibana.yml:/usr/share/kibana/config/kibana.yml
- ./data:/usr/share/kibana/data
depends_on:
- es
networks:
- elk
networks:
elk:
driver: bridge
3、配置kibana.yml
vim /soft/elasticsearch/kibana/conf/kibana.yml
elasticsearch.username: "elastic"
elasticsearch.password: "Zstax@123"
xpack.monitoring.enabled: true
xpack.monitoring.ui.container.elasticsearch.enabled: true
server.host: "0.0.0.0"
i18n.locale: zh-CN #中文
#去除警告:Generating a random key for xpack.reporting.encryptionKey.
#To prevent pending reports from failing on restart, please set xpack.reporting.encryptionKey in kibana.ym
xpack.reporting.encryptionKey: "122333444455555666666777777788888888"
#去除警告:Generating a random key for xpack.security.encryptionKey.
#To prevent sessions from being invalidated on restart, please set xpack.security.encryptionKey in kibana.y
xpack.security.encryptionKey: "122333444455555666666777777788888888"
4、授权
如果绑定安装一个本地目录或文件,那么它必须是elasticsearch用户可读的(在容器内部默认使用elasticsearch用户运行)。此外,该用户必须对数据和日志目录具有写权限。
chmod -R 777 kibana
5、启动/停止文章来源地址https://www.toymoban.com/news/detail-438652.html
# -d表示后台启动
docker-compose up -d
# 命令将停止运行的容器,但不会删除它们
docker-compose stop
# 停止运行的容器,并且会删除已停止的容器以及已创建的所有网络;添加-v标记以删除所有卷。这对于通过运行在环境中进行完全重置非常有用
docker-compose down -v
到了这里,关于docker compose搭建elasticsearch7集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!