ELASTICSEARCH CLUSTER 集群搭建总结

ES集群特性总结:

1.高可用

   对于所有集群来说都具备的一个高可用性,高可用性分为两种,一种是数据可用性,一种是服务     可用性。对于服务可用性来说,一个ES集群中可以存在多个ES NODE,每一个NODE对应一台服     务器,如果其中某一台因为某些元素出现了故障宕机,集群可以仍然使用剩余的NODE节点继续     提供服务,实现了服务高可用性;对于数据可用性来说,ES集群引入了副本(Replication)概       念,即创建INDEX的时候可以指定副本数量,以下图为例即是创建一个新的名为newindex的索       引,同时会为此索引创建两个分片及一份副本。需要注意的是,一旦创建索引,就无法更改其分     片数。同时由于引入了多台服务器,使得集群可以存储的数据量大幅上升,实现了高度数据可       用性。

PUT es ipaddress/hostnae:9200/newindex

{
  "settings": {
    "index": {
      "number_of_shards": 2,
      "number_of_replicas": 1
    }
  }
}

2.近实时

   从本质上来讲,ES也只是一种数据库,那么为什么在国内MYSQL等数据库占据主流的情况下还要使用ES呢,原因就是ES的数据读取速度。一台正常工作的ES服务器的读取速度可以保持在0.2毫秒之内,而即使你使用MYSQL在localhost进行少量的数据查询,由下图可见本地查询时间也基本上在40ms左右,由此对比可见ES速度之快。。

简单来说,ES之所以能达到这么快的速度,ES 是基于 Lucene 的全文检索引擎,它会使用分词器对数据进行分词后保存索引,擅长管理大量的索引数据,比如这么一个句子 “我的名字叫stefen zhen yu wang”, 在使用默认分词器的情况下ES会将这个句子分成{“我”,“的”,“名字”,“叫”,“stefen”,"zhen","yu","wang"},并且为每一个分好后的词保存一个索引,所以才能实现如此快速的查询。但是相对比MySQL来说,由于索引量过大,对于数据的更新操作来说,速度会慢很多。

3.安全性

ES内置了基于用户名和密码的认证方式,角色的访问控制,SSL加密访问等等,以保证数据传输过程以及存储的安全性。很值得一提的是,ES内置了一个elasticsearch-certutil工具,可以使用该工具去为集群生成对应的CA证书以及每个节点的签署证书的私钥。详细介绍可参考我另外一篇ES集成SSL证书。


集群基本配置

ES其实还有一个特性是易操作,其配置简单,例如本地的ES配置其实只是需要从官网把对应的压缩包下载下来然后启动对应的elasticsearch.bat文件,一个本地的单节点ES就已经启动好了,对于用户体验十分友好,在服务器上也是一样,只需要下载对应linux版本的tar包,解压缩执行运行,一台简单的ES服务器也就配置好了。对于集群配置来说也不会很复杂,只需要在在下载下来的elasticsearch包中的config目录下配置好elasticsearch.yml文件就行了。基本配置如下。

cluster.name: stefentestcluster
node.name: es01
node.master: true
network.host: 172.19.44.51
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["ipaddress1/hostname1", "ipaddress2/hostname2"]
cluster.initial_master_nodes: ["ipadress1/hostname1", "ipadress2/hostname2"]
 

yml配置详解:

cluster.name:集群名字

node.name:当前这台服务器的节点名字

node.master:是否具备成为master主节点的资格,默认为false,一个ES服务集群只可以存在一个  master节点,master节点主要用于处理读写数据等操作,其他节点作为DATA节点,主要用于数据的存储。

network.host:当前ES服务器的IP地址或者是hostname

http.port:ES端口号

transport.tcp.port:集群中每个ES几节点进行交互的TCP端口号

discovery.seed_hosts:这个配置就是ES集群中的所有服务器节点的IP地址或者hostname,只有配  置在其中的ES节点才能被加入集群。

cluster.initial_master_nodes:这个配置是ES集群中所有具备竞争master节点资格的节点,主节点     会从里面的服务器进行推举。


验证

集群配置好并启动成功之后可以通过linux使用curl或者本地postman甚至是浏览器去进行验证,以浏览器为例,只需要输入ESIPADDRESS/HOSTNAME:9200/_cluster/health?pretty即可以看到集群的基本信息以及状态。

eg:

{
    "cluster_name": "stefentestcluster",
    "status": "green",
    "timed_out": false,
    "number_of_nodes": 2,
    "number_of_data_nodes": 3,
    "active_primary_shards": 2,
    "active_shards": 2,
    "relocating_shards": 0,
    "initializing_shards": 0,
    "unassigned_shards": 0,
    "delayed_unassigned_shards": 0,
    "number_of_pending_tasks": 0,
    "number_of_in_flight_fetch": 0,
    "task_max_waiting_in_queue_millis": 0,
    "active_shards_percent_as_number": 0
}