之前用的版本是 5.6, 但是 5.6的 NEST 用的 JsonSerializer 是 Json.Net 的. 用 Red Gate Prformance Profiler 实测生环境上的实例, CPU 全消耗到 JSON 的序列化和反序列化上了, 而且占用很高.
为了解决这个问题, 我把期望寄托到 7.X 的版本上, 因为从 7.X 是内置的 UTF8Json; UTF8Json 比 Json.Net 先进的不是一点半点.
开发测试的时候, 用的是本地单节点. 很顺利. 不曾想, 拿到服务器之后, 这个集群配置折腾了我一天.
第一个节点
- 修改配置, 修改必要的集群配置.
- 修改 discovery.seed_hosts / cluster.initial_master_nodes 信息. 否则的话, 就要在启动的命令行上加上相应的参数. (这两个参数只会在节点加入群集的时候使用一次, 加入集群之后, 就不在使用)
- 如果不修改 network.host, 默认是 127.0.0.1 , 局域网内的其它机器访问不到该 ES.
- 如果修改了 network.host , 则 discover.seed_host 必须修改, 因为这个值默认为 127.0.0.1, 否则, 会找不到主节点...
- 生成证书
bin/elasticsearch-certutil ca
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
- 复制证书 elastic-certificates.p12 到 config/certs 目录下 (这里生成的证书是适用于所有节点的, 不同的节点用不同的证书, 这里不考虑, 因为我嫌麻烦)
- 修改配置, 因为我启用了 x-pack 的 security 功能, 所以 transport.ssl.enabled 必须为 true. 为 true 就要配置上面说的证书.
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
- 如果生成证书时设置了密码:
bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
- 设置文件夹权限为 777, 否则启动会失败
sudo chmod -R 777
- 启动或重启 ES 节点.
- 配置 x-pack 密码, 要设置好多个密码...
bin/elasticsearch-setup-passwords interactive
- 其它配置, 用于 head, 否则会 cors 报错
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "*"
集群其它节点添加步骤
- 复制前面已经改好的配置 覆盖 到新节点的 config 目录下面
- 修改节点名称, 端口等必要信息.
- 修改 discovery.seed_hosts / cluster.initial_master_nodes 信息
- 创建 config/crets 目录
- 复制第一个节点生成的 elastic-certificates.p12 文件到 certs 目录下面
- CHMOD -R 777 当前节点的目录
- 如果生成证书时设置了密码:
bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
- 启动
网友评论