ELasticsearch的集群是由多個節點組成的,通過cluster.name設置集群名稱,並且用於區分其它的集群,每個節點通過node.name指定節點的名稱。
在Elasticsearch中,節點的類型主要有4種:
master節點
- 配置文件中node.master屬性為true(默認為true),就有資格被選為master節點。
- master節點用於控制整個集群的操作。比如創建或刪除索引,管理其它非master節點等。
data節點
- 配置文件中node.data屬性為true(默認為true),就有資格被設置成data節點。
- data節點主要用於執行數據相關的操作。比如文檔的CRUD。
客戶端節點
- 配置文件中node.master屬性和node.data屬性均為false。
- 該節點不能作為master節點,也不能作為data節點。
- 可以作為客戶端節點,用於響應用戶的請求,把請求轉發到其他節點
部落節點
- 當一個節點配置tribe.*的時候,它是一個特殊的客戶端,它可以連接多個集群,在所有連接的集群上執行搜索和其他操作。
搭建集群
准備3台服務器,去拉鏡像
[root@iZ1la3d1xbmukrZ config]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/elasticsearch 5.6.12 de05e10fa879 17 months ago 486 MB [root@iZ1la3d1xbmukrZ config]#
創建配置文件,做數據卷掛載
[root@iZbp143t3oxhfc3ar7jey0Z ~]# mkdir /es/config -p [root@iZbp143t3oxhfc3ar7jey0Z ~]# cd /es/config/
然后創建一個yml配置文件里面的內容為
cluster.name: elasticsearch-cluster node.name: es-node1 network.host: 0.0.0.0 network.publish_host: 服務器1的ip http.port: 9200 transport.tcp.port: 9300 http.cors.enabled: true http.cors.allow-origin: "*" node.master: true node.data: true discovery.zen.ping.unicast.hosts: ["服務器1的ip:9300","服務器2的ip:9300","服務器3的ip:9300"] discovery.zen.minimum_master_nodes: 2
注意:最好要3台服務器,要是2台的話,會出現腦裂問題。這是docker的配置,假如你是通過壓縮包的方式,就要如下:
#node01的配置: cluster.name: es-itcast-cluster node.name: node01 node.master: true node.data: true network.host: 0.0.0.0 http.port: 9200 discovery.zen.ping.unicast.hosts: ["192.168.40.133","192.168.40.134","192.168.40.135"] discovery.zen.minimum_master_nodes: 2 http.cors.enabled: true http.cors.allow-origin: "*"
是有所不同的,不然集群之間不會通的,我也這樣試過
[root@dalianpai config]# docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /es/config/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES03 de05e10fa879 c5b68fc9d1b44c5792788102d79e0605758491c46fbcf4448d7edf93e3476f6e
啟動3台服務器,查看日志
都是我阿里雲的地址,就不顯示了。