Elasticsearch搜索引擎集羣部署

​一. 部署集羣

user用戶下java

unzip elasticsearch_bak.zip #解壓引擎文件
# 修改默認的配置文件
cd elasticsearch_bak/config
vi elasctsearch.yml
 cluster.name: es-zl  #修改集羣名,全部節點配置的該名稱必須同樣
 node.name: es-46 #修改每一個節點的名稱,必須不一樣,以區分每一個節點
 node.master:true #是否可做爲主節點
 path.data: /data/es_data #es數據存放的位置
 network.host:127.17.30.46 #每一個節點的ip地址
 http.port: 9200  #節點的端口,必須相同,默認9200
 
 bootstrap.memory_lock: true
 bootstrap.system_call_filter: false  #內存鎖定,防止swap使es產生內存交互
 discovery.zen.ping.unicast.hosts:["127.17.30.44","127.17.30.45",,] #集羣master節點的ip,不須要全部節點的ip,其餘節點只要能與任意一個master節點通信,便可加入到該集羣當中
 discovery.zen.minimum_master_nodes:2 #當2個有資格成爲主節點的從節點認爲主節點掛了,則進行從新選主,通常設置爲(n/2)+1,防止es出現腦裂狀況
 gateway.recover_after_nodes: 3 #節點數量達到多少以後,進行數據恢復處理
 http.cors.enabled: true
 http.cors.allow-origin: "*"
 
vi yvm.options
 -Xms16g  #默認爲2g,可根據服務器內存,自行修改
 
#經過一下命令查看內存
cat /proc/cpuinfo | grep 'cpu cores' | wc -l #查看cpu核數
cat /proc/meminfo | grep MemTotal #只查看內存
free -h  #查看內存的使用
df -h  #查看硬盤存儲

注意:該操做必須在每臺服務器上都要部署,並不能在root用戶下操做,要在user下操做,若是沒有usr用戶,則建立。node

若是沒有操做權限,則執行:git

# root下,將文件權限設置爲duser用戶可操做
chown duser *
chgrp duser *

當不使用es遠程詞典時: github

修改elasticsearch-5.3.0/plugins/ik/config/IKAnalyzer.cfg.xmlbootstrap

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 擴展配置</comment>
                <!--用戶能夠在這裏配置本身的擴展字典 -->
        <entry key="ext_dict">custom/mydict.dic;custom/single_word_low_freq.dic</entry>
                 <!--用戶能夠在這裏配置本身的擴展中止詞字典-->
        <entry key="ext_stopwords">custom/ext_stopword.dic</entry>
                <!--用戶能夠在這裏配置遠程擴展字典 -->
       <!-- <entry key="remote_ext_dict">http://10.172.80.229:9301/mydict.dic</entry> -->
                <!--用戶能夠在這裏配置遠程擴展中止詞字典-->
       <!-- <entry key="remote_ext_stopwords">http://10.172.80.229:9301/stopword.dic</entry> -->
</properties>

說明:註釋後兩項便可vim

添加自定義同義詞bash

替換config/synonyms.txt文件服務器

synonyms.txt文件內格式,全部同義詞爲一行,且用 「, 」 隔開app

2、修改集羣配置

root用戶下cors

vi /etc/security/limits.conf
 #添加如下語句
 *      soft    nofile    65536
 *      hard    nofile    65536
 *      soft    nproc     65536
 *    hard    nproc  65536
 duser  soft    memlock   unlimited 
    duser  hard    memlock   unlimited 
vi /etc/sysctl.conf
 #修改如下語句
 vm.max_map_count=655360
 
sysctl -p

3、啓動集羣

user用戶下

cd elasticsearch_bak/bin
./elasticsearch  -d #後臺啓動集羣
curl 172.17.30.45:9200/_cat/nodes #查看全部節點,*爲主節點
# 啓動不了時候,查看es-log

4、搜索部署

user用戶下的操做,查看es-log

vi index_search_mapping.sh
 #修改的ip和端口與集羣同樣
 curl -XPUT "http://10.25.114.90:9200/index" 
 {
        settings": {
        "number_of_shards": 6, #主分片數量,通常爲 服務器總核數
        "number_of_replicas": 2, #副本分片的數量,防止數據丟失
    }

注意:分詞器anslyzer能夠根據實際狀況進行修改、刪除和添加

添加刪除字段 當須要添加字段時,只要在如下位置添加便可

"mappings": {
    "index": {
      "properties": {
   "id": {
          "type": "keyword"
        },
       "": {  #須要添加的字段名
           "type":"" #添加的字段的約束條件
       }
       }
      }
     }

注意:修改某個文件的字段以前,須要先刪除該文件的core

從新啓動搜索時,也須要進行如下步驟

curl -XDELETE "http://172.19.30.45:9200/index"
#修改完以後,從新運行該文件
sh index_search_mapping.sh

5、查詢啓動結果

curl http://ip:9200/index?pretty#查詢字段
curl http://ip:9200/_cat/nodes #查詢節點
curl http://ip:9200/_cat/health #查詢集羣健康,green
curl http://ip:9200/_cat/shards #查詢集羣分片狀態

6、數據量查詢

curl http://ip:9200/one_index/_stats #查詢某一個index下的數據量
curl http://ip:9200/one_index,two_index/_stats #查詢多個index的數據量,使用,隔開
curl http://ip:9200/_all/_stats  #查詢全部index下的數據量
# 返回search、fetch、get、index、bulk、segment、counts
curl http://ip:9200/_cat/count/index #只查詢某個index下的文檔數,若是不加index,則查詢全部的index的文檔總數

7、search-guard爲es集羣配置auth

一、安裝search-guard插件和ssl插件

查詢es的版本

curl ip:9200
# 結果中的number數據即表明版本號

安裝search-guard https://repo1.maven.org/maven...

找到對應的版本,下載便可

或者使用命令行下載,es目錄下

bin/elasticsearch-plugin install -b com.floragunn:search-guard-5:5.3.0-12

安裝search-guard-ssl https://repo1.maven.org/maven...

命令行

bin/elasticsearch-plugin install -b com.floragunn:search-guard-ssl:5.3.0-22

注意:當es版本較高時,可能並不須要這兩個都存在,取search-guard便可

二、生成es證書文件

下載search-guard源碼工具,生成證書的工具

git clone https://github.com/floragunncom/search-guard-ssl.git

修改ca配置

cd search-guard-ssl/example-pki-scripts/etc/
vi root-ca.conf  # 根證書配置
 0.domainComponent       = "www.test.com」    # 域名
 1.domainComponent       = "www.test.com"    # 域名
 organizationName        = "Test"            # 組織名稱
 organizationalUnitName  = "Test Root CA"    # 組織單位名稱
 commonName              = "Test Root CA"    # 通用名稱
 
vi signing-ca.conf # 簽名證書配置
 0.domainComponent       = "www.test.com」    # 域名
 1.domainComponent       = "www.test.com"    # 域名
 organizationName        = "Test"            # 組織名稱
 organizationalUnitName  = "Test Signing CA" # 組織單位名稱
 commonName              = "Test Signing CA" # 通用名稱

注意

以上信息填寫,必須保證和生成證書時信息一致

修改sh文件 返回example-pki-scripts目錄下,修改example.sh文件:

#!/bin/bash
set -e
./clean.sh
./gen_root_ca.sh 12345678 12345678
./gen_node_cert.sh 0 12345678 12345678&& ./gen_node_cert.sh 1 12345678 12345678 &&  ./gen_node_cert.sh 2 12345678 12345678
./gen_client_node_cert.sh test 12345678 12345678
./gen_client_node_cert.sh test 12345678 12345678

參數說明

./gen_root_ca.sh 12345678 12345678

第一個參數爲CA_PASS,即CA密碼(根證書密碼)

第二個參數爲TS_PASS,即TS密碼(truststore,信任證書密碼)

./gen_node_cert.sh 0 12345678 12345678

第一個參數爲node編號,生成證書後的文件名爲node-0*

第二個參數爲KS_PASS(keystore文件密碼)

第三個參數爲CA_PASS

./gen_client_node_cert.sh test 12345678

第一個參數爲客戶端節點名稱,生成證書後的文件名爲test*

第二個參數爲KS_PASS

第三個參數爲CA_PASS

生成證書,運行example.sh

sh example.sh
# 在當前目錄下會生成證書文件

三、配置es,啓動search-guard

將生成的各個節點的證書,分別copy到各個節點上

# 將node-0-keystore.jks和truststore.jks複製到es的config目錄下
cp node-0-keystore.jks ~/elasticsearch/config/
cp truststore.jks ~/elasticsearch/config/
# 將test-keystore.jks和truststore.jks複製到es的plugins/search-guard-2/sgconfig目錄下
cp test-keystore.jks ~/elasticsearch/plugins/search-guard-2/sgconfig/
cp truststore.jks ~/elasticsearch/plugins/search-guard-2/sgconfig/

注意

保持證書的一致性,所以只須要在一臺機器上生成CA證書便可

修改es的配置文件config/elaticsearch.yml

在以前修改的基礎上,增長以下配置

配置ssl
searchguard.ssl.transport.enabled: true
searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks
searchguard.ssl.transport.keystore_password: 12345678
searchguard.ssl.transport.truststore_filepath: truststore.jks
searchguard.ssl.transport.truststore_password: 12345678
searchguard.ssl.transport.enforce_hostname_verification: false
searchguard.ssl.transport.resolve_hostname: false
# 配置https
# http配置,這裏我只是爲了測試方便,配置完,應該設置爲true
searchguard.ssl.http.enabled: false
searchguard.ssl.http.keystore_filepath: node-0-keystore.jks
searchguard.ssl.http.keystore_password: 12345678
searchguard.ssl.http.truststore_filepath: truststore.jks
searchguard.ssl.http.truststore_password: 12345678
# CN爲生成CA證書時填寫的信息,即./gen_client_node_cert.sh test 12345678 命令的第一個參數
searchguard.authcz.admin_dn:
- CN=test, OU=client, O=client, L=Test, C=DE

啓動es

四、將search-guard的配置寫入es中

添加權限

chmod -R 777 plugins/search-guard-5/tools/sgadmin.sh

配置格式

./plugins/search-guard-5/tools/sgadmin.sh -cn clustername -h hostname -cd plugins/search-guard-5/sgconfig -ks plugins/search-guard-5/sgconfig/admin-keystore.jks -kspass password -ts plugins/search-guard-5/sgconfig/truststore.jks -tspass password -nhnv

注意

clustername爲集羣的名稱

hostname爲elasticsearch.yml 文件中 network.host 的值

password生成證書設置的密碼

以上配置生成的命令爲

./plugins/search-guard-5/tools/sgadmin.sh -cn es-nlp -h 192.168.124.18 -cd plugins/search-guard-5/sgconfig -ks plugins/search-guard-5/sgconfig/test-keystore.jks -kspass 12345678 -ts plugins/search-guard-5/sgconfig/truststore.jks -tspass 12345678 -nhnv

五、添加es用戶及密碼

生成md5加密密碼

chmod -R 777 plugins/search-guard-2/tools/hash.sh
cd plugins/search-guard-2/tools/
plugins/search-guard-2/tools/hash.sh -p 123456
# 保存生成的hash密碼

添加用戶及密碼

vim plugins/search-guard-5/sgconfig/sg_internal_users.yml
sunww:
  hash: 加密後的字符串
  # password: 123456
  
# 最後一行時password提示,防止忘記

添加用戶的權限

vim plugins/search-guard-5/sgconfig/sg_roles_mapping.yml
ag_all_access:
  users:
    - admin
    - sunww
# 添加全部權限給sunww用戶

從新將配置寫入es中生效

./plugins/search-guard-5/tools/sgadmin.sh -cn es-nlp -h 192.168.124.18 -cd plugins/search-guard-5/sgconfig -ks plugins/search-guard-5/sgconfig/test-keystore.jks -kspass 12345678 -ts plugins/search-guard-5/sgconfig/truststore.jks -tspass 12345678 -nhnv

六、測試

curl http://sunww:123456@127.0.0.1:9200
curl -u sunww:123456 http://127.0.0.1:9200
curl --user sunww:123456 http://127.0.0.1:9200

過兒,你學廢了嗎?

相關文章
相關標籤/搜索