Docker部署Elasticsearch叢集、負載均衡
阿新 • • 發佈:2021-12-10
部署步驟
docker安裝部署
#更新yum源(一下均為root使用者) yum update #安裝docker yum remove docker-ce -y && yum install docker-ce -y && service docker start #docker啟動 systemctl start docker #docker設定開機啟動 systemctl enable docker #docker停止 systemctl stop docker #有時候需要使用這種命令啟動 systemctl start docker.service systemctl enable docker.service
docker映象配置
在宿主機器編輯檔案:vim /etc/docker/daemon.json#請在該配置檔案中加入(沒有該檔案的話,請先建一個):
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
Elasticsearch安裝部署
拉取指定版本映象
#拉取映象 docker pull elasticsearch:7.7.0
從官網拉取最新(目前最新是7.16.0)
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.16.0
docker images 命令檢視映象列表docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
elasticsearch 7.7.0 7ec4f35ab452 15 months ago 757MB
初始化es配置檔案
-- 拉取es映象 docker pull elasticsearch:7.2.0 --建立掛載目錄[data:存放索引資料,plugins:存放es外掛] mkdir -p /esdata/elasticsearch mkdir -p /esdata/elasticsearch/data mkdir -p /esdata/elasticsearch/data/data1 mkdir -p /esdata/elasticsearch/data/data2 mkdir -p /esdata/elasticsearch/data/data3 mkdir -p /esdata/elasticsearch/plugins mkdir -p /esdata/elasticsearch/plugins/plugins1 mkdir -p /esdata/elasticsearch/plugins/plugins2 mkdir -p /esdata/elasticsearch/plugins/plugins3
-- 設定執行許可權 chmod 777 /esdata/elasticsearch/data/data1 chmod 777 /esdata/elasticsearch/data/data2 chmod 777 /esdata/elasticsearch/data/data3 --data1/data2/data3 分別建立es.yml [network.publish_host:填寫伺服器ip] vim /esdata/elasticsearch/config/es1.yml ->> cluster.name: elasticsearch-cluster cluster.initial_master_nodes : es-node1 node.name: es-node1 node.master: true node.data: true network.bind_host: 0.0.0.0 network.publish_host: 192.168.1.127 http.port: 9201 transport.tcp.port: 9301 http.cors.enabled: true http.cors.allow-origin: "*" discovery.zen.ping.unicast.hosts: ["192.168.1.127:9301","192.168.1.127:9302","192.168.1.127:9303"] vim /esdata/elasticsearch/config/es2.yml ->> cluster.name: elasticsearch-cluster node.name: es-node2 node.master: false node.data: true network.bind_host: 0.0.0.0 network.publish_host: 192.168.1.127 http.port: 9202 transport.tcp.port: 9302 http.cors.enabled: true http.cors.allow-origin: "*" discovery.zen.ping.unicast.hosts: ["192.168.1.127:9301","192.168.1.127:9302","192.168.1.127:9303"] vim /esdata/elasticsearch/config/es3.yml ->> cluster.name: elasticsearch-cluster node.name: es-node3 node.master: false node.data: true network.bind_host: 0.0.0.0 network.publish_host: 192.168.1.127 http.port: 9203 transport.tcp.port: 9303 http.cors.enabled: true http.cors.allow-origin: "*" discovery.zen.ping.unicast.hosts: ["192.168.1.127:9300","192.168.1.127:9301","192.168.1.127:9302"]
調高JVM執行緒數限制數量
vim /etc/sysctl.conf ->> vm.max_map_count=262144
重新整理配置
sysctl -p
服務部署
es叢集部署
# 服務1
docker run -e ES_JAVA_OPTS="-Xms2048m -Xmx2048m" \
-d -p 9201:9201 -p 9301:9301 \
-e ES_MIN_MEM=128m \
-e ES_MAX_MEM=4096m \
-v /esdata/elasticsearch/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /esdata/elasticsearch/data/data1/:/usr/share/elasticsearch/data/ \
-v /esdata/elasticsearch/plugins/plugins1/:/usr/share/elasticsearch/plugins \
--restart=always \
--name ES01 \
elasticsearch:7.2.0
# 服務2
docker run -e ES_JAVA_OPTS="-Xms2048m -Xmx2048m" \
-d -p 9202:9202 -p 9302:9302 \
-e ES_MIN_MEM=128m \
-e ES_MAX_MEM=4096m \
-v /esdata/elasticsearch/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /esdata/elasticsearch/data/data2/:/usr/share/elasticsearch/data/ \
-v /esdata/elasticsearch/plugins/plugins2/:/usr/share/elasticsearch/plugins \
--restart=always \
--name ES02 \
elasticsearch:7.2.0
# 服務3
docker run -e ES_JAVA_OPTS="-Xms2048m -Xmx2048m" \
-d -p 9203:9203 -p 9303:9303 \
-e ES_MIN_MEM=128m \
-e ES_MAX_MEM=4096m \
-v /esdata/elasticsearch/config/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /esdata/elasticsearch/data/data3/:/usr/share/elasticsearch/data/ \
-v /esdata/elasticsearch/plugins/plugins3/:/usr/share/elasticsearch/plugins \
--restart=always \
--name ES03 \
elasticsearch:7.2.0
防火牆設定
# 防火牆設定
firewall-cmd --add-port=9301/tcp
firewall-cmd --add-port=9302/tcp
firewall-cmd --add-port=9303/tcp
firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9201/tcp
firewall-cmd --add-port=9202/tcp
firewall-cmd --add-port=9203/tcp
firewall-cmd --complete-reload
確認叢集配置
在瀏覽器開啟 http://192.168.1.127:9200/_cat/nodes?pretty
IK分詞器安裝
# 進入容器 docker exec -it ES01 bash # 線上安裝 elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.2.0/elasticsearch-analysis-ik-7.2.0.zip
# 複製es1安裝的外掛到es2和es3 cp -rf /esdata/elasticsearch/plugins/plugins1/analysis-ik /home/creationpoint/software/elasticsearch/config/plugins2/ cp -rf /esdata/elasticsearch/plugins/plugins1/analysis-ik /home/creationpoint/software/elasticsearch/config/plugins3/ # 重啟es docker restart ES01 docker restart ES02 ES03
elasticsearch-head 部署
部署elasticsearch-head 便於管理es資料docker run -d \
--name=elasticsearch-head \
-p 9100:9100 \
-m 512m \
--memory-swap=1024m \
mobz/elasticsearch-head:5
確認效果
ES負載均衡
nginx配置es負載均衡修改nginx配置檔案
#修改nginx配置檔案
vim /home/jamelli/software/nginx/conf.d/default.conf
->>
upstream es{
least_conn; #把請求轉發給連線數較少的後端伺服器
server 192.168.1.127:9201;#ES對應的ip:port
server 192.168.1.127:9202;
server 192.168.1.127:9203;
}
server {
listen 9210;
server_name localhost;
underscores_in_headers on;
location / {
proxy_set_header Host $host:$server_port;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://es;
}
}
# 重新載入nginx使生效(二選一)
docker restart nginx
nginx -s reload
此刻訪問伺服器的9210埠會負載均衡到es叢集上,測試一下。看下圖可以看到已經可以輪詢es了
來源:https://www.iwmyx.cn/dockerbsesjqesfc.html
https://www.iwmyx.cn/zdockerzbselasticsearc.html
https://blog.csdn.net/Jamel_LiToo/article/details/110070741