1.docker compose简介
docker compose是docker容器的管理工具,通过这个可以一键启动多个docker容器,也可对单个容器进行操作,对于集群项目是非常方便的。
2.安装docker和docker compose
2.1下载docker,并安装https://www.runoob.com/docker/centos-docker-install.html
2.2 由于docker compose并没有集成在docker中,所以还需要下载并安装docker compose:https://docs.docker.com/compose/install/
3. 整个ELK的目录结构(想要构建整个elk,请查看我的其他博客,我将elk拆分成了4个博客)
在linux下创建了一个elk文件夹,elk的所有文件都放在了里面
4. 编辑docker-compose.yml配置文件
version: '3'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0 #镜像名
container_name: es-01 #容器名
environment: #指定变量,相当于是直接在启动命令行上指定参数,具体能指定哪些参数要看该镜像支持哪些参数
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" #指定es的内存大小
ulimits: #生产环境需要配置的系统配置
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes: #挂载,格式为 本地卷:docker容器中卷
- /usr/local/workspace/elk/elasticsearch/data/es01:/usr/share/elasticsearch/data
- /usr/local/workspace/elk/elasticsearch/config/es01/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /usr/local/workspace/elk/elasticsearch/logs/es01:/user/share/elasticsearch/logs
ports:
- 9200:9200
- 9300:9300 #es集群之间通信的端口,不可省略,否则,集群状态下会端口冲突
networks: #指定该容器使用的网络
- esnet
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
container_name: es-02
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- /usr/local/workspace/elk/elasticsearch/data/es02:/usr/share/elasticsearch/data
- /usr/local/workspace/elk/elasticsearch/config/es02/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /usr/local/workspace/elk/elasticsearch/logs/es02:/user/share/elasticsearch/logs
ports:
- 9201:9200
- 9301:9300
networks: #可以使用自建网络
- esnet
networks:
esnet:
注意点:由于这两个服务都是用的同一个外网esnet,所以es02 的ports 必须修改,否则端口冲突
5.编辑elasticsearch.yml配置文件
cluster.name: es-cluster #集群名
network.host: 0.0.0.0
node.name: es-01
node.master: true
node.data: true
http.port: 9200
#可省略不写,默认3000,只要docker-compose.yml文件中有端口映射到该容器的3000就行
#transport.tcp.port: 9300
#集群最小的主节点数
discovery.zen.minimum_master_nodes: 1
#当最少几个节点回复之后,集群就正常工作
gateway.recover_after_nodes: 1
#head所需要使用的,否则head连接不了集群
http.cors.enabled: true
http.cors.allow-origin: "*"
#集群初始化时指定的主节点
cluster.initial_master_nodes: ["es-01", "es-02"]
#discovery.zen.ping.unicast.hosts属性已过时,用discovery.seed_hosts代替,且使用9300等集群通信端口
discovery.seed_hosts: ["192.168.20.101:9300","192.168.20.101:9301"]
#discovery.zen.ping.unicast.hosts: ["192.168.20.101:9300","192.168.20.101:9301"]
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
#指定一下容器中logs的位置,以便docker-compose可以正确挂载logs地址
path.logs: /usr/share/elasticsearch/logs
es-01和es-02节点使用的配置基本一致,只需要修改node.name就行,http.port等都可以使用9200,docker-compose指定主机不同端口映射就行了
6. 启动docker compose
在有docker-compose.yml的目录下运行: docker-compose up,即可启动docker-compose up
7.遇到的问题
7.1 目录无权限
给存放data的目录赋予权限:chown 1000:1000 data
7.2 Failed to bind to [9300-9400]
将network.host设置为0.0.0.0,不能设置为192.168.xx.xx
7.3 报错max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [655360]
vi /etc/sysctl.conf
添加以下代码:
vm.max_map_count = 655360
保存后执行
sysctl -p
使得配置生效
至于这个数值设置多大,是看你用的elasticsearch版本的,可以去官网看一下