利用docker-compose搭建ES集群+cerebro+logstash+kibana步骤记录

这次记录的是一个完整的操作过程。使用了三台阿里云服务器,两个ES节点各占一台,另一台安装cerebro+logstash+kibana,当然都是使用docker-compose安装的。

docker-compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。使用docker-compose当然得先安装docker。

1.安装docker

如果服务器中已经安装了docker,想安装最新版本的话,先卸载服务器中的旧版本docker:

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

给docker设置稳定的存储库,这个需要用到yum-config-manager命令,所以可能需要先安装yum-utils:

sudo yum install -y yum-utils

然后设置阿里云的存储库:

sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装最新版本的docker:

sudo yum install docker-ce docker-ce-cli containerd.io

安装成功后输入docker -v查看docker版本确认一下安装情况:

安装完成后就可以启动docker了,多贴几条docker的操作命令:

# 启动docker
sudo systemctl start docker

# 停止docker
systemctl stop docker

# 重启
systemctl restart docker

# 查看状态
systemctl status docker

# 设置开机自启动
systemctl enable docker

# 查看信息
docker info

# 查看帮助文档
docker --help

docker安装成功后就可以安装docker-compose了。

2.安装docker-compose

安装docker-compose就两条命令:

sudo curl -L https://github.com/docker/compose/releases/download/1.28.2/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

我下载的1.28.2的最新版本,可以访问https://github.com/docker/compose/releases去找最新的版本号下载,安装路径就放在了/usr/local/bin,下载成功后会在该文件夹中有一个无后缀名的docker-compose文件:

后面的chmod是给这个文件赋操作权限。这样docker-compose就安装好了,可以使用docker-compose -v确认版本和安装情况:

简单介绍一下docker-compose。docker-compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。docker-compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例。用户可以通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个工程(project)。

理解起来就是我在两台服务器中分别利用docker-compose安装了ES,那这就是两个ES工程,在另一台服务器中利用docker-compose安装了cerebro+logstash+kibana,那在这台服务器中这三个加起来是一个工程。每个工程都有自己的docker-compose.yml文件,通过在工程docker-compose.yml文件目录中执行docker-compose up和docker-compose stop去启动和停止这个工程。

接下来就是分别安装ES节点和cerebro+logstash+kibana了,对应接下来的操作步骤可以更好地去理解docker-compose。

3.在两台服务器中分别安装两个ES节点

新建一个专门的文件夹/zbq/es去放这个工程,并把该工程的docker-compose.yml文件放在这个文件夹内:

这个文件夹里面的docker.log是nohup docker-compose up后台启动工程时输出的日志不用管,还有一个/data文件夹,这个和docker-compose.yml有关,docker-compose.yml内容的编写也是重点,先看一下节点1的yml:

/data文件夹可以看出是配置的esdata的路径。docker-compose.yml的写法和最上面的version有关,我这里用的是2.2,具体的各个版本的写法可以去详细了解一下,这里就不详述了,就只提几个重点。

(1)ES_JAVA_OPTS的配置最好Xms和Xmx都大于512m,我的阿里云服务器是内存2G的,本来想这里设置的小一点结果直接启动报错。

(2)discovery.seed_hosts意思是哪些节点可以候选为master节点,可以配置多个,逗号隔开就好了,由于我这次就两个节点一个主一个从,这里就配置了一个候选master,相当于指定了master。

(3)cluster.initial_master_nodes是集群第一次被启动的时候生效的,大概意思就是指定一个节点为master从而引导集群启动。这里只要配置node.name就好了,但是前提是这个node.name要在候选master列表中,我这里也是直接指定为es_01。

(4)network.publish_host也挺重要的,es节点使用publish_host与群集通信,我这里直接配置成服务器的公网ip,如果不配置的话阿里云服务器会默认publish_host为服务器的内网ip,好像阿里云服务器之间内网ip是不能通信的,所以我直接配置成了公网ip。还有两个相似的配置network.host和network.bind_host,network.bind_host是接受连接的ip,默认为0.0.0.0,就是自己所有网卡都能被连接。而network.host是同时配置network.bind_host和network.publish_host,就是把两个配置成一样。

再贴一下另一个es节点的docker-compose.yml对比一下:

不同的配置就是container_name、node.name和network.publish_host,publish_host配置成当前服务器的公网ip就好了。节点2启动后会先去判断自己的节点名称是不是和cluster.initial_master_nodes中配置的相同,如果不是则说明自己不是master,然后去discovery.seed_hosts列表中寻找master并将自己加入进集群。

两个节点的docker-compose.yml准备好后就可以nohup docker-compose up后台启动工程了,完整命令:

nohup docker-compose up >/zbq/es/docker.log 2>&1 &

分别启动两个节点,直至启动日志打印出nodi.id信息:

这样就是es节点启动成功了,然后可以分别访问这两个节点的9200端口:

可以看到他们的cluster_name和cluster_uuid是一样的。

在启动es节点是可能会出现max_map_count不够的情况,执行如下命令即可:

#设置vm.max_map_count
sysctl -w vm.max_map_count=262144

#确认设置结果
sysctl -a|grep vm.max_map_count

最后多贴几条docker-compose的操作命令:

#启动服务
docker-compose up

# 查看启动的服务
docker-compose ps   

#停止服务
docker-compose stop 

当然直接用docker ps也可以查看启动的服务,docker images也能查看docker-compose下载下来的镜像,因为本来docker-compose就是基于docker的。

4.安装cerebro+logstash+kibana

简单介绍一下这三个,cerebro是管理es集群的,logstash是收集数据传输给es的,也可以用来导入数据,kibana是图形界面形式的分析展示数据的。这三个都需要和es集群通信。

同样的,这三个加起来作为一个工程,新建一个文件夹,放一个docker-compose.yml进去:

重点看一下这个docker-compose.yml内容:

这里面需要注意这么几点:

(1)cerebro的command中配置一个-Dhosts.0.host,值就是es的master节点地址。

(2)kibana的environment配置一个ELASTICSEARCH_HOSTS,值同样是es的master节点地址。

(3)logstash的配置比较复杂,首先要注意需要配置两个volumes,配置volumes可以理解为给docker-compose的容器挂载一个文件目录地址,docker-compose去访问的文件目录都需要要先在这里挂载,比如在配置文件里需要配置哪个目录了,都在先在这里挂载。理解起来就是做一个映射吧。比如我这里下面要配置environment的path.config,这是logstash的配置文件,我把这个logstash.conf放在了/zbq文件夹内,所以我要给/zbq/logstash.conf这个路径挂载到容器中,也就是配置了:

volumes:
      - /zbq/logstash.conf:/zbq/logstash.conf:rw

这里是直接做了文件路径的挂载,还可以做文件夹路径的挂载,比如下面的- /zbq/data:/zbq/data:rw,我在这里面放了需要导入到es的数据:

然后在logstash的配置文件logstash.conf做了响应配置,只要是在容器中需要访问这个地址,都需要在volumes中挂载。可以看一下logstash.conf,也是个重点:
 

重点都标出来了,input{}块就是代表启动logstash时需要导入数据,里面的path就是数据文件地址。

简单介绍一下这个sincedb_path配置。第一次配置时,运行logstash对日志文件进行的读取操作,这个过程logstash会记录自己读取完日志文件的位置,然后将自己读取内容的偏移量保存到一个隐藏文件中。当再次启动的时候logstash从隐藏文件中的读取完成的日志文件位置。假如我们希望再次启动的时候依旧读取所有文件信息,可以设置sincedb_path => "/dev/null"。/dev/null”这个 Linux 系统上特殊的空洞文件,那么 logstash 每次重启进程的时候,尝试读取 sincedb 内容,都只会读到空白内容。

output{}就代表数据传输给谁,里面配置了es的master地址,index是索引,es中的索引和关系型数据库中的索引概率完全不一样,如果非要对比一下,es中的索引相当于关系型数据库中的表,具体这里不详述。

filter{}就是对导入数据的处理逻辑了。

同样的,都准备好后可以docker-compose up启动工程了。启动后如果看到这些logstash日志:

说明导入的数据经过filter{}块处理已经发给es了。

这时候我们可以登录kibana查看一下了,访问该服务器的5601端口,找到kibana中的索引管理功能:

可以看到刚刚导入的数据,索引名称也是自己定义的movies。

还可以登录一下cerebro查看一下es集群情况,访问该服务器的9000端口:

cerebro这个工具还是很好用的,可以清楚的看到es集群中各个节点的情况,包括索引、分片数,文档数等,具体需要详细去了解一下es和cerebro。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值