Docker部署Elasticsearch集羣、負載均衡

部署步驟

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章