From 63c8c25b95de6f4d545d3c918c1b045681d1d26b Mon Sep 17 00:00:00 2001 From: Filip Pytloun Date: Thu, 5 May 2016 16:14:02 +0200 Subject: [PATCH] Better support for clustering --- README.rst | 31 ++++++++++++++++++++++++++- elasticsearch/files/elasticsearch.yml | 27 +++++++++++++---------- metadata/service/server/cluster.yml | 14 ++++++++++++ metadata/service/server/local.yml | 5 +++++ metadata/service/server/single.yml | 5 +++++ 5 files changed, 70 insertions(+), 12 deletions(-) create mode 100644 metadata/service/server/cluster.yml diff --git a/README.rst b/README.rst index 90df9be..0c7021f 100644 --- a/README.rst +++ b/README.rst @@ -8,15 +8,44 @@ Elasticsearch provides a distributed, multitenant-capable full-text search engin Sample pillars ============== +Single-node elasticsearch with clustering disabled: + +.. code-block:: yaml + + elasticsearch: + server: + enabled: true + bind: + address: 0.0.0.0 + port: 9200 + cluster: + multicast: false + index: + shards: 1 + replicas: 0 + +Cluster with manually defined members: + .. code-block:: yaml elasticsearch: server: enabled: true - version: 1.0.1 bind: address: 0.0.0.0 port: 9200 + cluster: + multicast: false + members: + - host: elastic01 + port: 9300 + - host: elastic02 + port: 9300 + - host: elastic03 + port: 9300 + index: + shards: 5 + replicas: 1 Read more ========= diff --git a/elasticsearch/files/elasticsearch.yml b/elasticsearch/files/elasticsearch.yml index 89a1c5c..fcea2a9 100644 --- a/elasticsearch/files/elasticsearch.yml +++ b/elasticsearch/files/elasticsearch.yml @@ -32,10 +32,8 @@ # multiple clusters on the same network, make sure you're using unique names. # # cluster.name: elasticsearch -{%- if server.clustername is defined %} - -cluster.name: {{ server.clustername }} - +{%- if server.get('cluster', {}).name is defined %} +cluster.name: {{ server.cluster.name }} {% endif %} #################################### Node ##################################### @@ -50,11 +48,11 @@ node.name: {{ server.get('name', '${HOSTNAME}') }} # # Allow this node to be eligible as a master node (enabled by default): # -# node.master: true +node.master: {{ server.get('master', True)|lower }} # # Allow this node to store data (enabled by default): # -# node.data: true +node.data: {{ server.get('data', True)|lower }} # You can exploit these settings to design advanced cluster topologies. # @@ -89,6 +87,9 @@ node.name: {{ server.get('name', '${HOSTNAME}') }} # is a simple key value pair, similar to node.key: value, here is an example: # # node.rack: rack314 +{%- if server.rack is defined %} +node.rack: {{ server.rack }} +{%- endif %} # By default, multiple nodes are allowed to start from the same installation location # to disable it, set the following: @@ -110,11 +111,11 @@ node.name: {{ server.get('name', '${HOSTNAME}') }} # Set the number of shards (splits) of an index (5 by default): # -# index.number_of_shards: 5 +index.number_of_shards: {{ server.get('index', {}).get('shards', 5) }} # Set the number of replicas (additional copies) of an index (1 by default): # -# index.number_of_replicas: 1 +index.number_of_replicas: {{ server.get('index', {}).get('replicas', 1) }} # Note, that for development on a local machine, with small indices, it usually # makes sense to "disable" the distributed features: @@ -213,7 +214,9 @@ http.enabled: true # Set the address other nodes will use to communicate with this node. If not # set, it is automatically derived. It must point to an actual IP address. # -# network.publish_host: 192.168.0.1 +{%- if server.publish_host is defined %} +network.publish_host: {{ server.publish_host }} +{%- endif %} # Set both 'bind_host' and 'publish_host': # @@ -326,12 +329,14 @@ http.enabled: true # # 1. Disable multicast discovery (enabled by default): # -# discovery.zen.ping.multicast.enabled: false +discovery.zen.ping.multicast.enabled: {{ server.get('cluster', {}).get('multicast', True)|lower }} # # 2. Configure an initial list of master nodes in the cluster # to perform discovery when new nodes (master or data) are started: # -# discovery.zen.ping.unicast.hosts: ["host1", "host2:port"] +{%- if server.get('cluster', {}).members is defined %} +discovery.zen.ping.unicast.hosts: [{% for member in server.cluster.members %}"{{ member.host }}:{{ member.get('port', 9300) }}"{% if not loop.last %}, {% endif %}{% endfor %}] +{%- endif %} # EC2 discovery allows to use AWS EC2 API in order to perform discovery. # diff --git a/metadata/service/server/cluster.yml b/metadata/service/server/cluster.yml new file mode 100644 index 0000000..e432f74 --- /dev/null +++ b/metadata/service/server/cluster.yml @@ -0,0 +1,14 @@ +applications: +- elasticsearch +classes: +- service.elasticsearch.support +parameters: + elasticsearch: + server: + enabled: true + bind: + address: 0.0.0.0 + port: 9200 + cluster: + name: elasticsearch + multicast: true diff --git a/metadata/service/server/local.yml b/metadata/service/server/local.yml index bb0e319..e3572ea 100644 --- a/metadata/service/server/local.yml +++ b/metadata/service/server/local.yml @@ -9,3 +9,8 @@ parameters: bind: address: 127.0.0.1 port: 9200 + index: + shards: 1 + replicas: 0 + cluster: + multicast: false diff --git a/metadata/service/server/single.yml b/metadata/service/server/single.yml index 2dd8332..a77268e 100644 --- a/metadata/service/server/single.yml +++ b/metadata/service/server/single.yml @@ -9,3 +9,8 @@ parameters: bind: address: 0.0.0.0 port: 9200 + index: + shards: 1 + replicas: 0 + cluster: + multicast: false -- 2.32.7