虚拟机内elasticsearch集群的详细安装过程

日期:2017-06-16       浏览:698

一 背景

elasticsearch 是一个全文检索工具,具体的强大之处我就不多说了。elasticsearch 集群部署功能更强大,这里就来记录一下我在虚拟机内的ubuntu上部署elasticsearch集群所爬过的坑。

二 安装虚拟机和ubuntu

VMWare或virtualBox虚拟机都可以,具体安装我就不介绍了,安装完虚拟机后就是下载ubuntu镜像文件(.iso),下载地址:https://www.ubuntu.com/download/desktop/thank-you?country=CN&version=16.04.2&architecture=amd64。然后就是在虚拟机内安装ubuntu,网上有相关教程,我也就不多说了,按照步骤走下来就可以了。

三 安装jdk

因为elasticsearch是用java写的,所以第一步是安装java运行环境jdk,好吧,安装jdk前我们还是先把相关工具安装一下吧。
1、安装add-apt-repository命令
sudo apt-get install python-software-properties
sudo apt-get install software-properties-common
2、安装jdk
2.1 使用ppa/源方式安装
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
2.2 安装oracle-java-installer
sudo apt-get install oracle-java8-installer
我们这里安装的是jdk8,如果你想安装其它版本修改下版本号就可以了。
2.3 设置jdk环境变量
sudo update-java-alternatives -s java-8-oracle
这儿对应你安装的jdk版本。
2.4 测试jdk是否安装成功
java -version
这时你看到下面这些信息就说明你安装jdk成功了,并且环境变量也设置好了。
java version "1.8.0_131"
Java(TM) SE Runtion Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131=b11, mixed mode)

四 安装elasticsearch

我这里是通过下载压缩包进行安装的,就将压缩包放在我个人用户(qbian)的目录下了。执行以下命令获取elasticsearch-5.3.2压缩包。
cd /home/qbian
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.2.zip
下载完成后接下来就是解压运行了。
sudo unzip elasticsearch-5.3.2.zip

五 启动elasticsearch

进入elasticsearch解压目录
cd /home/qbian/elasticsearch-5.3.2
./bin/elasticsearch
执行完以上命令后报不能使用root用户启动,好吧,这是elasticsearch为了安全考虑,不容许root用户启动,那我们需要创建一个elasticsearch用户。
// 1.创建用户组
groupadd es
// 2.创建es用户并将其添加到es用户组
useradd  es(用户名) -g es(组名) -p 123456(密码)
以上我们创建了es用户组和es用户,并且将es用户添加到了es用户组。接下来我们将解压后的elasticsearch-5.3.2文件夹所属用户修改为es用户。
chown -R es:es elasticsearch-5.3.2
执行完以上命令后我们可以用ll查看elasticsearch-5.3.2文件所属用户。这时你应该看到的是elasticsearch-5.3.2所属的用户组和用户都是es。以上所有命令都是root用户操作的,我们加下来切换到新创建的es用户。
su es
执行完以上命令后你应该已经切换到es用户下了,然后我们再来启动elasticsearch。
cd /home/qbian/elasticsearch-5.3.2
./bin/elasticsearch
执行完上述命令后你应该还会看到启动失败的异常信息。信息大概意思是说jvm启动需要的最小内容是2g,而我们的虚拟机内存只有1g。额,这是什么原因?原来是我们安装ubuntu时安装默认步骤走下来后我们的虚拟机可用的内存只有1g。好吧,知道原因就好办了,我们就来设置下虚拟机内存大小。
1、VMWare设置虚拟机内存大小:虚拟机菜单栏》虚拟机》设置》内存,这里我们将内存调到2g。
2、virtualBox设置虚拟机内存大小:virtualBox管理器》点击->系统》主板》内存大小,这里我们将内存调到2g。
内存设置完后重启下虚拟机。接着我们切换到es用户,进入elasticsearch-5.3.2文件夹,执行./bin/elasticsearch启动命令。这时还会报max virtual memory areas vm.maxmapcounty [65530] is too low, increase to at least [262144]异常,这个异常说明虚拟机内存还是没有生效,好吧,我们切换到root用户再通过命令修改下内存大小。
sudo sysctl -w vm.max_map_count=262144
这时再切换回es用户启动elasticsearch就可用正常启动了。
./bin/elasticsearch -d
上述命令是指后台启动elasticsearch,然后我们来测试一下。
curl http://localhost:9200/
// 以下是返回信息
{
  "name" : "O4oAgaF",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "yjyPIl45QMeA1PDVaTexAA",
  "version" : {
    "number" : "5.3.2",
    "build_hash" : "3068195",
    "build_date" : "2017-04-24T16:15:59.481Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.2"
  },
  "tagline" : "You Know, for Search"
}
这说明我们启动成功了,好吧,我们再来看看虚拟机ip是多少,执行ifconfig命令后查看的我虚拟机ip是192.168.1.113。我们再来访问一下curl http://192.168.1.113:9200,结果Connection refused,额,这又是什么鬼?原来是我们elasticsearch的配置信息需要修改一下,来吧,再修改一下配置文件。
vim /config/elasticsearch.yml
修改如下
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
# 下面是本机ip
network.host: 192.168.1.113
#
# Set a custom port for HTTP:
# 下面是es通过rest http接口访问的端口号
http.port: 9200
然后保存修改的配置,重新启动elasticsearch。这时再通过curl 192.168.1.113:9200就可用正常访问了。

六 搭建elasticsearch集群

以上只是在虚拟机内将elasticsearch启动起来并且可以访问罢了,我们怎么将虚拟机内的elasticsearch和我们主机内的elasticsearch组成集群呢,这时就需要修改配置信息了(/config/elasticsearch.yml)。我们主机的ip是192.168.1.112,虚拟机ip是192.168.1.113,并且虚拟机是通过网桥的方式连接到intent的,所以主机和虚拟机之间完全可以互ping的通。具体的elasticsearch.yml修改如下:
# ---------------------------------- Cluster -----------------------------------
# 以下配置的test是集群名称,主机和虚拟机配置的名称需相同
cluster.name: test
# ------------------------------------ Node ------------------------------------
# node-1是节点名称,主机和虚拟机配置的节点名称不能一样,另一个节点名称为node-2
node.name: node-1
node.master: true
node.data: true
# ---------------------------------- Network -----------------------------------
network.host: 192.168.1.112
#
# Set a custom port for HTTP:
#
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
# --------------------------------- Discovery ----------------------------------
discovery.zen.ping.unicast.hosts: ["192.168.1.112:9300", "192.168.1.113:9300"]

discovery.zen.minimum_master_nodes: 2
# ---------------------------------- Gateway -----------------------------------
gateway.recover_after_nodes: 2
以上配置信息有几点需要注意的:
1、cluster.name: test,这是集群名称的配置,所有加入该集群的elasticsearch服务都必须相同,elasticsearch就是通过cluster.name判断是否是同一个集群的。
2、node.name: node-1,这是当前节点的名称,这个在同一个集群内不可重复,每一个节点的名称要唯一。我在192.168.1.112的配置的节点名称是node-1,在192.168.1.113配置的节点名称是node-2。
3、node.master: true,这是说明该节点有竞选主节点(master)的机会,当主节点宕机后会从其它node.master: true的从节点内选举出一个作为主节点。
4、http.port: 9200,这是http rest接口访问的端口号,还有一个9300端口是给节点之间同步数据即调用和通信用的。
5、http.cors.enabled: truehttp.cors.allow-origin: "*",这两个配置是开启跨域请求,我们在接下来安装head集群可视化插件时需要用到。6、discovery.zen.ping.unicast.hosts: ["192.168.1.112:9300", "192.168.1.113:9300"],这个就是当前集群的所有节点的地址,这里的port填写的是9300并不是9200,上面也提到了,9300是给各节点之间通信使用的。
上面的配置完成后就可以启动主机和虚拟机内的elasticsearch服务了,但是我们怎么知道它们组成了集群呢?

七 安装集群可视化插件elasticsearch-head

安装elasticsearch-head插件比较烦,需要安装git,node,npm,grunt,这里就不说这几个工具的安装过程了。然后通过下面命令下载安装elasticsearch-head。
cd /home/qbian
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
安装完后就是启动elasticsearch-head了,
cd elasticsearch-head
npm run start
执行完上面的命令后你就可以看到elasticsearch-head已经启动成功了,并且监听在9100端口,我们可以通过http://ip:9100访问到。这时我们再将虚拟机和主机的elasticsearch服务重新启动一下就可以在http://ip:9100查看到我们当前的集群状态了。
以上全部就是我在虚拟机内安装elasticsearch集群所遇到的全部坑了,心好累,以无力吐槽,幸好最后安装成功并且集群测试通过(集群状态下各接口测试和宕机一个节点后各接口测试都通过)。
下期我们对elasticsearch-demo代码级别的使用案例进行简单的讲解,包括集群调用,保存数据,查询数据,高亮匹配查询结果等。
扫码关注有惊喜

(转载本站文章请注明作者和出处 qbian)

暂无评论

Copyright 2016 qbian. All Rights Reserved.

文章目录