单节点ES
启动一台EC2实例配置ES
为了测试方便,EC2在公有子网中启动。生产环境建议放在私有子网的VPC里面。
- 实例类型选择内存优化r系列(r5.2xlarge 8vcpu 64G ram)。
- 安全组SSH的22端口禁止,通过System Manager登录到EC2。
- 安全组添加TCP 9200端口给REST方式调用。
- 安全组添加TCP 9300端口给内部集群节点通信。
下载ElasticSearch压缩包,解压缩到指定目标文件夹(tar -zxvf)。
修改config/jvm.options,设置heap内存为26G,剩余一半内存可以作为文件系统缓存提高性能。一般设置的heap size不超过服务器可用内存的一半。
- -Xms26g
- -Xmx26g
修改config/elasticsearch.yml,简单设置下集群的名字以及数据文件和日志的存储路径:
cluster.name: my-applicationnode.name: node-apath.data: /home/ec2-user/esdatapath.logs: /home/ec2-user/eslogs
启动es
./elasticsearch-7.3.2/bin/elasticsearch > logs/launch.txt &
测试es是否正常启动,返回status 200代表以正常启动
curl -I localhost:9200TTP/1.1 200 OKcontent-type: application/json; charset=UTF-8content-length: 499
到此为止在服务器本地测试都已经成功了,但是在其他机器是没有办法访问的,因为在默认情况下,network.hosts只是绑定了_local_,也就是只能使用localhost访问,在服务器外部是ping不通的。
为了解决这个问题,可以有多种方式:
- 通过nginx设置路由代理
- 修改config/elasticsearch.yml
network.host: <ec2-private-ip>iscovery.seed_hosts: ["<ec2-private-ip>"]
修改后重启es服务,发现还会报错:
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修复这两个报错的方法:
修改/etc/secuirty/limits.conf es discuss
* soft nofile 65536* hard nofile 65536
修改/etc/sysctl.conf Virtual memory
vm.max_map_count=262144
为了方便测试,没有添加任何身份验证,只是在安全组允许9200端口的时候来源设置我的ip,这样只能本地可以访问。
本地启动Kibana连接到EC2上的ElasticSearch之后,通过Monitoring就可以监控当前ES的状态了。

添加第二个节点只作为数据节点
可以首先使用上面的EC2创建一个AMI,从这个AMI启动一个新的EC2实例,这样之前的EC2的配置都会存在。不需要额外重新配置服务器。
实例启动后,首先删除data和log文件夹。避免报重复node id错误。
可以通过配置elasicsearch.yml把原先的节点作为master,新的节点作为slave.
#master-nodenode.master: truenode.data: true#slave-nodenode.master: falsenode.data: trueode.master: truenode.data: true
添加master节点, 把新启动的实例的private ip添加到seed_hosts里面,这样启动的时候es会自动去搜索master节点,并尝试加入集群。
discovery.seed_hosts: ["<master-private-ip-1>","<slave-private-ip"]
节点之间相互通信
各个节点的是通过9300端口通信的。默认的安全组是不允许这个端口号的。所以需要配置安全组,添加9300,来源是当前安全组的id.

最后从Kibana可以看到如下监控:

