集羣搭建和啓動
對應考綱裏的
Installation and Configuration
Deploy and start an Elasticsearch cluster that satisfies a given set of requirements
一般有幾種方式來deploy and start 一個 ES集羣,對於考試來說應該是Linux裏的兩種RPM包和tar包安裝,畢竟包括windows、Mac在內的系統並不是搭建搜索服務器的常用環境,而docker並不是elastic的技術棧(雖然他們也有從docker image到docker-compose的支持)
Linux環境
環境準備
sudo yum install -y wget tar shasum
tar包安裝方式
官網步驟
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.6.0-linux-x86_64.tar.gz.sha512
tar -xzf elasticsearch-7.6.0-linux-x86_64.tar.gz
cd elasticsearch-7.6.0/
- 從官網地址下載對應的tar包以及它的sha512的驗證文件
- 或者也可以直接下載這個包,裏面只有純開源功能的部分,不過考試的話後面可能會考到權限設置之類的只在xpack裏面的功能,不大可能需要這個包https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-7.6.0-linux-x86_64.tar.gz
- tar包的格式是elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz,或者elasticsearch-oss-${ES_VERSION}-linux-x86_64.tar.gz
- 通過shasum來驗證這個jar包的合法性
- 解壓縮這個tar包並進入項目文件夾,這個文件夾下面會用$ES_HOME表示
- 記得給整個文件夾賦予相應的權限,特別是$ES_HOME/data和$ES_HOME/log,或者相應的配置的data和log目錄
- 運行命令
sudo echo vm.max_map_count=655360 >> /etc/sysctl.conf
- 然後把修改配置文件
sudo vi /etc/security/limits.conf
- 把兩個nofile的值改成65536
- * soft nofile 65535
- * hard nofile 65535
- 添加 memlock unlimited的配置
- * hard memlock unlimited
- * soft memlock unlimited
- 把兩個nofile的值改成65536
- 執行啓動命令
./bin/elasticsearch
,如果要求後臺運行則需要加參數-d
寫作./bin/elasticsearch -d
- ES默認不可以用root賬戶,某些舊的版本可以通過修改jvm參數或者直接在啓動參數裏添加
-Des.insecure.allow.root=true
來強行使用root啓動 - 但是在比較新的版本里這個方式已經失效了,只能用非root用戶啓動
- ES默認不可以用root賬戶,某些舊的版本可以通過修改jvm參數或者直接在啓動參數裏添加
- 如果是前臺運行,es節點的日誌會直接輸出在屏幕上,同時寫在$ES_HOME/logs/${clusterName}.log
- 檢查一下集羣狀態,是否正常啓動
curl ${ip}:9200
,看是否會有顯示集羣信息的json返回,如果有就說明啓動正常了{ "name" : "node1", // 當前訪問節點名字 "cluster_name" : "docker-cluster", // 集羣名稱 "cluster_uuid" : "wZFXKEITRKWVg36vUHWgyQ", // 集羣id(自動生成) "version" : { "number" : "7.6.0", // 節點ES版本 "build_flavor" : "oss", // 存儲方式 "build_type" : "docker", // 構建方式(我用的docker,官網的例子用的tar包) "build_hash" : "7f634e9f44834fbc12724506cc1da681b0c3b1e3", // 構建hash "build_date" : "2020-02-06T00:09:00.449973Z", // 構建時間 "build_snapshot" : false, // 是否snapshot "lucene_version" : "8.4.0", // lucene版本 "minimum_wire_compatibility_version" : "6.8.0", // 最低寫入版本 "minimum_index_compatibility_version" : "6.0.0-beta1" // 最低索引版本,這倆我也不太清楚啥意思,目測是最小支持的ES節點版本 }, "tagline" : "You Know, for Search" }
RPM包安裝
官網步驟有倆:
直接yum install
sudo vim /etc/yum.repos.d/elasticsearch.repo
把下面這些玩意填在裏面,保存並退出[elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md
sudo yum install --enablerepo=elasticsearch elasticsearch
手動下載rpm包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-x86_64.rpm
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-x86_64.rpm.sha512
shasum -a 512 -c elasticsearch-7.6.0-x86_64.rpm.sha512
sudo rpm --install elasticsearch-7.6.0-x86_64.rpm
#當然,rpm包也有開源版的,https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-7.6.0-x86_64.rpm
命名格式和tar包類似,elasticsearch-${ES_VERSION}-linux-x86_64.rpm
然後就是正常的運行systemctl啓動命令了,和通過systemctl安裝啓動其他服務一樣
sudo /bin/systemctl daemon-reload // 重新家在systemctl配置
sudo systemctl enable elasticsearch.service // ES服務保活開啓
sudo systemctl start elasticsearch.service // 開啓ES服務
sudo systemctl stop elasticsearch.service // 關閉ES服務
通過RPM包安裝和tar包安裝之後配置文件包括ES的一些功能性文件(夾)的位置會有所不同,具體見下一節。
運行完systemctl start elasticsearch.service
之後有兩種方式看ES節點是否正常啓動
- 運行
systemctl start elasticsearch.service
,如果成功了會打印相應的start狀態的日誌出來 - 和tar包啓動一樣,運行
curl ${ip}:9200
看是否會出現集羣啓動成功的信息
在系統配置文件裏(/etc/sysconfig/elasticsearch),RPM包安裝還支持一些其他的環境配置
key | 值 |
---|---|
JAVA_HOME | 自行指定的Javahome,替代安裝完之後默認的路徑 |
MAX_OPEN_FILES | 最大可打開文件數?默認65535 |
MAX_LOCKED_MEMORY | 最大可鎖定內存數,建議設成unlimited用來配合配置文件裏的bootstrap.memory_lock |
MAX_MAP_COUNT | 最大內存map空間,不知道幹嘛用的,官網提供的文檔也打不開。大概說的是如果用mmapfs的方式存儲數據,那麼記得在systemctl啓動ES之前把它設大點,默認262144 |
ES_PATH_CONF | 自定義的配置文件路徑,不設就在/etc/elasticsearch目錄裏面 |
ES_JAVA_OPTS | 其他的Java啓動參數。ES是個Java項目,所以這裏可以添加一些自定的Java啓動參數。我能想到的就是一些Java agent路徑之類的東西 |
RESTART_ON_UPGRADE | 是否在手動安裝升級之後自動重啓ES實例,默認false |
tar包安裝和RPM包安裝的區別
區別 | tar包 | rpm包 |
---|---|---|
home | tar包解壓縮的地方$ES_HOME | /usr/share/elasticsearch |
bin | $ES_HOME/bin | /usr/share/elasticsearch/bin |
conf | $ES_HOME/conf | /etc/elasticsearch,也可以配置爲環境變量 ES_PATH_CONF |
data | $ES_HOME/data | /var/lib/elasticsearch |
logs | $ES_HOME/logs | /var/log/elasticsearch |
jdk | – | /usr/share/elasticsearch/jdk |
plugins | $ES_HOME/plugins | /usr/share/elasticsearch/plugins |
簡單講用tar包安裝的時候,tar包解壓縮的folder就是$ES_HOME,而用rpm包安裝的時候,ES的各個文件夾會到處散,不過主要會在/usr/share/elasticsearch裏面
安裝完成
按照官網的說法,安裝完成基本的安裝之後,理論上應該是對ES開啓守護進程或者做保活。
通過tar包安裝的話,運行./bin/elasticsearch -d -p pid
讓ES節點運行在指定的pid上,後面可以通過運行pkill -F pid
來停用ES節點,不過我想大家應該更多的會是直接kill -9吧。😛
給個參考命令,當然這樣停止ES節點不夠優雅。ps -ef | grep elastic | grep -v grep | awk '{ print $2 }'
對於RPM包安裝的就不用那麼麻煩
用sudo systemctl enable elasticsearch.service
做保活和自啓動
用sudo systemctl stop elasticsearch.service
做服務停止
docker 方式
雖然我個人認爲主流方式(考試會考)的是Linux環境的安裝,但是作爲越來越火的docker技術還是想提一嘴。
- 下docker鏡像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.0
- 直接單節點啓動
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.0
- 這裏可以看到除了ES默認端口暴露之外,還有個"discovery.type=single-node",這就是單節點啓動的時候不去嘗試連接其他節點的意思
- 還有直接docker-compose方式啓動多節點的,配置文件太長了就不貼了,有興趣的同學可以自己下下來玩玩