rex-ray
DCHQ内部部署v4.0现在可在预览模式下使用,支持容器数据库服务(CDS) , Microsoft Azure资源管理器 , 阿里巴巴阿里 云 , OVH公共云 ,应用程序日志流和其他重要功能。
CDS产品与EMC REX-Ray集成在一起,可在容器上提供可扩展且高度可用的数据库,从而支持多主机群集,备份,复制和自动数据库恢复。
提供了用于群集MySQL,MariaDB,PostgreSQL,Oracle XE,Mongo和Cassandra的模板。 新产品还支持来自EMC,Amazon,OpenStack,Rackspace和Google的存储平台。 在此页面上观看录制的演示: http : //dchq.co/container-database-services.html
DCHQ v4.0将在EMC World上亮相 。 您可以通过填写本页上的下载表单来下载DCHQ本地v4.0 (预览模式) 。 http://dchq.co/dchq-on-premise.html
在本博客中,我们将介绍使用PostgreSQL 多主机集群为Enterprise Java应用程序进行部署自动化的过程,该集群用于Master-Slave复制以及使用DCHQ + EMC REX-Ray在AWS上使用冗余EBS卷进行自动存储管理。
什么是DCHQ?
DCHQ可跨任何云或容器基础架构无缝部署和管理现有企业应用程序和云本机应用程序 ,包括VMware vSphere , OpenStack , OVH , AWS , Microsoft Azure等。
它提供了企业应用程序的“即时”容器化,包括Oracle数据库集群,SAP等。 这样,DCHQ可以将非云原生应用程序转换为完全可移植的应用程序,这些应用程序可以利用云扩展,存储冗余以及最重要的是部署敏捷性的优势。
DCHQ支持高级多层应用程序,提供数据绑定和注入功能,以捕获跨应用程序组件的复杂依赖关系。 它还提供了无限灵活的插件框架,可以在20多个应用程序生命周期 状态下调用它们,以提供服务发现和自动应用程序更新。
该平台是为企业量身定制的,可以通过基于角色的访问控制,基于资源利用率的配额策略,将应用程序管理扩展到其他业务用户的权限,可以轻松管理的批准策略以及用于启用资源的成本配置文件来明确关注点帐单。
应用程序建模框架使用组件概要文件,存储概要文件,DBaaS概要文件和配置脚本概要文件来启用模块化应用程序蓝图。 部署应用程序后,用户可以访问监视,警报,连续交付,应用程序备份,扩展/扩展,浏览器内终端以访问容器,日志流和应用程序更新。
DCHQ概述
DCHQ平台功能
DCHQ工作流程
使用DCHQ和EMC REX-Ray的Docker应用程序的自动持久存储管理
EMC开放源项目REX-Ray为Docker容器提供了与供应商无关的持久性存储。 它允许开发人员和数据库管理员通过标准的命令行界面执行存储管理任务。 该项目支持的存储提供程序包括AWS EC2(EBS),OpenStack(Cinder),EMC Isilon,EMC ScaleIO,EMC VMAX,EMC XtremIO,Google Compute Engine(GCE)和VirtualBox。
REX-Ray项目解决了容器数据库存储管理方面的挑战-但没有提供管理生产中容器数据库所需的自动化,可伸缩性和高可用性部署选项。
专门从事企业Docker应用程序建模,部署,服务发现和管理的DCHQ现在提供“容器数据库服务”或CDS 。 该产品在容器上提供可伸缩且高度可用的数据库。
新产品允许用户:
- 在容器上运行高可用性和可伸缩性数据库,并支持多主机群集,备份,复制和自动数据库恢复。
- 将现成的容器数据库模板用于群集的MySQL,MariaDB,PostgreSQL,Oracle XE,Mongo和Cassandra 。
- 通过DCHQ插件创建自定义存储管理任务,这些插件可以在应用程序部署的不同生命周期阶段调用。
- 在公共云或私有数据中心中运行的任何虚拟机或裸机服务器上部署具有所有必要存储服务的应用程序。
设置Docker集群的3个简单步骤
在开始之前,您将需要访问DCHQ:
- 注册于DCHQ.io - http://dchq.io ( 无需信用卡 ),或
- 下载DCHQ内部部署 — http://dchq.co/dchq-on-premise-download.html
步骤1 –创建云提供商
首先,用户可以为DCHQ支持的18个云和虚拟化平台中的任何一个注册一个云提供程序。 在此博客中,介绍了在AWS上的自动配置。 可以通过导航到Cloud Providers ,然后单击+按钮选择Amazon EC2来完成Cloud Provider的注册。 唯一必需的字段是:
- AWS访问密钥
- AWS密钥
可选字段允许您强制执行精细的访问控制,并将此提供程序与配额策略相关联。
- 授权用户 -这些用户被允许使用此Cloud Provider进行基础架构配置。 有资格的用户无权管理或删除此云提供商,并且将无法查看任何凭据。
- 标题为蓝图 -这些是可与该云提供商一起使用的Machine Compose模板。 例如,如果租户管理员希望限制用户在认证的操作系统上配置4GB计算机,则用户将无法使用该云提供商来配置任何其他计算机。
- VM限制 -这是可与该云提供商一起使用的最大虚拟机数
- 配额策略 -这些是用于对VM数量或VM成本设置配额的预定义策略。 可以选择多个配额策略来自定义每个用户或每个用户组的控件。
第2步–使用Weave的叠加网络为AWS创建集群
跨混合云或本地开发机器的服务器可以与群集关联,这是基础架构的逻辑映射。 用户可以通过导航到“ 群集”页面,然后单击+按钮来创建群集。
集群具有高级选项,例如:
- 租赁 –用户可以指定此群集中服务器上部署的应用程序何时到期,以便DCHQ可以自动销毁那些应用程序。
- 放置策略 –用户可以从多种放置策略中进行选择,例如基于接近度的策略,轮询或默认策略,这是基于容量的放置策略,它将Docker工作负载放置在具有足够计算资源的主机上。
- 网络 -用户可以选择Docker网络或Weave作为软件定义的网络,以促进跨多个主机的跨容器通信
- 配额 –用户可以指示此群集是否遵守分配给用户和组的配额配置文件。 例如,在DCHQ.io中,将为所有用户分配8GB的内存配额。
- 自动扩展策略 –用户可以定义自动扩展策略,以在群集计算资源用尽时自动添加服务器,以满足开发人员对基于容器的新应用程序部署的需求
- 粒度访问控制 –租户管理员可以定义对群集的访问控制,以指示谁可以通过“ 授权用户”向其部署Docker应用程序。 例如,开发人员可以注册他/她的本地计算机并将其标记为私有。 另一方面,租户管理员可以与特定用户组或所有租户用户共享群集。 另外,集群所有者可以指定哪些应用程序模板可以通过“ 授权蓝图”部署到该集群。 如果群集将在上游环境中使用,则只能在其上部署特定的应用程序模板(或“蓝图”)。
步骤3 –将新的AWS实例配置到群集中
用户可以通过定义一个简单的基于YAML的Machine Compose模板来在新创建的集群上配置AWS实例,该模板可以从自助服务库中请求。
( 推荐 )在创建Machine Compose模板之前,用户可以将私钥(或PEM文件)安全地存储在凭据存储中。 可以通过导航到Cloud Providers ,然后单击+按钮选择Credentials来完成 。 需要提供用户名和密码 。 保存此凭证项目后,然后在保存的新项目上单击“ 编辑 ”以复制该凭证项目的新生成的ID 。
用户可以导航至App&Machine ,然后单击+按钮以选择Docker Machine,从而为AWS创建Machine Compose模板。
这是用于在us-west-1区域中请求3个AWS t2.medium实例的模板。
Machine Compose模板支持的参数总结如下:
- 描述 :蓝图/模板的描述
- 子网 :特定于云提供商的值(例如,AWS的子网ID)
- instanceType : 必填 —云提供商的特定值(例如general1-4)
- 地区 : 强制性 —云提供商的特定值(例如IAD)
- 映像 : 强制 –完全限定的映像ID /名称(例如IAD / 5ed162cc-b4eb-4371-b24a-a0ae73376c73或vSphere VM模板名称)
- aws_root_size : 必需 –要附加到实例的磁盘大小,以GB为单位
- aws_root_encrypted :是否加密根磁盘的布尔值
- aws_root_delete_on_termination :一个布尔值,用于在终止实例时是否删除根磁盘
- aws_device_name :设备的路径或目录
- aws_tags :可以与实例设置一起传递的密钥对值
- username :用于连接服务器的用户名
- 密码 :这可以引用存储在凭据存储中的私钥。 将需要存储在“管理”>“云提供商”页面中的凭据项目的ID。 这是可接受的格式: “ {{凭据| 2c91802a520736224015209a6393098322}}”
- 网络 :可选–云提供商特定值(例如,默认值)
- securityGroup :云提供商特定值(例如,默认值)
- keyPair :云提供商的特定值(例如,私钥名称)
- openPorts :可选–逗号分隔的端口值
- count :虚拟机总数,默认为1。
除了这些受支持的参数之外,您还将注意到该模板引用了“插件”。 可以按以下方式调用插件:
plugins:
- !plugin
id: <plugin-id>
可以通过导航到“ 管理” >“ 插件” ,然后单击“ +”按钮来创建该插件。 插件是一个简单的脚本,可以在正在配置的服务器或Docker容器上运行。 服务器插件可用于多种配置要求:
- 安装人偶模块,厨师食谱,Ansible Playbook等。
- 从安全的S3存储桶中检索私有Docker注册表所需的CA证书,然后将其保存在正确的目录中(例如/etc/docker/certs.d/ <域名>:5000 / ca.crt)
Machine Compose模板具有其他高级选项。
- 成本配置文件 -这些是可以在管理 > 成本配置文件下创建的成本配置文件 。 您可以每小时/每周/每月定义每个资源的成本。 您可以将多个成本配置文件附加到单个模板,例如,实例类型,使用的EBS存储等的不同成本配置文件。
- 授权用户 -这些用户被允许使用此模板来配置AWS实例。 有权使用的用户无权管理或删除此模板,只能使用它。
保存Docker Machine模板后,用户可以从自助服务库请求此机器。 用户可以单击“ 自定义” ,然后选择用于提供AWS实例的云提供商和群集 。
由于选择了Weave作为覆盖网络,因此将为使用DCHQ设置的3个AWS实例自动设置Weave集群。
设置AWS实例后,用户可以监视关键统计信息,例如CPU,内存,磁盘利用率,拉出的映像和正在运行的容器。 可以通过导航到“ 计算机” ,然后从“ 管理”下拉菜单中选择“ 监视”来完成此操作。
还可以访问预配置计算机的浏览器内终端。 可以通过导航到“ 计算机” ,然后从“管理”下拉菜单中选择“ 终端”来访问它。
部署带有PostgreSQL多主机群集的企业Java应用程序以通过REX-Ray进行持久存储管理在AWS群集上进行主从复制
既然已经设置了AWS集群,您现在可以在新创建的服务器上运行任何Docker应用程序。 可以通过导航到“ 库” ,然后在任何已发布的应用程序模板上单击“ 定制”来完成。 然后,您可以选择一个集群并单击运行 。
查看我们已发布的Docker应用程序模板-包括多层Java堆栈,LAMP,LAOP和LAPP堆栈,Node.js,Rails,Python,Mongo副本集,Couchbase群集,MEAN.JS,WordPress,Drupal等。
创建应用程序模板
Docker Compose是一个YAML模板,用于定义可以在任何地方运行的任何启用Docker的Linux主机上运行的多层或多映像分布式应用程序。
登录到DCHQ(托管的DCHQ.io或本地版本)后,用户可以导航到App&Machine ,然后单击+按钮以创建新的Docker Compose模板。
这是包含以下组件的示例模板:
• Apache HTTP Server-用于反向代理和负载平衡
• Tomcat-运行Java应用程序的应用程序服务器 • PostgreSQL Master-这是主PostgreSQL数据库 • PostgreSQL Slave-这是从属PostgreSQL数据库
HTTP-LB:
image: httpd:latest
publish_all: true
mem_min: 50m
host: host1
plugins:
- !plugin
id: uazUi
restart: true
lifecycle: on_create, post_scale_out:AppServer, post_scale_in:AppServer
arguments:
# Use container_private_ip if you're using Docker networking
#- BalancerMembers=BalancerMember http://{{AppServer | container_private_ip}}:8080
# Use container_hostname if you're using Weave networking
- BalancerMembers=BalancerMember http://{{AppServer | container_hostname}}:8080
AppServer:
image: tomcat:8.0.21-jre8
mem_min: 600m
host: host1
cluster_size: 1
environment:
- database_driverClassName=org.postgresql.Driver
# Use this configuration with Docker networking
#- database_url=jdbc:postgresql://{{postgres_master|container_private_ip}}:5432/{{postgres_master|DB_NAME}}
# Use this configuration with Weave
- database_url=jdbc:postgresql://{{postgres_master|container_hostname}}:5432/{{postgres_master|DB_NAME}}
- database_username={{postgres_master|DB_USER}}
- database_password={{postgres_master|DB_PASS}}
plugins:
- !plugin
id: oncXN
restart: true
arguments:
- file_url=https://github.com/dchqinc/dchq-docker-java-example/raw/master/dbconnect.war
- dir=/usr/local/tomcat/webapps/ROOT.war
- delete_dir=/usr/local/tomcat/webapps/ROOT
postgres_master:
restart: always
host: host2
#ports:
# - 5432:5432
image: dchq/postgres:latest
environment:
- DEBUG=false
- DB_USER=root
- DB_PASS={{alphanumeric | 8}}
- DB_NAME=names
- DB_UNACCENT=false
- REPLICATION_MODE=master
- REPLICATION_USER=replicator
- REPLICATION_PASS={{alphanumeric | 8}}
volumes:
- "/var/lib/rexray/volumes/dchq-postgres-master/data:/var/lib/postgresql"
plugins:
- !plugin
# Only mounts volume
#id: CmA35
# Create and mount volume
id: 8CF1C
lifecycle: exec_on_machine pre_create
arguments:
- VOLUME_NAME=dchq-postgres-master
- VOLUME_SIZE=5
# Nightly snapshot
#- !plugin
# id: dE4qG
# lifecycle: exec_on_machine cron(0 1 1 * * ?)
# arguments:
# - VOLUME_NAME=dchq-postgres-master
postgres_slave:
restart: always
host: host3
#ports:
# - 5432:5432
image: dchq/postgres:latest
environment:
- DEBUG=false
- REPLICATION_MODE=slave
# Use this configuration with Docker networking
#- REPLICATION_HOST={{postgres_master | container_private_ip}}
# Use this configuration with Weave
- REPLICATION_HOST={{postgres_master | container_hostname}}
- REPLICATION_USER={{postgres_master | REPLICATION_USER}}
- REPLICATION_PASS={{postgres_master | REPLICATION_PASS}}
- REPLICATION_PORT=5432
volumes:
- "/var/lib/rexray/volumes/dchq-postgres-slave/data:/var/lib/postgresql"
plugins:
- !plugin
# Only mounts volume
#id: CmA35
# Create and mount volume
id: 8CF1C
lifecycle: exec_on_machine pre_create
arguments:
- VOLUME_NAME=dchq-postgres-slave
- VOLUME_SIZE=5
# Nightly snapshot
#- !plugin
# id: dE4qG
# lifecycle: exec_on_machine cron(0 1 1 * * ?)
# arguments:
# - VOLUME_NAME=dchq-postgres-master
使用环境变量绑定来捕获复杂的应用程序依赖项
用户可以通过引用另一个图像的环境变量来创建跨图像环境变量绑定。 在这种情况下,我们进行了几个绑定,包括database_url = jdbc:postgresql://
{{postgres_master | container_hostname}}:5432 / {{postgres_master | DB_NAME}} –其中,数据库容器内部IP地址是在请求时动态解析的,用于确保Tomcat可以与数据库建立连接。
以下是受支持的环境变量值的列表:
- {{字母数字| 8}} –创建一个随机的8个字符的字母数字字符串。 这对于创建随机密码最有用。
- {{图片名称| ip}} –允许您输入容器的主机IP地址作为环境变量的值。 这对于允许中间件层与数据库建立连接非常有用。
- {{图片名称| container_hostname}}或{{Image Name | container_ip}} –允许您输入容器的名称作为环境变量的值。 这对于允许中间件层与数据库建立安全连接(不暴露数据库端口)最有用。
- {{图片名称| container_private_ip}} –允许您输入容器的内部IP作为环境变量的值。 这对于允许中间件层与数据库建立安全连接(不暴露数据库端口)最有用。
- {{图片名称| port_Port Number}} –允许您输入容器的端口号作为环境变量的值。 这对于允许中间件层与数据库建立连接非常有用。 在这种情况下,指定的端口号必须是内部端口号,即不是分配给容器的外部端口。 例如,{{PostgreSQL | port_5432}}将转换为实际的外部端口,该端口将允许中间件层与数据库建立连接。
- {{图片名称| 环境变量名称}} –允许您将一个图像的环境变量的值输入另一个图像的环境变量。 这里的用例是无止境的-因为大多数多层应用程序将具有跨映像依赖关系。
使用插件进行存储管理自动化(使用REX-Ray和Host参数来部署PostgreSQL多主机集群)
host参数允许您指定要用于容器部署的主机。 如果在创建集群时选择了Weave作为网络层,则可以这样做。 这样,您可以确保跨不同主机(或区域)的应用程序服务器群集的高可用性,并且可以遵守关联性规则,以确保例如在单独的主机上运行数据库。 以下是host参数支持的值:
- host1,host2,host3等–在数据中心(或集群)中随机选择一个主机进行容器部署
- IP地址1,IP地址2等 -允许用户指定用于容器部署的实际IP地址
- 主机名1,主机名2等 -允许用户指定用于容器部署的实际主机名
- 通配符 (例如“ db- ”或“ app-srv- ”)–指定要在主机名中使用的通配符
在这种情况下, postgres_master和postgres_slave容器将在两个单独的主机上运行—如host2和host3值所示。
DCHQ还提供了一个无限灵活的插件框架,可以在20+应用程序 生命周期的统计 ES被调用来提供服务发现和自动应用程序更新。
在这种情况下,插件将用于自动化数据库集群的存储管理任务。 插件调用REX-Ray来创建,安装和获取映射到PostgreSQL主容器和PostgreSQL从属容器的AWS EBS卷的快照。 您可以下载DCHQ内部部署,以访问这些现成的插件。
在此模板中,有三个插件可调用REX-Ray自动执行存储管理。
- id:CmA35 —该插件已被注释掉,但是如果用户只想将现有EBS卷挂载到数据库容器,则可以取消注释。 这对于从快照还原数据库或在测试中使用数据很有用。
- id:8CF1C —此插件是活动的,用于创建EBS卷并将其安装到数据库容器。 您会注意到,插件参数允许您提供卷名和大小-从用户那里抽象出CLI命令的复杂性。
- id:dE4qG —该插件可用于使用简单的cron表达式为EBS卷制作常规快照,以计划这些快照。
插件中的生命周期参数使您可以指定执行插件的确切阶段或事件。 如果未指定生命周期,则默认情况下,该插件将执行on_create 。 以下是受支持的生命周期阶段:
- on_create —创建容器时执行插件
- on_start-在容器启动后执行插件
- on_stop-在容器停止之前执行插件
- on_destroy-在销毁容器之前执行插件
- post_create —在容器创建并运行后执行插件
- post_start [:Node] -在另一个容器启动后执行插件
- post_stop [:Node] -在另一个容器停止后执行插件
- post_destroy [:Node] -在另一个容器销毁后执行插件
- post_scale_out [:Node] -在扩展另一个容器集群后执行插件
- post_scale_in [:Node] -在扩展另一个容器集群后执行插件
- exec_on_machine —在基础计算机(主机)上执行插件
- pre_create —在启动容器之前执行插件
在AWS上使用PostgreSQL集群部署Java应用程序
可以通过导航到“ 库” ,然后在任何已发布的应用程序模板上单击“ 定制”来完成。 然后,您可以选择一个集群 ,然后单击“运行”。
访问已部署的应用程序
部署应用程序后,用户可以访问监视,警报,连续交付,应用程序备份,扩展/扩展,浏览器内终端以访问容器,日志流和应用程序更新。
要访问该应用程序,用户只需单击Apache HTTP Server的公开端口即可。
您会注意到PostgreSQL Master和PostgreSQL Slave在单独的AWS实例上运行。 这些实例可能位于不同的区域,以确保高可用性。 Weave覆盖网络允许这些容器进行通信,而不会暴露主机上的端口5432。
部署的应用程序是简单名称目录应用程序。 您可以保存几个名称进行测试。
验证PostgreSQL复制是否正常
现在,我们已经在Java应用程序中保存了几个名称,我们可以验证这些名称是否已正确复制到PostgreSQL从属容器上。
这是用于在运行postgres_slave_ajtpuy容器的主机上执行此验证的命令。
## Execute these commands on the host running the postgres_slave container
## Enter the postgres_slave container
docker exec -it [postgres_slave_container_name] bash
## Access the names database using psql
psql names
## List the tables
\dt;
## Select the data from the "namedirectory" table
select * from "NameDirectory";
验证EBS卷是在AWS上创建的
登录到AWS控制台并验证是否创建了两个单独的EBS卷并将其附加到PostgreSQL Master和PostgreSQL Slave容器。
监控容器的性能
一旦应用程序启动并运行,用户就可以监视正在运行的容器的CPU,内存和I / O,以在这些指标超过预定义的阈值时获得警报。 DCHQ还监视运行应用程序的基础AWS实例-捕获指标(如CPU)。 内存和磁盘利用率。
用户可以执行历史监视分析,并将问题与容器更新或构建部署相关联。 这可以通过单击统计链接来完成。 可以选择一个自定义日期范围来历史查看CPU,内存和I / O。
扩展应用程序
如果正在运行的应用程序变得资源受限,则用户可以扩展应用程序以满足不断增加的负载。 此外,例如,用户可以在工作时间安排向外扩展,在周末安排向外扩展。
要将Tomcat服务器集群从1扩展到2,用户可以单击正在运行的应用程序的“ 操作”菜单,然后选择“ 扩展” 。 然后,用户可以为群集指定新的大小,然后单击“立即运行” 。
执行横向扩展时,将使用服务发现框架来更新负载平衡器。 插件将自动在Apache HTTP Server上执行以更新httpd.conf文件,以便它知道添加的新应用程序服务器。 这是因为我们已指定post_scale_out:AppServer作为此插件的生命周期事件。
应用程序时间轴可用于跟踪对应用程序进行的每个更改,以进行审核和诊断。 可以从正在运行的应用程序页面底部的可扩展菜单中访问它。 在这种情况下,服务发现框架将在Application Server集群扩展后立即自动执行Apache HTTP Server插件。
访问容器的浏览器内终端
在Live Apps页面上,容器名称旁边应有一个命令提示符图标。 这允许用户使用安全的通信协议通过代理消息队列进入容器。 租户管理员可以定义命令白名单,以确保用户不会对正在运行的容器进行任何有害更改。
例如,对于httpd容器,我们使用命令提示符来确保在横向扩展完成后自动添加了新的容器IP。
立即下载DCHQ内部部署
- 下载DCHQ内部部署 http://dchq.co/dchq-on-premise-download.html
rex-ray