• 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

  • 相关阅读:
    【转】C#中Serializable序列化实例详解
    【转】c# [Serializable]的作用
    【转】垂直分库和水平分库
    js数组歌
    好用的漂浮广告 jquery
    详解Vue 开发模式下跨域问题
    老项目用webpack中文乱码问题解决记录
    Vuex异步请求数据通过computed计算属性值
    js数组操作
    Vuex速学篇:(2)利用state保存新闻数据
  • 原文地址:https://www.cnblogs.com/star8521/p/15670458.html
Copyright © 2020-2023  润新知