Elasticsearchを学ぶにはこの記事で十分です
1.ESの紹介
Elasticsearch は、Apache Lucene に基づくオープンソースの検索エンジンです。Lucene は、これまでで最も先進的で、最もパフォーマンスが高く、最も包括的な検索エンジン ライブラリであると考えられます。特徴: 分散型リアルタイム ファイル ストレージ、各フィールドはインデックス付けされ検索可能 分散型リアルタイム分析検索エンジン – 不規則なクエリに対して数百台のサーバーに拡張可能、PB レベルの構造化または非構造化データを処理 Elasticsearch これも Java で開発されており、以下を使用しますLucene はすべてのインデックス作成および検索機能を実装するコアですが、その目的は、シンプルな RESTful API を通じて Lucene の複雑さを隠し、全文検索をシンプルにすることです。
2. 単一 ES インストール
1.ESダウンロード
ES公式サイト:ElasticSearch公式サイト
2.インストール
1.アップロード後解凍します
解凍コマンド:tar -zxvf elasticsearch-7.4.2-linux-x86_64.tar.gz
解凍されたファイルを /usr/local/ ディレクトリに移動します。mv elasticsearch-7.4.2 /usr/local/
2. ES ディレクトリの概要
- bin: 実行ファイルが入っており、es を実行するためのコマンドが
スクリプトファイルなどを含めて入っています。 - config: 設定ファイルのディレクトリ
- jdk:java環境
- lib: 依存するjar、クラスライブラリ
- ログ: ログ ファイル
- モジュール:es 関連モジュール
- プラグイン:自分で開発できるプラグイン
- data: このディレクトリは存在しません。自分で作成します。後で ->mkdir データを使用します。これはインデックス ディレクトリとして使用されます。
3. コア構成ファイル elasticarch.yml を変更します。
-
クラスター名を変更します。デフォルトは elasticsearch です。現在は単一のマシンですが、
デフォルトのマシンも存在します。 -
現在の s ノードに名前を付けます。名前は任意です。クラスタ環境にある場合は、
対応する名前が必要です。
vim config/elasticsearch.yml
-
データデータ格納アドレスの変更
-
ログデータの保存アドレスを変更する
/usr/local/elasticsearch-7.4.2/data
/usr/local/elasticsearch-7.4.2/logs
-
ネットワーク IP をバインドします。原理は Redis と同じです
-
デフォルトのポート番号。カスタマイズおよび変更可能
-
クラスターノード、最初に名前を以前のノード名に変更できます
4. JVMパラメータを変更する
デフォルトでは、xms と xmx は両方とも 1g です。仮想マシンのメモリはそれほど大きくありません。変更するだけです。オンライン環境のメモリが大きい場合は、変更する必要はありません。
5.ユーザーの追加
ES では root で es を操作することはできません。ユーザーを追加する必要があります。操作は次のとおりです。
#添加用户
useradd esuser
#授权
chown -R esuser:esuser /usr/local/elasticsearch-7.4.2
su esuser
whoami
6.ESを開始する
./elasticsearch
次のエラーが発生した場合は、
oot ユーザーに切り替えて、次のように構成を変更する必要があります。
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
vim /etc/sysctl.conf
vm.max_map_count=262145
忘れずsysctl -p
に更新して、
最後にもう一度始めてください。OK
7.テスト
仮想マシンの IP + ポート番号 9200 にアクセスします。次の意味は、停止しても OK です。
フォアグラウンドで開始されている場合は、 ctrl+c だけで停止します
。バックグラウンドで開始:
./elasticsearch -d
プロセスの強制終了を停止します:
jps
kill+プロセス番号
ポート番号の意味
- 9200: HTTP プロトコル、外部通信に使用されます。
- 9300: Tcp プロトコル、ES クラスター間の通信は 9300 を介して行われます
3. Elasticsearchクラスターの構築
1. まず 3 台のサーバーのクローンを作成します
2. ESクラスターの構築
環境整備
ホスト名 | IP |
---|---|
es01 | 192.168.92.110 |
es02 | 192.168.92.111 |
es03 | 192.168.92.112 |
2.1 3 つのサーバー (es01、es02、es03) でそれぞれ次の操作を実行します。
esのデータディレクトリに入り、ノードデータを削除します。
cd /usr/local/elasticsearch-7.4.2/data
rm nodes/ -rf
2.2 3 台のサーバー (es01、es02、es03 ノード) を運用する
構成ファイルを操作し、ESコア構成ファイル内のクラスターの名前の値を同じになるように変更します。
- つまり、cluster.name を my-application に変更します。
- node.name をそれぞれ次のように変更します: es-node1、es-node2、es-node3
vim /usr/local/elasticsearch-7.4.2/config/elasticsearch.yml
- 3 台のマシンはすべてマスターが有効になっており、データ
マスター: 将来マスター ノードになれることを示します
。 データ: ドキュメント データを保存するために使用されます。
node.master: true
node.data: true
- 3 つのステーションすべてにノード情報を設定します。
discovery.seed_hosts: ["192.168.92.110", "192.168.92.111","192.168.92.112"]
2.3 構成情報の表示
cd /usr/local/elasticsearch-7.4.2/config/
more elasticsearch.yml | grep ^[^#]
2.4 ESクラスタの起動
ユーザー esuser を個別に入力します
su esuser
./usr/local/elasticsearch-7.4.2/bin/elasticsearch
2.5 ESクラスターのテスト
4. ik中国語単語セグメンター
ikをインストールする
ik 中国語単語セグメンターと ES のバージョンは一貫している必要があり、インストール方法は同じです。
1. ik 中国語単語セグメンター (バージョン 6.4.3) をインストールします。
zip ファイルをサーバーにアップロードします
2.解凍してelasticsearchプラグインのikフォルダーに置きます。
yum install -y unzip zip
zip ツールをインストールします。すでにインストールされている場合はスキップできます。
unzip elasticsearch-analysis-ik-6.4.3.zip -d /usr/local/elasticsearch-6.4.3/plugins/ik
3. ES の ik ディレクトリに入ります
cd /usr/local/elasticsearch-6.4.3/plugins/ik
4.ESを再起動する
jps
kill ***
su esuser
cd /usr/local/elasticsearch-6.4.3/bin
./elasticsearch -d
ik 中国語単語セグメンターを使用する
2.1 単語セグメンタ: ik_max_word
この単語セグメンターは、テキストを最も細かい粒度で分割します。たとえば、「中華人民共和国国歌」を「
中華人民共和国」、「中華人民共和国」、「中国」、「中国語」、「人民共和国」に分割します。中華民国」、「人民」、「人民」、「人民」、「共和国」、「共和国」、「和」、「国」、「国歌」
2.1 トークナイザー: ik_smart
このトークナイザーはテキストを最も粗い粒度に分割します。
5. Logstash データの同期
1.logstash の概要
Logstash は、リアルタイム パイプライン機能を備えたオープンソース データ収集エンジンです。Logstash は、異種データ ソースからのデータを動的に統合し、選択した宛先にデータを標準化します。
Logstash は、複数のデータ ソースから同時にデータを取得し、変換して、お気に入りの「ストレージ」に送信できるオープン ソースのサーバー側データ処理パイプラインです。(もちろん、私のお気に入りは Elasticsearch です)
データ収集: Elasticsearch をデータベースから収集して、
同期境界として ID (推奨されません。変更されたデータは認識されません) または update_time を自動インクリメントします。
プラグイン logstash-input-jdbc を通じて直接使用できます。 Elasticsearch の新バージョンと統合される
logstash を使用する場合 Elasticsearch のバージョン番号と一致するようにする
2.logstashのインストール
2.1 (前提条件は jdk がインストールされていることです) logstash、mysql ドライバーをアップロードします
2.2 logstash 同期構成
-
logstash を解凍します。
tar -zxvf logstash-6.4.3.tar.gz
-
logstash を移動します。
mv logstash-6.4.3 /usr/local/
-
このディレクトリを入力してください:
cd /usr/local/logstash-6.4.3/
-
フォルダー同期を作成し、関連する同期構成をこのフォルダーの下に配置します。
mkdir sync
-
構成ファイルを作成します (後で編集するので、ここで作成します)。
vim logstash-db-sync.conf
-
データベースドライバーを現在のディレクトリ (cp /home/software/mysql-connector-java-5.1.41.jar) にコピーします。
-
SQL ストレージ ファイルを作成します: foodie-items.sql
SELECT i.id AS itemId, i.item_name AS itemName, i.sell_counts AS sellCounts, ii.url AS imgUrl, tempSpec.price_discount AS price, i.updated_time AS updated_time FROM items i LEFT JOIN items_img ii ON i.id = ii.item_id LEFT JOIN (SELECT item_id,MIN(price_discount) as price_discount FROM items_spec GROUP BY item_id ) tempSpec ON i.id = tempSpec.item_id WHERE ii.is_main = 1 AND i.updated_time >= :sql_last_value
-
構成ファイル logstash-db-sync.conf を変更します。
vim logstash-db-sync.conf
input {
jdbc {
# 设置 MySql/MariaDB 数据库url以及数据库名称
jdbc_connection_string => "jdbc:mysql://192.168.92.110:3306/foodie-shop-dev?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true"
# 用户名和密码
jdbc_user => "root"
jdbc_password => "root"
# 数据库驱动所在位置,可以是绝对路径或者相对路径
jdbc_driver_library => "/usr/local/logstash-6.4.3/sync/mysql-connector-java-5.1.41.jar"
# 驱动类名
jdbc_driver_class => "com.mysql.jdbc.Driver"
# 开启分页
jdbc_paging_enabled => "true"
# 分页每页数量,可以自定义
jdbc_page_size => "1000"
# 执行的sql文件路径
statement_filepath => "/usr/local/logstash-6.4.3/sync/foodie-items.sql"
# 设置定时任务间隔 含义:分、时、天、月、年,全部为*默认含义为每分钟跑一次任务
schedule => "* * * * *"
# 索引类型
type => "_doc"
# 是否开启记录上次追踪的结果,也就是上次更新的时间,这个会记录到 last_run_metadata_path 的文件
use_column_value => true
# 记录上一次追踪的结果值
last_run_metadata_path => "/usr/local/logstash-6.4.3/sync/track_time"
# 如果 use_column_value 为true, 配置本参数,追踪的 column 名,可以是自增id或者时间
tracking_column => "updated_time"
# tracking_column 对应字段的类型
tracking_column_type => "timestamp"
# 是否清除 last_run_metadata_path 的记录,true则每次都从头开始查询所有的数据库记录
clean_run => false
# 数据库字段名称大写转小写
lowercase_column_names => false
}
}
output {
elasticsearch {
# es地址
hosts => ["192.168.92.110:9200"]
# 同步的索引名
index => "foodie-items"
# 设置_docID和数据库中的id保持相同
document_id => "%{id}"
# document_id => "%{itemId}"
}
# 日志输出
stdout {
codec => json_lines
}
}
2.3 ログスタッシュを起動する
bin ディレクトリを入力します。cd /usr/local/logstash-6.4.3/bin
logstash を開始します:./logstash -f /usr/local/logstash-6.4.3/sync/logstash-db-sync.conf
バックグラウンドで開始します:nohup ./logstash -f /usr/local/logstash-6.4.3/sync/logstash-db-sync.conf > logstash.log 2>&1 &
Logstash は新しく追加および変更されたデータのみを同期できますが、データベースで削除されたデータは ES に同期されないため、データベースで削除されたデータは
時刻を更新することによってのみ ES で論理的に更新されます。
6. ElasticSearch 視覚化プラグインをインストールします: es-head
1. es-headerをダウンロードして解凍します。
2.node.jsをインストールする
node.jsのダウンロード。
ダウンロードしてインストールするだけです
3.node.jsで以下のコマンドを実行します。
es-header ディレクトリを入力します (Shift キーを押しながらディレクトリ内で右クリックし、PowerShell ウィンドウを開きます)
npm install
npm run start
4. クロスドメインの設定
http://localhost:9100/ にアクセスしてクロスドメインを見つけます
- 次のように es core 構成ファイルと elasticsearch.yml を入力して、クロスドメイン構成を追加します。
http.cors.enabled: true
http.cors.allow-origin: "*"