Elasticsearch搭建,用户名密码+证书的方式认证
当前有两个服务器,ip分别为192.168.171.81
和192.168.171.25
,我们需要搭建一个es集群。
首先下载elasticsearch-8.2.0-linux-x86_64.tar.gz
,分别拷贝到这两台服务器中,进行解压。
需要注意的是,我们要在启动Elasticsearch服务之前,就需要配置elasticsearch.yml
。
在第一台服务器修改config/elasticsearch.yml
,内容如下:
network.host: 192.168.171.81
transport.host: 192.168.171.81
cluster.name: my_cluster # 可以不写,默认为elasticsearch
node.name: node1 # 可以不写,默认为当前服务器名
# node.roles: [ data, master ] # 可以不写, 默认为cdfhilmrstw
ingest.geoip.downloader.enabled: false # 关闭下载geoip数据库
角色列表如下:
然后修改文件config/jvm.options
,内容如下:
-Xms4g
-Xmx4g
启动第一台服务器的es:./bin/elasticsearch
出现下面,说明启动成功:
默认密码有点难记,我们修改密码:
./bin/elasticsearch-reset-password -u elastic -i
验证是否成功:
curl --insecure -u elastic:123456 -XGET "https://192.168.171.81:9200/"
,其中123456
是我刚才设置的密码,返回如下:
说明节点正常启动了。
然后检查一下集群节点:curl --insecure -u elastic:123456 -XGET "https://192.168.171.81:9200/_cat/nodes"
可以看到当前只有一个节点。
当前elasticsearch.yml
文件自动进行了更新:
如果要一台新的服务器加入进来,需要生成一个token,有了这个token就可以让一台新节点自动加入到集群,./bin/elasticsearch-create-enrollment-token -s node
接下来配置第二台服务器。 更第一台配置一样,修改./config/elasticsearch.yml
network.host: 192.168.171.25
transport.host: 192.168.171.25
cluster.name: my_cluster
node.name: node2
node.roles: [ data, master ] # 可以不写, 默认为cdfhilmrstw
修改config/jvm.options
:
-Xms4g
-Xmx4g
然后在讲这台节点加入es集群中:./bin/elasticsearch --enrollment-token eyJ2ZXIiOiI4LjIuMCIsImFkciI6WyIxOTIuMTY4LjE3MS44MTo5MjAwIl0sImZnciI6Ijk5MGI4NDllNGVkNDk0NmEwYzAzZDdkZDk4YzQwMTg0MzllNGQ5M2E0NDExNjM5MTAxY2QwOTdkZGEzNmI5NTkiLCJrZXkiOiI0dVVjQUlFQktyU0dWdy1YSXlfVTpLYjBWaW1zZ1FkZTdxQ3dHamZJYUNnIn0=
然后在第一台节点终端显示:
检查node2的状态:
curl --insecure -u elastic:123456 -XGET "https:/192.168.171.25:9200/"
可以看到node2也成功启动了。
查看node2的配置文件elasticsearch.yml
:
说明使用enrollment-token
可以自动进行配置。下次就不需要了。
检查集群节点:
可以看见集群里有两个节点。
kibana配置
kibana下载对应的8.2.0版本,然后直接运行./bin/kibana
,在浏览器中输入对应的url,
然后在elasticsearch中通过命令生成token./elasticsearch-create-enrollment-token --scope kibana
,然后将token配置到kibana中的页面。
使用上面的修改的用户名elastic
密码123456
进行登录。
Python连接
安装 pip install elasticsearch
检查版本:pip list | grep elasticsearch
elasticsearch 8.2.0
将es节点中的config/cert/http_ca.crt
拷贝到本地。
from elasticsearch import Elasticsearch
es = Elasticsearch('https://elastic:123456@192.168.171.81:9200',
ca_certs = './http_ca.crt',
verify_certs=True)
data = {
"name": "灭绝师太",
"age": "49",
"sex": "f",
"address": "峨眉山",
"sect": "峨眉派",
"skill": "倚天剑",
"power": "70",
"create_time": "2022-05-08 23:16:53",
"modify_time": "2022-05-08 23:16:59"
}
resp = es.index(index="example_index", id=1, body=data)
print(resp)
返回添加数据成功即可。
CURL 方式访问
ES使用了用户名、密码,同时使用了证书的方式进行认证。
使用CURL不安全的方式进行访问:curl --insecure -u elastic:123456 -XGET "https://ip:9200/db/_search"
,这种方式不需要指定证书,只需要用户名和密码就可以访问。
使用CURL安全的方式进行访问:curl --cacert /home/usr/app/elasticsearch-8.2.0/config/certs/http_ca.crt -u elastic:123456 -XGET 'https://ip:9200/db/_search'
,这种方式将用户名密码,同时结合证书进行访问。