centos7.6下使用Docker安装Elasticsearch8.2.0 测试一

1、Elasticsearch 8.0

        Elasticsearch 也可以作为 Docker 镜像使用。www.docker.elastic.co上提供了所有已发布的 Docker 映像和标签的 列表。源文件位于 Github中。

        免费和付费版本的区别

Subscriptions | Elastic Stack Products & Support | ElasticSee subscription levels, pricing, and tiered features for on-prem deployments of the Elastic Stack (Elasticsearch Kibana, Beats, and Logstash), Elastic Cloud, and Elastic Cloud Enterprise.https://www.elastic.co/subscriptions        从 Elasticsearch 8.0 开始,默认启用安全性。启用安全性后,Elastic Stack 安全功能需要对传输网络层进行 TLS 加密,否则您的集群将无法启动。

2、安装docker

 关于docker的安装及更换源可以参考下面地址

Docker安装及更换源centos下Docker安装及更换源https://skydance.blog.csdn.net/article/details/109525871

3、拉取elasticsearch

        使用如下命令进行拉取,一定要更换docker国内的源,否则就没头了

docker pull elasticsearch:8.2.0

4、使用 Docker 启动单节点集群

        如果您在 Docker 容器中启动单节点 Elasticsearch 集群,则会自动为您启用和配置安全性。首次启动 Elasticsearch 时,会自动进行以下安全配置:

        为传输层和 HTTP 层生成 证书和密钥。
        传输层安全 (TLS) 配置设置被写入 elasticsearch.yml.
        为elastic用户生成密码。
        为 Kibana 生成一个注册令牌。

(1)创建一个新的 docker 网络

docker network create elastic

(2)编写配置文件

        这里也可以使用命令直接运行,但是后面还需要增加多个节点,另外因为个人习惯问题,不喜欢动态创建集群,所以使用配置文件的形式。

        配置文件的位置可以自己定义,我这里放在了/home/conf/elasticsearch_conf/es01.yml

cluster.name: elasticsearch-cluster    #集群名称
node.name: es-node1                    #当前节点名称
network.bind_host: 0.0.0.0
network.publish_host: 192.168.173.2    #修改为docker的宿主机ip
http.port: 9201                        #这个是容器内部的,所以不用改
transport.tcp.port: 9301               #这个是容器内部的,所以不用改
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.seed_hosts: ["192.168.173.2:9301","192.168.173.2:9302","192.168.173.2:9303"]
discovery.zen.minimum_master_nodes: 2
indices.query.bool.max_clause_count: 10240
ingest.geoip.downloader.enabled: false    #如果运行时下载geoip失败,则可以考虑添加这行

(3)运行节点

        这里重新指定了名称,网络使用上面创建的网络,配置文件使用了上面的配置文件,但是是用交互式方式运行的,因为第一次运行会打印出相关密码等。

        命令里面值得注意的点是运行内存大小(一定要指定,否则很可能会占满你的内存。

        另外data、plugins的配置按自己的路径配置,我这里没有配置,使用docker默认路径。配置文件我也暂时没有进行映射,直接使用本机的地址,但是都不妨碍安装测试。

docker run --name es01 --net elastic -p 9201:9200 -p 9301:9300 -v /home/conf/elasticsearch_conf/es01.yml -it -e ES_JAVA_OPTS="-Xms512m -Xmx512m" elasticsearch:8.2.0

        看日志,如果最终没有error级别的错误,运行就没有问题,在运行的过程中可以看到如下打印。

        可以看到用户elastic对应的密码。

        CA整数的sha256指纹。

        配置Kibana需要用到的token(30分钟有效),过期后可以使用命令再次生成

        加入集群需要用到的token(30分钟有效),过期后可以使用命令再次生成

---------------------------------------------------------------------------------------------------------------------------------------------------
-> Elasticsearch security features have been automatically configured!
-> Authentication is enabled and cluster connections are encrypted.

->  Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  uSvGasEStFuqwTGa1akG

->  HTTP CA certificate SHA-256 fingerprint:
  bb89c6cc0bd691c59076876ea8d8f6bcd9674d2353ff562cf906c8a3348fd737

->  Configure Kibana to use this cluster:
* Run Kibana and click the configuration link in the terminal when Kibana starts.
* Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjIuMCIsImFkciI6WyIxNzIuMTguMC4yOjkyMDAiXSwiZmdyIjoiYmI4OWM2Y2MwYmQ2OTFjNTkwNzY4NzZlYThkOGY2YmNkOTY3NGQyMzUzZmY1NjJjZjkwNmM4YTMzNDhmZDczNyIsImtleSI6IkdOODhzNEFCdEpPT2I3NkJWc3BPOjRMMlJ4V25fUnktcDBBUjJOTTlCUVEifQ==

-> Configure other nodes to join this cluster:
* Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjIuMCIsImFkciI6WyIxNzIuMTguMC4yOjkyMDAiXSwiZmdyIjoiYmI4OWM2Y2MwYmQ2OTFjNTkwNzY4NzZlYThkOGY2YmNkOTY3NGQyMzUzZmY1NjJjZjkwNmM4YTMzNDhmZDczNyIsImtleSI6Ikd0ODhzNEFCdEpPT2I3NkJWc3BkOmUxV0ROWmZMVE9HdjFlYzNPb0xYS1EifQ==

  If you're running in Docker, copy the enrollment token and run:
  `docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.2.0`
---------------------------------------------------------------------------------------------------------------------------------------------------

(4)访问节点

        我们再宿主机上运行如下命令进行访问,以确认节点运行正常

curl --cacert http_ca.crt -u elastic https://localhost:9201

        下面命令中的http_ca.crt的位置,通常再这个位置

./var/lib/docker/overlay2/**********/diff/usr/share/elasticsearch/config/certs/http_ca.crt

        可以使用搜索命令进行搜索一下

find . -name http_ca.crt

        然后重新运行命令

curl --cacert ./var/lib/docker/overlay2/c9e5bcc2028807d70fa6792d92c55898e7cc11a9214e65645d2dd565d058ca3b/diff/usr/share/elasticsearch/config/certs/http_ca.crt -u elastic https://localhost:9200

        之后会让我们输入密码,找到上面首次运行的时候给的密码,并输入,如果证书和密码都正确的话会输出如下内容。

{
  "name" : "a68a9f5e832c",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "kXorjBbMS1qneUpEPn7wwg",
  "version" : {
    "number" : "8.2.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "b174af62e8dd9f4ac4d25875e9381ffe2b9282c5",
    "build_date" : "2022-04-20T10:35:10.180408517Z",
    "build_snapshot" : false,
    "lucene_version" : "9.1.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

5、注册其他节点

(1)创建一个新的配置文件

         和第一个节点配置差不多,修改了name和两个端口。

cluster.name: elasticsearch-cluster
node.name: es-node2
network.bind_host: 0.0.0.0
network.publish_host: 192.168.137.2  #修改为docker的宿主机ip
http.port: 9202   #这个是容器内部的,所以不用改
transport.tcp.port: 9302   #这个是容器内部的,所以不用改
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.seed_hosts: ["192.168.137.2:9301","192.168.137.2:9302","192.168.137.2:9303"]
discovery.zen.minimum_master_nodes: 2
indices.query.bool.max_clause_count: 10240
ingest.geoip.downloader.enabled: false

(2)运行并注册新的节点

        我们使用如下命令运行第二个节点,其中值得注意的就是token的设置,这个就是上面第一个节点运行时得到的Configure other nodes to join this cluster对应的token。

docker run --name es02 --net elastic -p 9202:9200 -p 9302:9300 -e ENROLLMENT_TOKEN="eyJ2ZXIiOiI4LjIuMCIsImFkciI6WyIxNzIuMTguMC4yOjkyMDAiXSwiZmdyIjoiNTBhMzk2YzlhOGM2MGI4YmNlNGIxOTM0NDg2MTg1NmI1MzA4ZWNhOGE1YzZmM2EwNzYwYjZjYjU1Y2RjMWEwZiIsImtleSI6IlJycFR0NEFCSHpmM0ZsNUVnSGZyOnpTYnpxWmhCUm42bHllMzlvV19IWGcifQ==" -v /home/conf/elasticsearch_conf/es02.yml -e ES_JAVA_OPTS="-Xms512m -Xmx512m" elasticsearch:8.2.0

        如果这个token已经过期了,则使用以下命令生成一个新的,然后替换到上面的命令中,再次运行。

# 进入容器
docker exec -it es01 /bin/bash
# 生成令牌 令牌由30分钟有效期
bin/elasticsearch-create-enrollment-token --s node

6、配置Kibana

 (1)拉取Kibana

docker pull kibana:8.2.0

 (2)创建配置

        这里暂时配置几个基本属性

server.host: "192.168.137.2"
server.port: 5601
server.basePath: ""
server.rewriteBasePath: false
server.maxPayloadBytes: 1048576

        完整配置列表请查看

Configure Kibana | Kibana Guide [8.2] | ElasticA reference of the reporting settings administrators configure in kibana.yml.https://www.elastic.co/guide/en/kibana/8.2/settings.html#server-publicBaseUrl

(3)运行并访问kibana

         使用下面的命令运行

docker run --name kibana --net elastic -v /home/conf/kibana_conf/kibana.yml -p 5601:5601 kibana:8.2.0

        打开浏览器,访问地址,请改成自己的ip

http://192.168.137.2:5601/

        会进入到如下界面

(4)配置Elastic

        上面首次运行es的那两个token,其中一个就是给这个地方用的,说是有30分钟有效期,如果已经过期了(会提示:Generate a new enrollment token or configure manually.),可以使用如下命令重新获得。

# 进入容器
docker exec -it es01 /bin/bash
# 生成令牌 令牌由30分钟有效期
bin/elasticsearch-create-enrollment-token --s kibana

        输入之后点击Configure Elastic,会有如下提示,问我们要验证码

         让我们使用如下命令得到验证码(每次重启之后验证码都会变)。

# 进入kibana容器中
docker exec -it kibana /bin/bash
# 执行生成验证码命令
bin/kibana-verification-code 
# 获得的验证码输入之前页面中
Your verification code is:  250 205

        得到验证码之后输入,点击验证。 

         然后进入登陆界面

 (5)查看节点状态

         让我们从左侧菜单进入Management下的Dev Tools,然后运行如下代码,则可以看到右侧输出的节点状态等信息。

GET _cat/health?v

         我启动两个endpoint,所以下图可以看到node.total是2。

7、遇到的问题

(1)vm.max_map_count问题

        错误log如下

You must address the points described in the following [1] lines before starting Elasticsearch.
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

        永久解决方法

#修改文件
sudo vim /etc/sysctl.conf
 
#添加参数
vm.max_map_count = 262144

#重新加载/etc/sysctl.conf配置
sysctl -p

(2)docker "ERROR", "message":"error downloading geoip database"

        错误log如下

docker "ERROR", "message":"error downloading geoip database"

        解决方法,在配置文件中添加

ingest.geoip.downloader.enabled: false

(3)许可证过期问题处理

        我们可以通过注册账号获得一个免费的许可证证书。证书分为付费版和免费版,免费版会对节点数量有限制,但是一般的工作环境足够使用,因此我们采用BASIC授权文件。

        有效期一年,过期后还需要再次,一年之后到期可以更新一份新的许可证,不需要重启es。

Register | Elastichttps://register.elastic.co/        注册完成我们会收到一封邮件,其中有许可证的下载地址和安装教程地址。

License management | Elastic Stack Overview [7.1] | Elastichttps://www.elastic.co/guide/en/elastic-stack-overview/7.1/license-management.html        我们下载下来许可证,是一个*.json的文件,内容如下

{"license":{"uid":"0b36091e-fb2c-427c-b671-20138124d297","type":"basic","issue_date_in_millis":1652313600000,"expiry_date_in_millis":1683935999999,"max_nodes":100,"issued_to":"yanhui zhang (zyh)","issuer":"Web Form","signature":"AAAAAwAAAA2lgGh23iNSQXJlnkpJAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQCzYg6dCZMFMW/QRnufhQCwKf03PQIyOnoGM4gZ64/eU2Vzv79Es9M6lcX10VkJCQvShXESrsOwg6dmDa1nw7VJTdvmqoxauI4yXeAKwnxo2w7aI6TAREpV7GYi7uKisfBkX9B/H4Nn2KDp9iReMNQo7a6fNEI4r8RwH4pX9twlAEyCAqJM0tDF17yYo5Oc7eYxW4Gix3GKsBVcsDAAkrWSvsaRlN0ybotvcQQ3Q+/wiBrwMkKruXryY5yOYvkc3Xaj1JFcr7SMco1lzJnsLJXrzljKTE65/xv3iIPXm5lpoRsO7ZRT0oAcTnQflYtuLR0IDwmG/TtvdC8LQadFE5yh","start_date_in_millis":1652313600000}}

        将文件上传到服务器内,执行如下命令,其中acknowledge=true的含义是如果你之前的功能比现有的许可证的功能多,你已经知情,因为如果许可证包含的功能不一致,不加上这句话,不让执行,如果保证一致,可以不加这句话。

curl -XPUT -u elastic 'https://localhost:9200/_license?acknowledge=true' -H "Content-Type: application/json" -d @your.json

        执行时需要es的密码,执行完成,会提示如下信息,之前如果Kibana不让访问了(提示许可证的事),现在应该可以访问了。

curl: (60) Peer's certificate issuer has been marked as not trusted by the user.
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

        许可证安装、更新教程 

Update license API | Elasticsearch Guide [7.1] | Elastichttps://www.elastic.co/guide/en/elasticsearch/reference/7.1/update-license.html

8、未完小记

        上一次配置es还是5.5的版本可能,和现在这个差别好大的赶脚,上面的是基于本机一台虚拟机的一次测试,还遗留了问题就是关闭后怎么再次启动容器,动态加入的节点起不来,暂时不知道怎么弄。

        看官网有使用 Docker Compose 启动多节点集群,说是要在启用了安全性的 Docker 中启动并运行多节点 Elasticsearch 集群和 Kibana,可以使用 Docker Compose。

        打算接下来使用官网的Docker Compose再试一下。

        然后再进行一次测试多台虚拟机安装、运行的情况。

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/124710398