成为弹性搜索的搜索专家!09.集群化
我們正在進行中進行各種嘗試,但目前我們想要使用搜索系統在常用的應用程式上進行搜索,因此單台配置感覺有些不安全,所以我們會使用多台集群配置。
如果您搜索一下ElasticSearch的集群配置,我认为您应该能够理解,一般使用起来非常容易。也许有一些小技巧,但我们在这里将以非常简单的方式配置。
首先,看一下设置文件。
################################### Cluster ###################################
# Cluster name identifies your cluster for auto-discovery. If you're running
# multiple clusters on the same network, make sure you're using unique names.
#
#cluster.name: elasticsearch
#################################### Node #####################################
# Node names are generated dynamically on startup, so you're relieved
# from configuring them manually. You can tie this node to a specific name:
#
#node.name: "Franz Kafka"
# Every node can be configured to allow or deny being eligible as the master,
# and to allow or deny to store the data.
#
# Allow this node to be eligible as a master node (enabled by default):
#
#node.master: true
#
# Allow this node to store data (enabled by default):
#
#node.data: true
# You can exploit these settings to design advanced cluster topologies.
#
# 1. You want this node to never become a master node, only to hold data.
# This will be the "workhorse" of your cluster.
#
#node.master: false
#node.data: true
#
# 2. You want this node to only serve as a master: to not store any data and
# to have free resources. This will be the "coordinator" of your cluster.
#
#node.master: true
#node.data: false
#
# 3. You want this node to be neither master nor data node, but
# to act as a "search load balancer" (fetching data from nodes,
# aggregating results, etc.)
#
#node.master: false
#node.data: false
# Use the Cluster Health API [http://localhost:9200/_cluster/health], the
# Node Info API [http://localhost:9200/_nodes] or GUI tools
# such as <http://www.elasticsearch.org/overview/marvel/>,
# <http://github.com/karmi/elasticsearch-paramedic>,
# <http://github.com/lukas-vlcek/bigdesk> and
# <http://mobz.github.com/elasticsearch-head> to inspect the cluster state.
# A node can have generic attributes associated with it, which can later be used
# for customized shard allocation filtering, or allocation awareness. An attribute
# is a simple key value pair, similar to node.key: value, here is an example:
#
#node.rack: rack314
# By default, multiple nodes are allowed to start from the same installation location
# to disable it, set the following:
#node.max_local_storage_nodes: 1
根据英文说明,Cluster的设置相对来说比较容易理解。ElasticSearch会根据集群名称自动进行集群操作。因此,最重要的是确保集群名称相同即可。
接下来,设置集群化后的节点如何运作。首先是节点的名称。让我们给它取一个容易理解的名字吧。
然后,设置如何运作:
node.master = true或false
node.data = true或false
上述的设置组合(共4种)。
主节点是否成为主节点?
数据是否具有数据?
节点.master = true
节点.data = true
如果这样的话,不仅可以精通技能,还可以拥有数据。只要正常使用,这个方法很方便。
节点.master = true
节点.data = false
因为没有数据持有功能,只有主节点功能,所以在Elasticsearch中称为“协调节点”。
节点的主节点设置为假,而数据节点设置为真。
我只有数据。
节点主机 = false
节点数据 = false
根据说法,elasticsearch仅充当一个负载均衡器的角色。
在我的案例中,我使用了两台都是true的三台构成的集群化。
只要服务器构成已经完成,请确保以下的架构正确。
curl -XGET http://localhost:9200/_cluster/state?pretty
{
"cluster_name" : "*****-search",
"version" : 7,
"master_node" : "EKEbvVZrRDCRCcimEsKdKg",
"blocks" : { },
"nodes" : {
"EKEbvVZrRDCRCcimEsKdKg" : {
"name" : "*****-*****",
"transport_address" : "inet[/***.***.***.***:9300]",
"attributes" : { }
},
"ZCGmnee6QuC4Mrxb19NzGg" : {
"name" : "*****-*****",
"transport_address" : "inet[/***.***.***.***:9300]",
"attributes" : { }
},
"nX0umaReSDK57okDmTu-hA" : {
"name" : "*****-*****",
"transport_address" : "inet[/***.***.***.***:9300]",
"attributes" : { }
}
},
"metadata" : {
"indices" : { }
},
"routing_table" : {
"indices" : { }
},
"routing_nodes" : {
"unassigned" : [ ],
"nodes" : {
"EKEbvVZrRDCRCcimEsKdKg" : [ ],
"ZCGmnee6QuC4Mrxb19NzGg" : [ ],
"nX0umaReSDK57okDmTu-hA" : [ ]
}
},
"allocations" : [ ]
}
我确认了三台结构的配置。
现在让我们关注一下,经过多次努力才达到目前的模板结构。
需要对这三台都应用吗???我有点怀疑。由于Elasticsearch具有分布式数据存储的特点,我想只对一个应用会被应用到所有地方。不过当我试了一下之后。。。。结果居然全部都适用了。
这个动作虽然搞错了会觉得很烦,但也觉得解脱了繁琐的工作,真是太好了。
当然,数据同步也没有问题。
接下来是集群健康检查,我在考虑是否要安装之前写过的elastic-HQ插件。
如果要自己做的话,至少需要考虑以下两点。
集群的健康检查
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
集群状态监控
curl -XGET 'http://localhost:9200/_cluster/stats?pretty=true'
监控集群节点的状态
curl -X GET http://localhost:9200/_nodes/stats?pretty
对于这个检索结果,似乎是通过心跳来确认故障,并且如果有异常情况会发送警报。
下次,请为我创建一个VIP账号,然后从那里开始,我希望你能够将其分配到循环处理中。我想要检查那些日志等等。