准備
-
三台機器
IP HOSTANME OS 是否可成為主節點 172.16.241.2 linux1 centos8 是 (active) 172.16.241.3 linux2 centos8 是 172.16.241.4 linux3 centos8 是 -
Es不允許使用root啟動,故而創建用戶和組(三台機器)
groupadd es useradd es -g es -p es su es
-
設置系統配置(切換root用戶)
vi /etc/sysctl.conf #設置如下 vm.max_map_count=262144 #執行生效 sysctl -p vi /etc/security/limits.conf #增加如下內容 # * 代表所有,可以修改為用戶es * soft nproc 4096 * hard nproc 4096
-
打開linux1機器,進入/home/es/目錄,執行如下指令:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.3-linux-x86_64.tar.gz wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.3-linux-x86_64.tar.gz.sha512 shasum -a 512 -c elasticsearch-7.13.3-linux-x86_64.tar.gz.sha512 // 如找不到指令,使用yum install -y perl-Digest-SHA 安裝 tar -xzf elasticsearch-7.13.3-linux-x86_64.tar.gz
-
使用scp指令分發elasticsearch-7.13.3到其他機器上
-
scp傳文件到linux2,linux3
scp -r elasticsearch-7.13.3 root@linux2:/home/es scp -r elasticsearch-7.13.3 root@linux3:/home/es
-
配置
-
修改config下的elasticsearch.yaml文件
- linux1(master)
#集群配置 cluster: name: xpp-es-cluster initial_master_nodes: - linux1 path: data: /home/es/elasticsearch-7.13.3/data logs: /home/es/elasticsearch-7.13.3/data node: name: linux1 network: host: linux1 discovery.seed_hosts: - linux1:9300 - linux2:9300 - linux3:9300
-
linux2
#集群配置 cluster: name: xpp-es-cluster initial_master_nodes: - linux1 path: data: /home/es/elasticsearch-7.13.3/data logs: /home/es/elasticsearch-7.13.3/data node: name: linux2 roles: [data] network: host: linux2 discovery.seed_hosts: - linux1:9300 - linux2:9300 - linux3:9300
-
linux3
#集群配置 cluster: name: xpp-es-cluster initial_master_nodes: - linux1 path: data: /home/es/elasticsearch-7.13.3/data logs: /home/es/elasticsearch-7.13.3/data node: name: linux3 roles: [data] network: host: linux3 discovery.seed_hosts: - linux1:9300 - linux2:9300 - linux3:9300
-
先啟動linux1下的es,再啟動linux2, linux3
./elasticsearch -d
-
訪問http://linux1:9200
使用chrome插件elasticsearch head插件訪問如圖:
-
創建索引book, user, shopping
curl --location --request PUT 'http://linux1:9200/book' curl --location --request PUT 'http://linux1:9200/user' curl --location --request PUT 'http://linux1:9200/shopping'
-
查看集群狀態
索引已經創建,並且數據分片沒有問題。綠色代表健康。
-
創建Doc
curl --location --request POST 'http://linux1:9200/shopping/_doc/' \ --header 'Content-Type: application/json' \ --data-raw '{ "title":"華為手機魅藍", "category":"華為", "images":"http://www.gulixueyuan.com/xm.jpg", "price": 4999.00 }'
-
返回結果
{ "_index": "shopping", "_type": "_doc", "_id": "XtfNw3oBpJTUlLZO2-rD", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 2, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }
三節點的集群搭建完畢,該集群有什么問題?如果master掛掉還能否正常提供服務?
-
答案是否定的,具體是為什么呢?
主要跟角色有關,linux2和linux3都是非master節點,當我把linux1(master)停掉,集群就沒有了master,所以無法對外提供服務。
三節點中官方建議每個節點都要設置master角色,這樣linux1(master)不能提供服務,集群會選舉新的master對外服務。來模擬一下。
-
首先我要修改linux2和linux3的配置
node.roles:[data] 修改為node.roles:[data, master]
-
重啟linux2和linux3的es
-
停止linux1(原master)服務
-
打開elasticseatch head查看
linux3已經被選舉為master節點。
-
重啟linux1節點后,他不會重新變為master節點,而是作為從節點。
-