注:elasticsearch是用Java编写的,elasticsearch的运行需要有Java环境,因此需要先行下载jdk。
首先介绍elasticsearch的几个基本概念:
index: es里的index相当于数据库名称。
type: 相当于数据库里的一个表。
id:唯一,相当于主键。
node: 节点是es实例,一台机器可以运行多个实例,但是要保证端口号不同,可以在配置文件中进行配置。
cluster: 代表一个集群,集群由一个或多个节点组成。集群会自动选举其中一个节点为主节点。
shards:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改,默认的分片数量为5个。
replicas: 代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡,默认的副本数量为1个。
1、下载安装elasticsearch
因为elasticsearch本身就是一个集群,所以我们需要准备多台机器来进行安装。这里我使用的是:192.168.198.223,192.168.198.224,192.168.198.226。需要分别在每台机器上安装elasticsearch。这里给出官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html
注意此处的坑:
● root超级用户身份不能启动,这应该是出于安全考录设置的条件。
解决方案:创建一个单独的用户来启动elasticsearch
groupadd elastic
useradd elastic -g elastic
#给elastic用户赋予权限,这里的elasticsearch-5.5.0是elasticsearch的安装目录
chown -R elastic:elastic elasticsearch-5.5.0
其他可能出现的坑:
● ERROR: bootstrap checks failed
解决方案:切换到root用户,编辑limits.conf 添加类似如下内容
vi /etc/security/limits.conf
添加如下内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
● max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决方案:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
修改如下内容:
* soft nproc 1024
#修改为
* soft nproc 2048
● max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决方案:切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令:
sysctl -p
重新启动elasticsearch即可。
2、配置elasticsearch
这里有几个elasticsearch配置选项个人认为还是有必要配置一下的,先关闭每台机器上的elasticsearch,编辑elasticsearch.yml:
cd elasticsearch-5.5.0/config #进入config目录
vim elasticsearch.yml #编辑elasticsearch.yml文件
#集群名字,可以自定义,这里我起名为 mycluster,es启动后会将同一网段下具有相同集群名字的节点放到一个集群下。
cluster.name: mycluster
#节点名字,默认的节点名字是一串随机字符串,而且每次启动都会不一样。我们自己修改了之后查看日志等都会方便一点。同一集群中不同节点应该取不一样的名字。
node.name:"node-1" #我的三个节点取的名字分别是:node-1,node-2,node-3
#设置数据以及日志的路径。默认情况下,Eleasticsearch会把插件、日志以及你最重要的数据放在安装目录下,你可以自己重新设置到安装目录之后的地方。
path.data: /data/es
path.logs: /log/es
#设置绑定的ip地址以及与其它节点交互的IP地址,设置为0.0.0.0即可。
network.host:0.0.0.0
#设置是否打开多播方式发现节点,默认是true。生产环境中建议把多播关闭,因为某个节点可能会意外加入一个集群。建议使用单播方式。
discovery.zen.ping.multicast.enabled:false
#指定集群中的节点中有几个有master资格的节点。这个配置就是告诉Elasticsearch当没有足够master候选节点的时候,就不要进行master选举,等master候选节点足够了才进行选举。这个配置有助于防止集群分裂。推荐个数就是(master候选节点个数*2)+1。视具体情况而定。如果有两个节点,那么就遇到难题了,推荐数当然是2,但是这意味着如果有一个节点挂掉,整个集群就不可用了。设置成1可以保证集群的功能,但是就无法保证集群分裂了,那么这样的情况,最好至少保证有3个节点。
covery.zen.minimum_master_nodes:2
#discovery.zen.ping.unicast.hosts:["节点1的 ip","节点2 的ip","节点3的ip"]指明集群中其它可能为master的节点ip,以防es启动后发现不了集群中的其他节点。第一对引号里是node1。第二个是 node2 。
discovery.zen.ping.unicast.hosts: ["192.168.198.223","192.168.198.224"]
elasticsearch的默认对外服务的http端口号是9200,节点间交互的tcp端口号是9300。我们要保证开放其防火墙端口。
3、可视化工具elasticsearch-head的安装
官方 GitHub 地址为:https://github.com/mobz/elasticsearch-head。之前head是作为elasticsearch的插件安装的,不过现在这种方法已经废弃。
在我本地电脑上执行:
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
#注意需要有node环境,如果没有,安装node环境就好了
npm install
然后打开elasticsearch-head/Gruntfile.js,找到下面connect属性,新增hostname: ‘*’,
connect: {
server: {
options: {
hostname:'*',
port: 9100,
base:'.',
keepalive:true
}
}
修改elasticsearch配置文件使其允许跨域:
cd elasticsearch-5.5.0/config #进入config目录
vim elasticsearch.yml #编辑elasticsearch.yml文件
#添加如下内容
http.cors.enabled: true
http.cors.allow-origin: "*"
然后就可以执行elasticsearch-head了。进入elasticsearch-head目录,执行命令:
npm run start
打开浏览器,输入网址localhost:9100进入即可。
4、分别运行每台机器上的elasticsearch
分别运行每台机器上的elasticsearch,并且启动本机上的elasticsearch-head插件,打开浏览器,输入网址:localhost:9100进入,连接http://192.168.198.223:9200/,结果图如下:
这里可以看到elasticsearch集群状态是绿色,并且没有任何数据。当我们查看集群状态的时候,我们要么得到绿色、黄色或红色。
绿色代表一切正常(集群功能齐全)。
黄色意味着所有的数据都是可用的,但是某些复制分片处于没有被分配的状态(集群功能齐全)。
红色则代表因为某些原因,某些数据不可用。在这种状态下,会有丢失数据的危险。
elasticsearch官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html