本文,讲述下集群的整体搭建。
篇幅很短,主要基于前面的文章所写:
集群规模:两台机器,配置基本完全一样。
机器A:
JDK版本:1.8.0_111
操作系统版本:Linux version 2.6.32-504.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014
这里:想要查看操作系统版本,可以通过cat /proc/version 命令查看,可能linux不同版本的操作系统文件不同
机器B:
JDK版本:1.8.0_111;这说明,只要都是JDK 1.8即可,具体更新版本不重要。
操作系统版本:Linux version 2.6.32-504.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014
对于ElasticSearch来说,最重要的其实就是elasticsearch.yml文件,下面附上两台机器的配置文件。
机器A:作为master节点,数据节点
# ======================== Elasticsearch Configuration ========================= # ---------------------------------- Cluster ----------------------------------- # # Use a descriptive name for your cluster: # cluster.name: elasticsearch # # ------------------------------------ Node ------------------------------------ # # Use a descriptive name for the node: # node.name: node-1 node.master: true node.data: true # # Add custom attributes to the node: # #node.attr.rack: r1 # # ----------------------------------- Paths ------------------------------------ # # Path to directory where to store the data (separate multiple locations by comma): # #path.data: /path/to/data # # Path to log files: # #path.logs: /path/to/logs # # ----------------------------------- Memory ----------------------------------- # # Lock the memory on startup: # bootstrap.memory_lock: false bootstrap.system_call_filter: false # # Make sure that the heap size is set to about half the memory available # on the system and that the owner of the process is allowed to use this # limit. # # Elasticsearch performs poorly when the system is swapping the memory. # # ---------------------------------- Network ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): # network.host: 192.168.100.34 #http.host: 192.168.100.34 # # Set a custom port for HTTP: # http.port: 9200 # # For more information, consult the network module documentation. # # --------------------------------- Discovery ---------------------------------- # # Pass an initial list of hosts to perform discovery when new node is started: # The default list of hosts is ["127.0.0.1", "[::1]"] # discovery.zen.ping.unicast.hosts: ["192.168.100.34", "192.168.100.35","192.168.100.112"] # # Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1): # discovery.zen.minimum_master_nodes: 2 # # For more information, consult the zen discovery module documentation. # # ---------------------------------- Gateway ----------------------------------- # # Block initial recovery after a full cluster restart until N nodes are started: # #gateway.recover_after_nodes: 3 # # For more information, consult the gateway module documentation. # # ---------------------------------- Various ----------------------------------- # # Require explicit names when deleting indices: # #action.destructive_requires_name: true
机器B:主节点,数据节点
# ======================== Elasticsearch Configuration ========================= # ---------------------------------- Cluster ----------------------------------- # # Use a descriptive name for your cluster: # cluster.name: elasticsearch # # ------------------------------------ Node ------------------------------------ # # Use a descriptive name for the node: #节点在集群中的名称 node.name: node-2 #是否是master节点 node.master: true #是否是数据节点 node.data: true # # Add custom attributes to the node: # #node.attr.rack: r1 # # ----------------------------------- Paths ------------------------------------ # # Path to directory where to store the data (separate multiple locations by comma): #数据存储路径 #path.data: /path/to/data #日志存储路径 #这两个都是默认的,不用修改就行 # Path to log files: # #path.logs: /path/to/logs # # ----------------------------------- Memory ----------------------------------- # # Lock the memory on startup: # bootstrap.memory_lock: false bootstrap.system_call_filter: false # # Make sure that the heap size is set to about half the memory available # on the system and that the owner of the process is allowed to use this # limit. # # Elasticsearch performs poorly when the system is swapping the memory. # # ---------------------------------- Network ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): #本机IP network.host: 192.168.100.35 #http.host: 192.168.100.35 # # Set a custom port for HTTP: #端口号 http.port: 9200 #transport.tcp.port:9300 # # For more information, consult the network module documentation. # # --------------------------------- Discovery ---------------------------------- # # Pass an initial list of hosts to perform discovery when new node is started: # The default list of hosts is ["127.0.0.1", "[::1]"] #这里用的是单播,节点之间互相发现 discovery.zen.ping.unicast.hosts: ["192.168.100.34", "192.168.100.35","192.168.100.112"] # # Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1): # discovery.zen.minimum_master_nodes: 2 # # For more information, consult the zen discovery module documentation. # # ---------------------------------- Gateway ----------------------------------- # # Block initial recovery after a full cluster restart until N nodes are started: # #gateway.recover_after_nodes: 3 # # For more information, consult the gateway module documentation. # # ---------------------------------- Various ----------------------------------- # # Require explicit names when deleting indices: # #action.destructive_requires_name: true
启动即可,机器之间会自动发现,并联系。
这里有一个需要注意的问题:
如果第二台机器上的ES是从第一台机器上复制过去的,如果在data下有数据的话,请一定要清除掉,具体报什么错不记得了,但报错的话,注意下这一点。
然后,访问:hostA:9200/_cluster/healthy?pretty
{ "cluster_name" : "elasticsearch", "status" : "green", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 26, "active_shards" : 52, "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" : 100.0 }
上面需要注意节点:
- 集群健康状态:这时候应该是status:green。
- 集群节点个数:number_of_nodes : 2
- 活跃的分片是主分片数量的2倍,因为我这边只有两台数据节点
- 未分配的分片数目是0:unassigned_shards。
满足上面这四点,集群才算真正搭建成功。