在AWS上部署Elasticsearch集群

下面介绍一下在AWS上面部署Elasticsearch集群,结合AWS提供的负载均衡器(Elastic Load Balancing)和Auto Scaling Group功能实现,Elasticsearch的集群搭建。演示的版本为Elasticsearch 6.5.4。 启动EC2实例 首先启动一个EC2的实例,在这个实例里面安装Elasticsearch。 启动新实例,选择Amazon Linux 2 AMI (HVM), SSD Volume Type的AMI(Amazon Machine Image),然后点下一步:配置实例详细信息。配置详细信息界面,只需要选择一下子网即可,然后保留默认配置即可,然后点击下一步:添加存储。保持默认配置,继续点下一步:添加标签。添加标签不需要做配置,继续点下一步:配置安全组。在配置安全组界面,选择一个现有的安全组,或者创建一个都可以,但是有一点需要注意的:保证你选择(创建)的安全组可以让你自己或者所有IP访问。这里选择现有的安全组,后面还会介绍对安全组的配置。在安全组 ID表格里面选择default那一行,然后点击审核和启动。信息没有问题最后点启动。 在弹出的选择现有密钥对或创建新密钥对对话框中选择你已经存在的或者创建一个新的密钥对,这个密钥对是通过ssh来访问aws的ec2实例的。如果这一步不清楚就选择创建新密钥对。 安装Elasticsearch 假设上一次最后创建的密钥对为aws.pem,实例公有DNS(域名)为ec2-100-26-149-233.compute-1.amazonaws.com,使用ssh登录ec2实例: ssh -i aws.pem ec2-user@ec2-100-26-149-233.compute-1.amazonaws.com 实例的公有DNS(IPv4)到ec2的管理界面,点击前面启动的实例,在下面的信息面板就可以看到。 Amazon本身提供的AMI是基于CentOS系列的Linux系统,可以直接使用yum来安装Elasticsearch。根据Elasticsearch官方提供的文档进行安装。 修改文件/etc/yum.repos.d/amzn2-core.repo,在文件后面添加下面的内容: [elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md 然后执行下面的命令: sudo yum install -y java-1.8.0 sudo yum install -y elasticsearch sudo systemctl daemon-reload sudo systemctl enable elasticsearch.service 后面两条systemctl命令设置Linux开机启动Elasticsearch。这样就安装好了最新版本的Elasticsearch,下面就需要对其进行配置,以及制作自己的AMI了。 配置Elasticsearch以及制作AMI AWS的IAM IAM是个什么鬼呢。IAM就是AWS在一个账户下面,提供一种机制在SDK或者aws命令行来操作AWS服务的认证方式。一个AWS账户可以创建多个IAM访问权限,Elasticsearch需要使用access_key和secret_key。 在服务里面找到IAM,进入到控制面板里面,点击左侧的用户,然后按添加用户,用户名输入:elasticsearch,在访问类型一栏,把编程访问勾上,然后点击下一步:权限。在设置权限界面选择直接附加现有策略,在下面的列表当中选择AdministratorAccess ,然后点击下一步:标签,保持默认,继续下一步。最后点击创建用户。 创建成功后需要把访问密钥 ID和私有访问密钥保存下面,在下面的配置当中需要使用。 配置Elasticsearch 首先需要对Linux系统做一点配置。修改/etc/security/limits.conf文件,添加如下内容到文件后面: * - nofile 65536 * - nproc 4096 还需要安装一下EC2 Discovery Plugin插件: ...

January 8, 2019

Elasticsearch2.3.4分词插件开发

0. Elasticsearch的版本是2.3.4 首先你得有自己的一Analyzer和Tokenizer,可以参考前面的一篇文章 1. pom.xml 使用maven来构建项目,需要包含elasticsearch的依赖,否则编译不了 <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>2.3.4</version> <scope>provided</scope> </dependency> 然后es的plugin需要一个描述文件plugin-descriptor.properties,把这个文件放在src/main/resources这个目录,打包后安装到es里面就会出现在插件目录下了。这个文件需要写入下面的内容: description=${project.description} version=${project.version} name=${elasticsearch.plugin.name} site=${elasticsearch.plugin.site} jvm=${elasticsearch.plugin.jvm} classname=${elasticsearch.plugin.classname} java.version=${elasticsearch.plugin.java.version} elasticsearch.version=${elasticsearch.version} 这些才使用了maven在pom.xml定义的内容,直接定义在pom.xml的根路径下: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <elasticsearch.plugin.name>elasticsearch-analysis-demo</elasticsearch.plugin.name> <elasticsearch.plugin.site>false</elasticsearch.plugin.site> <elasticsearch.plugin.jvm>true</elasticsearch.plugin.jvm> <elasticsearch.plugin.java.version>1.8</elasticsearch.plugin.java.version> <elasticsearch.version>2.3.4</elasticsearch.version> <elasticsearch.plugin.classname>org.elasticsearch.plugin.AnalysisDemoPlugin</elasticsearch.plugin.classname> </properties> 最重要的就是plugin-descriptor.properties里面的classname,也就是pom.xml定义的elasticsearch.plugin.classname节点里面的类名,这个类就是es加载plugin的入口。 2. 继承Plugin 现在来看Java代码,分词插件入口类需要继承org.elasticsearch.plugins.Plugin类,并实现三个方法: public String name() 返回插件名字 public String description 返回插件的描述 public void onModule(AnalysisModule model) 可以使用model这个AnalysisModule对象添加自定义的分词器 上代码: package org.elasticsearch.plugin; import com.lexiscn.elasticsearch.hylanda.HylandaAnalysisBinderProcessor; import org.elasticsearch.index.analysis.AnalysisModule; import org.elasticsearch.plugins.Plugin; public class AnalysisDemoPlugin extends Plugin { public static String PLUGIN_NAME = "elasticsearch-analysis-demo"; @Override public String name() { return PLUGIN_NAME; } @Override public String description() { return PLUGIN_NAME; } public void onModule(AnalysisModule model) { model.addProcessor(new HylandaAnalysisBinderProcessor()); } } 在model.addProcessor这个方法调用的时候,需要一个org.elasticsearch.index.analysis.AnalysisModule.AnalysisBinderProcessor对象。所以还需要实现一个继承处AnalysisBinderProcessor的类: ...

December 16, 2016