【原创】运维基础之Docker(2)通过docker部署zookeeper nginx tomcat redis kibana/elasticsearch/logstash mysql kafka mesos/marathon
通过docker可以从头开始构建集群,也可以将现有集群(配置以及数据)平滑的迁移到docker部署;
1 docker部署zookeeper
# usermod -G docker zookeeper
# mkdir /data
# chown zookeeper.zookeeper /data
# echo 1 > /data/myid
# su - zookeeper
$ docker run --name zookeeper --restart always -p 2181:2181 -p 2888:2888 -p 3888:3888 -e ZOO_LOG4J_PROP="INFO,ROLLINGFILE" -v /var/log/zookeeper:/logs -v /conf/zoo.cfg:/conf/zoo.cfg -v /data:/data -v /etc/hosts:/etc/hosts:ro -d zookeeper
其中zoo.cfg使用正常的集群配置即可,需要挂载配置文件、日志目录、数据目录、host文件等,
注意:
1)zoo.cfg中的server.*配置可以通过 -e ZOO_SERVERS=server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 代替,其中本机的ip要配置为0.0.0.0,否则启动的时候会绑定端口失败
2)/data/myid文件也可以通过 -e ZOO_MY_ID=1 代替
参考:https://docs.docker.com/samples/library/zookeeper/
2 docker部署nginx
# docker run --name nginx --restart always -p 80:80 -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -v /etc/nginx/passwd:/etc/nginx/passwd:ro -v /var/log/nginx:/var/log/nginx -d nginx
其中nginx.conf使用正常的配置即可,需要挂载配置文件、日志目录、密码文件等,有需要还可以挂载html目录 -v /some/content:/usr/share/nginx/html:ro;
参考:https://docs.docker.com/samples/library/nginx/
3 docker部署tomcat
$ docker run -d --name tomcat -p 8080:8080 tomcat:8.0
参考:https://docs.docker.com/samples/library/tomcat/
4 docker部署redis
$ docker run -d --name redis -p 6379:6379 -v /redis/data/dir:/data redis redis-server --appendonly yes
参考:https://docs.docker.com/samples/library/redis/
5 docker部署elk
由于kibana、elasticsearch、logstash3个image内部分别使用各自的用户启动,并且uid和gid均为1000,为了避免冲突,使用一个新的elk组,gid为1000,将3个用户都添加到组中,保证对目录的写权限
# groupadd -g 1000 elk
# usermod -G elk elasticsearch
# usermod -G elk logstash
# usermod -G elk kibana
# chgrp elk $dir
kibana
# usermod -G docker kibana
# su - kibana
$ docker run --name kibana -p 5601:5601 -v /var/log/kibana:/usr/share/kibana/log -v /etc/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml -d kibana:6.6.0
其中kibana.yml使用正常配置即可,需要挂载配置文件等;
如果分配的内存太少,kibana可能进程直接消失,而且查不到任何logs,至少512m以上;
参考:
https://docs.docker.com/samples/library/kibana/
https://www.elastic.co/guide/en/kibana/current/docker.html
elasticsearch
# usermod -G docker elasticsearch
# chgrp -R elk /opt/lmm/es_data/
# su - elasticsearch
$ docker run -d --name logstash -p 9600:9600 -v /var/log/nginx:/var/log/nginx:ro -v /var/log/logstash:/usr/share/logstash/logs -v /etc/logstash/GeoLite2-City.mmdb:/usr/share/logstash/config/GeoLite2-City.mmdb -v /etc/logstash/nginx_access.conf:/usr/share/logstash/pipeline/logstash.conf docker.elastic.co/logstash/logstash:6.6.0
其中elasticsearch.yml使用正常配置即可,需要设置宿主机ip,挂载配置文件、数据目录、日志目录等;
注意:
1)一定要保证索引目录的owner或者group的id为1000(此处设置group为1000),否则会报failed to obtain node locks或者AccessDeniedException
2)一定要设置network.publish_host为宿主机ip
The container runs Elasticsearch as user elasticsearch using uid:gid 1000:1000. Bind mounted host directories and files, such as custom_elasticsearch.yml above, need to be accessible by this user. For the data and log dirs, such as /usr/share/elasticsearch/data, write access is required as well.
参考:
https://docs.docker.com/samples/library/elasticsearch/
https://www.elastic.co/guide/en/elasticsearch/reference/6.6/docker.html
logstash
# usermod -G docker logstash
# chgrp -R elk /var/log/logstash
# su - logstash
$ docker run -d --name logstash -p 9600:9600 -v /var/log/nginx:/var/log/nginx:ro -v /var/log/logstash:/usr/share/logstash/logs -v /etc/logstash/GeoLite2-City.mmdb:/usr/share/logstash/config/GeoLite2-City.mmdb -v /etc/logstash/nginx_access.conf:/usr/share/logstash/pipeline/logstash.conf docker.elastic.co/logstash/logstash:6.6.0
其中logstash.conf使用正常的配置即可;要保证对日志目录可写;
Bind-mounted configuration files will retain the same permissions and ownership within the container that they have on the host system. Be sure to set permissions such that the files will be readable and, ideally, not writeable by the container’s logstash user (UID 1000).
参考:
https://docs.docker.com/samples/library/logstash/
https://www.elastic.co/guide/en/logstash/current/docker-config.html
6 docker部署mysql
$ docker run -d --name mysql -p 3306:3306 -v /var/lib/mysql:/var/lib/mysql -v /etc/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:5.7.25
其中my.cnf使用正常配置即可,需要挂载数据目录;
参考:https://docs.docker.com/samples/library/mysql/
7 docker部署kafka
$ docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=1 -e KAFKA_LOG_DIRS=/kafka/kafka-logs -e KAFKA_ZOOKEEPER_CONNECT=$zk_server:2181 -e KAFKA_ADVERTISED_HOST_NAME=$host_ip -e KAFKA_AUTO_CREATE_TOPICS_ENABLE=true -v /data/kafka-logs:/kafka/kafka-logs wurstmeister/kafka
不使用配置文件,配置通过参数传递,需要挂载数据目录;
参考:https://hub.docker.com/r/wurstmeister/kafka
8 docker部署mesos
mesos-master
$ docker run -d --name mesos-master1 --net=host --restart=always -p 5050:5050 -e MESOS_HOSTNAME=192.168.0.1 -e MESOS_IP=192.168.0.1 -e MESOS_ZK=zk://192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181/mesos -e MESOS_PORT=5050 -e MESOS_LOG_DIR=/var/log/mesos -e MESOS_QUORUM=1 -e MESOS_REGISTRY=in_memory -e MESOS_WORK_DIR=/var/lib/mesos mesoscloud/mesos-master
逐台修改MESOS_HOSTNAME、MESOS_IP
参考:https://hub.docker.com/r/mesosphere/mesos-master
mesos-slave
$ docker run -d --name=mesos-slave1 --net=host --restart=always --pid=host --privileged=true -e MESOS_HOSTNAME=192.168.0.1 -e MESOS_IP=192.168.0.1 -e MESOS_MASTER=zk://192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181/mesos -e MESOS_CONTAINERIZERS=docker,mesos -v /usr/bin/docker:/usr/bin/docker -v /dev:/dev -v /var/run/docker.sock:/var/run/docker.sock -v /var/log/mesos:/var/log/mesos -v /tmp/mesos:/tmp/mesos mesoscloud/mesos-slave
逐台修改MESOS_HOSTNAME、MESOS_IP
参考:https://hub.docker.com/r/mesosphere/mesos-slave
marathon
$ docker run -d --name marathon --net host --restart=always -e MARATHON_HOSTNAME=192.168.0.1 -e MARATHON_HTTPS_ADDRESS=192.168.0.1 -e MARATHON_HTTP_ADDRESS=192.168.0.1 -e MARATHON_MASTER=zk://192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181/mesos -e MARATHON_ZK=zk://192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181/marathon mesoscloud/marathon
逐台修改MARATHON_HOSTNAME、MARATHON_HTTPS_ADDRESS、MARATHON_HTTP_ADDRESS
参考:https://hub.docker.com/r/mesosphere/marathon
9 其他
https://docs.docker.com/samples/library/cassandra/
https://docs.docker.com/samples/library/flink/
https://docs.docker.com/samples/library/influxdb/
https://docs.docker.com/samples/library/alpine/
【原创】运维基础之Docker(2)通过docker部署zookeeper nginx tomcat redis kibana/elasticsearch/logstash mysql kafka mesos/marathon的更多相关文章
- Linux运维基础
一.服务器硬件 二.Linux的发展史 三.Linux的系统安装和配置 四.Xshell的安装和优化 五.远程连接排错 六.Linux命令初识 七.Linux系统初识与优化 八.Linux目录结构 九 ...
- 第一阶段·Linux运维基础-第1章·Linux基础及入门介绍
01-课程介绍-学习流程 02-服务器硬件-详解 03-服务器核心硬件-服务器型号-电源-CPU 01-课程介绍-学习流程 1.1. 光看不练,等于白干: 1.2 不看光练,思想怠慢: 1.3 即看又 ...
- linux运维基础知识
linux运维基础知识大全 一,序言 每一个微不足道的知识,也是未来的铺垫.每一份工作的薪资职位,也是曾经努力的结果. 二,服务器 1,运维人员工作职责: 1)保证数据不丢失:2)保证服务器24小时运 ...
- Linux系统运维基础测试题
1 Linux运维基础测试题(第一关) 通过这段时间学习Linux基础命令,为了检测自己对Linux基础命令掌握的情况,从网上整理13到测试题,并将其整理出来供大家参考学习. 1.1 习题 ...
- HBase运维基础--元数据逆向修复原理
背景 鉴于上次一篇文章——“云HBase小组成功抢救某公司自建HBase集群,挽救30+T数据”的读者反馈,对HBase的逆向工程比较感兴趣,并咨询如何使用相应工具进行运维等等.总的来说,就是想更深层 ...
- Linux运维基础采集项
1. Linux运维基础采集项 做运维,不怕出问题,怕的是出了问题,抓不到现场,两眼摸黑.所以,依靠强大的监控系统,收集尽可能多的指标,意义重大.但哪些指标才是有意义的呢,本着从实践中来的思想,各位工 ...
- 【原创】运维基础之Docker(1)简介、安装、使用
docker 18.09 官方:https://docs.docker.com/ 一 简介 Docker is a platform for developers and sysadmins to d ...
- 【原创】运维基础之Docker(3)搭建私有仓库
下载并启动registry $ docker pull registry$ docker run --name my_registry -d -p 5000:5000 -v /var/lib/regi ...
- 【原创】运维基础之Docker(7)关于docker latest tag
Docker images have a tag named latest which doesn’t work as you expect.Latest is just a tag with a s ...
随机推荐
- 基于Grunt构建一个的项目
没有搭建环境的,请参考<Grunt自动化构建环境搭建 >,搭建完成后 新建一个项目目录,这里建立一个“Demo”目录 运行CMD,并进入这个目录,运行 npm install grunt ...
- day02(编程语言,解释器,环境变量,执行方式,pycharm,pip,变量三大组成)
上节课复习: 重点: 1,进制转换:二进制与十六进制 2,内存分布:栈区 与 堆区 10101001110111 => 2a77 abf1 => 1010101111110001 计算 ...
- SpringBoot返回date日期格式化,解决返回为TIMESTAMP时间戳格式或8小时时间差
问题描述 在Spring Boot项目中,使用@RestController注解,返回的java对象中若含有date类型的属性,则默认输出为TIMESTAMP时间戳格式 ,如下所示: 解决方案 ...
- Magento2自定义命令
命令命名准则 命名指南概述 Magento 2引入了一个新的命令行界面(CLI),使组件开发人员能够插入模块提供的命令. Command name Command name 在命令中,它紧跟在命令的名 ...
- 初识并发编程 MPI
MPI是一个跨语言的通讯协议,用于并发编程.MPI标准定义了一组具有可移植性的编程接口. 安装环境 MPICH 是开源的消息传递接口(MPI)标准的实现. 下载地址 # 解压文件 tar -xzvf ...
- Hdoj 1517.A Multiplication Game 题解
Problem Description Stan and Ollie play the game of multiplication by multiplying an integer p by on ...
- MongoDB介绍与安装
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据 ...
- 用SERVLET进行用户名和密码验证
一.界面展示 二.登录成功显示 三.代码 html <!DOCTYPE html> <html> <head> <meta charset="UTF ...
- 分布式监控系统开发【day37】:表结构设计(二)
一.表结构关系图 二.表结构需求讨论 1.主机表(Host) 1.解决了什么问题? 1.如果我不想让它监控了,就有一个开关的东西给它禁掉2.主机存活状态检测间隔 2.代码 class Host(mod ...
- Tomcat设计模式
omcat 系统架构与设计模式,第 2 部分 设计模式分析 系列内容: 此内容是该系列 2 部分中的第 2 部分: Tomcat 系统架构与设计模式 门面设计模式 门面设计模式在 Tomcat 中有多 ...