es集群的搭建
- 基於單機搭建elasticsearch集群見官網 https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
本文旨在三台不同的服務器,搭建elasticsearch集群,版本為7.1.1
- 1、服務器列表即配置
172.168.50.40(8G), 172.168.50.41(16G), 172.168.50.240(8G)
服務器內存盡量不要低於4G
選用172.168.50.41作為master節點,
- 2、建立存放yml文件的目錄
建立文件夾,/root/elasticsearch(隨意即可),用於存放啟動elasticsearch容器的yml文件以及es的配置文件
mkdir /root/elasticsearch
- 3、創建docker-compose.yml文件
cd /root/elasticsearch
touch docker-compose.yml
- 4、docker-compose.yml 的文件內容如下
version: '3'
services:
elasticsearch: # 服務名稱
image: elasticsearch:7.1.1 # 使用的鏡像
container_name: elasticsearch # 容器名稱
restart: always # 失敗自動重啟策略
environment:
- node.name=node-41 # 節點名稱,集群模式下每個節點名稱唯一
- network.publish_host=172.168.50.41 # 用於集群內各機器間通信,對外使用,其他機器訪問本機器的es服務,一般為本機宿主機IP
- network.host=0.0.0.0 # 設置綁定的ip地址,可以是ipv4或ipv6的,默認為0.0.0.0,即本機
- discovery.seed_hosts=172.168.50.40,172.168.50.240,172.168.50.41 # es7.0之后新增的寫法,寫入候選主節點的設備地址,在開啟服務后,如果master掛了,哪些可以被投票選為主節點
- cluster.initial_master_nodes=172.168.50.40,172.168.50.240,172.168.50.41 # es7.0之后新增的配置,初始化一個新的集群時需要此配置來選舉master
- cluster.name=es-cluster # 集群名稱,相同名稱為一個集群, 三個es節點須一致
# - http.cors.enabled=true # 是否支持跨域,是:true // 這里設置不起作用,但是可以將此文件映射到宿主機進行修改,然后重啟,解決跨域
# - http.cors.allow-origin="*" # 表示支持所有域名 // 這里設置不起作用,但是可以將此文件映射到宿主機進行修改,然后重啟,解決跨域
- bootstrap.memory_lock=true # 內存交換的選項,官網建議為true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 設置內存,如內存不足,可以嘗試調低點
ulimits: # 棧內存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- /root/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 將容器中es的配置文件映射到本地,設置跨域, 否則head插件無法連接該節點
- esdata:/usr/share/elasticsearch/data # 存放數據的文件, 注意:這里的esdata為 頂級volumes下的一項。
ports:
- 9200:9200 # http端口,可以直接瀏覽器訪問
- 9300:9300 # es集群之間相互訪問的端口,jar之間就是通過此端口進行tcp協議通信,遵循tcp協議。
volumes:
esdata:
driver: local # 會生成一個對應的目錄和文件,如何查看,下面有說明。
-
另外兩台服務器也照着這個配置進行配置,但 publish_host,以及 node.name 需要改一下即可。
-
內存設置,三台服務器都需要進行設置
兩種設置內存的方式:
1、設置簡單,但機器重啟后需再次設置
sysctl -w vm.max_map_count=262144
2、直接修改配置文件, 進入sysctl.conf文件添加一行(解決容器內存權限過小問題)
vi /etc/sysctl.conf
sysctl vm.max_map_count=262144 # 添加此行
退出文件后,執行命令: sysctl -p 立即生效
-
然后三台服務器依次執行 docker-compose up -d
-
然后訪問 http://172.168.50.41:9200/_cluster/health?pretty 查看是否集群正常運行, 正常運行會返回如下信息
{
"cluster_name" : "es-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 0,
"active_shards" : 0,
"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
}
- elasticsearch.yml 文件內容如下:
network.host: 0.0.0.0
http.cors.enabled: true # 是否支持跨域
http.cors.allow-origin: "*" # 表示支持所有域名
- 上面說到的頂級volumes, 如何查看掛載卷在宿主機的位置呢?
# docker volume create elk_data // 創建一個自定義容器卷,本教程內不需要執行,我們的docker-compose.yml會幫我們自動執行改命令。
# docker volume ls // 查看所有容器卷,
# docker volume inspect elk_data // 查看指定容器卷詳情信息, 包括真實目錄
注意: 如果你要刪除一個掛載卷,或者重新生成,請執行刪除卷操作
# docker volume rm elk_data // 直接執行這個命令,同時會刪除文件,但是先刪除文件的話,必須再次執行此命令,否則可能導致該節點無法加入集群。
- 以上就是es集群的搭建,如果出現權限不足等簡單問題,可以百度自行解決。