容器化 部署es集群

公司手头上有千万级数据,起先用单机版es去入库这些数据,写到100多W,总是各种崩,分片时效,主分片丢失,status都是yellow->red。。。。  后面排查了大量的log后发现,还是因为单机版es的分片,以及副本机制在分片错误时候,没能恢复数据,导致整个节点损坏。。。。没办法,直接找了几台机器来,直接上分布式。。。。

        1、避免在不同机器上,环境不同导致后面各种灵异事件,直接用docker容器化技术,[具体安装参考其他教学]。

           拉取es 镜像  : 

            docker pull elasticsearch:7.6.0

          创建docker对应的路径目录

            mkdir -p /usr/local/docker/elasticsearch/config

            mkdir -p /usr/local/docker/elasticsearch/data

            mkdir -p /usr/local/docker/elasticsearch/plugins

          docker可读取es配置文件 

            echo "http.host: 0.0.0.0">>/usr/local/docker/elasticsearch/config/elasticsearch.yml

        这条命令要运行下,无权限访问很 坑~~~

             chmod -R 777 /usr/local/docker/elasticsearch/

2、命令执行完之后开始配置es的配置文件

#es集群名
cluster.name: my-es
#节点名称,不同节点不同名
node.name: node-1
node.master: true
#是否存储数据
node.data: true
#你有几台机器就配置几台数量
node.max_local_storage_nodes: 3
#给当前节点自定义属性(可以省略)
#node.attr.rack: r1
#数据存档位置
path.data: /usr/share/elasticsearch/data
#日志存放位置
path.logs: /usr/share/elasticsearch/log
#默认true 
#bootstrap.memory_lock: true

#为避免麻烦直接0.0.0.0
network.bind_host: 0.0.0.0
#当前节点ip
network.publish_host: 你的ip
#设置映射端口
http.port: 9200
#内部节点之间沟通端口
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"

# node写你机器的ip或者节点名都行
discovery.seed_hosts: ["node-1:9300","node-2:9300","node-3:9300"]

#没有zookeeper,所以主节点都是随机选举的
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点
#z这个数量一般是总机器数量-1,我3台所以是2 
gateway.recover_after_nodes: 2
#删除索引是是否需要显示其名称,默认为显示
#action.destructive_requires_name: true

    到这里没有运行条命令会有个小细节的错误  

    error :max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144】

解决方法       

     #  文件最后添加一行


        vm.max_map_count=262144

      刷新系统配置

       sysctl -p /etc/sysctl.conf/

 3、最后运行docker启动命令

       docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9200:9200 -p 9300:9300 -v /usr/local/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/docker/elasticsearch/data:/usr/share/elasticsearch/data -v /usr/local/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins --name elasticsearch elasticsearch:7.6.0

查看下docker镜像, 很nice

[root@iZqma4tjnp9e66Z plugins]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED       STATUS             PORTS                                            NAMES
61b84e1aa263   elasticsearch:7.6.0   "/usr/local/bin/dock…"   2 hours ago   Up About an hour   0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch

三台机器重复三次  百分百高可用、 status:green ,搞定收工下班

{
  "cluster_name" : "my-es",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 6,
  "active_shards" : 12,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

 

你可能感兴趣的:(elasticsearch,大数据)