docker-compose安装elasticsearch集群+kibana

公司需要用到elasticsearch做垂直搜索,下面记录下搭建elasticsearch集群环境的步骤。服务器使用的是阿里云服务器,操作系统是centos7。

一、安装docker

Yum install docker-ce

安装成功后运行docker -v查看docker版本。

运行docker run hello-world查看docker是否可用。

注意:一定要提前运行下docker run命令验证docker是否正常,不要忽略了这个小细节。笔者就是因为安装完
docker后,没有做此操作,后面的步骤都做好了,运行docker-compose up启动elasticsearch服务的时候各种
报错,网上搜寻了各种方案都没有找到对应的报错信息,指到我怀疑是不是docker自身的问题,运行docker run 
hello-world发现都在报错的时候,才确定了docker版本与系统内核不兼容,没办法,只能重新卸载docker,更
新yum源,再安装。这是此次操作中遇到的最大的一个坑,花了笔者很多很多的时间。

修改docker国内加速镜像,请一定修改,否则慢得一逼。

vim /etc/docker/daemon.json

 {

  "registry-mirrors": ["https://registry.docker-cn.com"]

}

修改后重启docker。

 

二、安装docker-compose

pip install docker-compose

安装成功后运行docker-compose -v

 

三、修改系统参数

sysctl -w vm.max_map_count=262144

此参数是elasticsearch需要修改的值,如果不修改,在生产模式下elasticsearch会启动失败。官方说明如下:

docker-compose安装elasticsearch集群+kibana_第1张图片

可访问https://www.elastic.co/guide/en/elasticsearch/reference/6.5/docker.html#docker-prod-cluster-composefile查看具体说明

 

四、使用docker-compose安装elasticsearch+kibana

由于资源有限,先在一台服务器上安装两个elasticsearch节点,节点数据放在/home/docker/elastic下

1、创建数据目录

cd home;

Mkdir docker;

Mkdir elastic;

2、编写compose文件

version: "2"

services:

  elasticsearch:

    image: bolingcavalry/elasticsearch-with-ik:6.5.0

    container_name: elasticsearch

    restart: always

    environment:

      - cluster.name=elastic-pro

      - node.name=node_master_9200

      - node.master=true

      - node.data=true

      - bootstrap.memory_lock=true

      - http.cors.enabled=true

      - http.cors.allow-origin=*

      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"

    ulimits:

      memlock:

        soft: -1

        hard: -1

    volumes:

      - ./esdata1:/usr/share/elasticsearch/data

    ports:

      - 9200:9200

    networks:

      - esnet

  elasticsearch2:

    image: bolingcavalry/elasticsearch-with-ik:6.5.0

    container_name: elasticsearch2

    restart: always

    environment:

      - cluster.name=elastic-pro

      - node.name=node_slave_9201

      - node.master=false

      - node.data=true

      - bootstrap.memory_lock=true

      - http.cors.enabled=true

      - http.cors.allow-origin=*

      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"

      - "discovery.zen.ping.unicast.hosts=elasticsearch"

    ulimits:

      memlock:

        soft: -1

        hard: -1

    volumes:

      - ./esdata2:/usr/share/elasticsearch/data

    ports:

      - 9201:9200

    networks:

      - esnet

    depends_on:

      - elasticsearch

  kibana:

    image: kibana:6.5.0

    container_name: kibana

    environment:

      - SERVER_NAME=kibana

      - ELASTICSEARCH_URL=http://elasticsearch:9200

      - XPACK_MONITORING_ENABLED=true

    ports:

      - 5601:5601

    networks:

      - esnet

    depends_on:

      - elasticsearch

    external_links:

      - elasticsearch

volumes:

  esdata1:

    driver: local

  esdata2:

    driver: local



networks:

  esnet:

此处安装的elasticsearch已经默认集成了ik中文分词器。

3、创建数据目录,用于持久化

Mkdir esdata1;

Mkdir esdata2;

Chown 777 esdata1 esdata2;
注意:一定要修改esdata1和esdata2的权限,否则启动elasticsearch会报错。主要是由于启动elasticsearch
并非是以root用户启动的,所以如果esdata1和esdata2是root账户创建,会没有写入权限。

官方说明如下:

docker-compose安装elasticsearch集群+kibana_第2张图片

当然,你也可以修改esdata1和esdata2的属主为elasticsearch用户,这样就有权限写入了。

4、启动编排任务

Docker-compose up -d

5、验证服务是否启动

Docker ps查看elasticsearch、elasticsearch2、kibana服务是否存在

Curl http://127.0.0.1:9200/_cat/health?v查看集群健康状态

 

五、控制elasticsearch的安全策略

Elasticsearch的api端口是9200,elasticsearch2的api端口是9201,需要控制只允许内网访问,在阿里云的安全组设置内网访问规则。注意外网访问打开需慎重,最多只能对指定ip访问,否则会不安全。

 

六、控制kibana的安全策略

Kibana默认对外的端口是5601,我们需要通过外网访问kibana,便于管理elasticsearch,但是kibana默认没有访问策略,只要开放端口,任何人都可以访问到此页面,新增的x-pack可以进行安全访问策略,但是是商业版的,需要缴费,因此我们使用nginx代理的方式控制kibana的访问。

1、阿里云安全组访问策略中开放5600端口,我们通过5600端口访问代理5601端口的访问

2、安装apache密码工具

yum install httpd-tools;

Cd /home/docker/elastic;

Mkdir kibana;

Cd kibana;

htpasswd -c -b kibana.passwd kibana;

然后设定密码即可。

3、配置nginx 5600端口

server
{
        listen 5600;

        auth_basic "Kibana Auth";
        auth_basic_user_file /home/docker/elastic/kibana/kibana.passwd;

        location / {
                proxy_pass http://127.0.0.1:5601;
                proxy_redirect off;
        }
}

4、访问http://ip:5600验证kibana是否可以访问,并且是否会弹出用户名密码框

你可能感兴趣的:(elastic)