Elasticsearch集群生产配置

随笔3个月前发布 独活
37 0 0

集群配置

在组建集群时,需要额外添加集群相关的配置,如节点角色、集群发现、初始主节点、主节点选举和安全认证等,以下配置均在上篇创建Elasticsearch单机实例的基础上搭建。

设置集群名称

vi elasticsearch.yml

# 统一集群名字
cluster.name: my-application

# 移除该配置
discovery.type: single-node

节点配置

节点角色

默认情况下,单节点拥有所有的角色,如master、data、ingest等。实际应用中,需要根据服务器资源和集群大小,进行节点角色规划。一些参考如下

拥有master角色的节点数量不少于三个
master节点不索引和检索数据,对cpu、内存、存储的要求较低,如2GB内存、50GB存储、中等CPU。
data节点要索引、检索、存储数据,对cpu、内存、存储的要求较高,如8+GB内存、500GB存储、高性能CPU。
服务器资源限制或者集群较小时,可以将节点同时配置为master和data角色。

根据集群实际情况,在elasticsearch.yml中选择性增改如下配置

# 只作为master
node.roles: ["master"]

# 既作为主节点又作为数据节点
node.roles: ["master", "data"]

主节点初始化/选举

在集群刚启动时,还无法进行主节点选举,从指定的初始化主节点列表配置中选取一个可用的节点作为主节点。

根据主节点数量和名字,在elasticsearch.yml中新增如下配置

# 这个参数用于配置一个节点被选举为主节点时,需要获得的其他主节点的同意票数。
# 在一个Elasticsearch集群中,主节点的选举是通过投票机制进行的,当一个节点认为自己可以成为主节点时,
# 它会向其他节点发出请求,如果获得了超过discovery.zen.minimum_master_nodes个节点的同意票,那么它就会成为主节点。
# 推荐配置为(主节点数量 + 1)/2,为了保证高可用,投票主节点数量最少三个。
discovery.zen.minimum_master_nodes: 2

# 集群启动时,ES实例数量不够无法选举主节点,从以下节点中任选一个为主节点
cluster.initial_master_nodes: ["node-1", "node-2"]

节点发现

当节点启动后,会利用配置的节点连接信息,连接到该节点以加入集群,节点间使用transport.port端口进行通信。

根据节点连接信息,在elasticsearch.yml中新增如下配置

# 集群初始节点,新加入集群的节点会通过这个列表中的节点进行发现和加入,
# 因此,只需要在每个节点的配置文件中配置一个或者多个初始节点的连接信息即可。
# 一般来说,为了提高集群的可靠性和容错性,可以在discovery.seed_hosts中列出多个节点的连接信息
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.2:9300"]

网络配置

Docker中启动的elasticsearch实例,无法直接访问,需要经过NAT。我们访问时是通过宿主机的IP+PORT,到了宿主机上,经过NAT之后,再将请求转发到Docker容器内部。

所以,在配置集群时,需要将宿主机上的host和port暴露出来,以供客户端和节点访问;默认情况下,暴露的是内部host和port,外部节点无法连接,也就无法组成集群。

例如,当前节点,宿主机网络接口IP是176.33.2.101,预留的Http端口是9002,Transport端口是9003;容器内部使用的Http端口是9200,Transport端口是9300。

需将如下配置添加到elasticsearch.yml中

# 监听所有网络接口
network.host: 0.0.0.0

# 监听的tcp端口
http.port: 9200

# 发布的http通信端口,告诉客户端与其他节点,使用9002与自己通信
http.publish_port: 9002

# 发布的http通信地址,告诉客户端与其他节点,使用该地址与自己通信
http.publish_host: 176.33.2.101

# 监听的tcp端口
transport.port:9300

# 发布的transport通信端口,告诉其他节点,使用9003与自己通信
transport.publish_port: 9003

# 发布的transport通信地址,告诉其他节点,使用该地址与自己通信
transport.publish_host: 176.33.2.101

安全配置

为了保证集群及数据安全,我们还需要开启安全认证,安全认证开启后:

集群间通信需要启用SSL,使用内部生成的数字证书验证身份和加密通信
客户端访问elasticsearch时,需要提供身份证明

在elasticsearch.yml中新增如下配置以开启安全认证

# 启用安全认证
xpack.security.enabled: true

# 启用安全认证后,基础授权的elasticsearch必须启用集群加密通信
xpack.security.transport.ssl.enabled: true

集群加密通信

启用xpack.security.enabled之后,basic授权的elasticsearch在节点间通信时,必须启用SSL。

生成Certificate Authority(CA,证书颁发机构)

CA可以是公共的、私有的或者是自签名的。公共的CA(如Let's Encrypt、DigiCert等)被广泛信任,并且其根证书被包含在操作系统和浏览器的信任列表中。

私有的CA通常由组织自己创建,用于颁发内部系统和服务的证书。CA的作用是验证证书请求者的身份,并签署包含公钥和相关信息的数字证书。

生成CA文件默认名字是elastic-stack-ca.p12,其中包括CA证书和CA私钥

cd /elasticsearch-root
# 使用默认文件名、并对私钥进行加密
./bin/elasticsearch-certutil ca -pass "admin1246"
生成Certificate(证书)

Certificate是由CA签发的数字证书,包含了实体的公钥、标识信息(如域名、组织信息等)以及CA的数字签名。

证书可以用于安全通信中的身份验证和加密通信​。对于Web服务器,证书通常包含了服务器的公钥和域名信息,用于在HTTPS连接中验证服务器的身份并进行加密通信。

利用CA生成签名证书,生成文件名默认是elastic-certificates.p12

./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --ca-pass "admin1246"
配置节点加密通信

只需要在一个节点上生成数字证书,将生成的数组证书elastic-certificates.p12,拷贝到集群中所有节点的/elasticsearch-root/config目录下

然后在elasticsearch.yml中新增如下配置

xpack.security.transport.ssl.verification_mode: certificate
# remove elastic-certificates.p12 file to config directory
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

设置内置用户密码

集群加密配置好之后,重启elasticsearch,然后来到/elasticsearch-root/bin目录下,通过elasticsearch-setup-passwords命令设置内置用户密码。

设置好之后可以通过内置的elastic和kibana访问elasticsearch集群,也可以新增用户。

./bin/elasticsearch-setup-passwords interactive
Elasticsearch集群生产配置

启动集群

完成上述配置后,依次启动节点。启动成功后,访问任一节点http://127.0.0.1:9202/_cat/nodes,可以看到集群中的节点信息
Elasticsearch集群生产配置

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...