又快又好:基于资源编排和Ansible在经典网络下交付应用
本文是基于资源编排和 Ansible 在 VPC 下快速交付应用的姊妹篇,即在经典网络下基于资源编排和 Ansible 实现对应用的快速交付。
在经典网络环境和 VPC 环境下交付应用的最大区别在于经典网络环境不需要 VPC、VSwitch等其他相关资源的支持,只需要 ECS 和 公网 IP 资源即可。除此之外,基于资源编排和 Ansible 在经典网络下快速交付应用的流程和步骤与在 VPC 下完全相同。下面本文仍以搭建 Redis 集群为例,展示在经典网络下快速交付应用。
基于 ROS 和 Ansible 在经典网络下快速搭建 Redis 集群
和上一篇一样,在搭建应用之前,首先需要在 Master 机器上安装 ROS SDK 和 Ansible。
下面展示基于 ROS API 和 Ansible 在经典网络下快速搭建一主(Master)两备(Slave) Redis 集群的详细过程。
为了提高 Redis 集群的高可用性,在搭建 Redis 集群时为其部署高可用性解决方案 Sentinel,以帮助 Redis 集群实现自动化的主备切换。
构建资源环境
首先定义资源栈模板。由于是经典网络环境,所以在模板中只需要定义构建三台云主机 ECS 资源和对应数量的 EIP 资源即可。为了方便起见,我在模板中使用资源 "Type": "ALIYUN::ECS::InstanceGroup"
定义 ECS 资源。定义资源栈的模板可详见附件中的 python 文件 create_instancegroup_template.py。
模板定义成功后,编辑 python 代码,以模板作为参数,调用 ROS API 即可实现对资源环境的搭建。需要注意的是,在传递参数时应注意增加关于分配公网 IP 的参数。如下是调用 ROS API 的 python 文件 create_stack_instancegroup.py:
# invoke CreateStackRequest to create InstanceGroup stackfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkros.request.v20150901 import CreateStacksRequestimport create_instancegroup_templateimport json# define stack creation timeout(minutes)create_timeout = 60# define func to create stackdef create_stack(stack_name, ak_id, ak_secret, region_id):
print('invoke CreateStackRequest to create instances...')
client = AcsClient(ak_id, ak_secret, region_id)
req = CreateStacksRequest.CreateStacksRequest()
req.set_headers({'x-acs-region-id': region_id})
template = create_instancegroup_template.generate_template(io_optimized='optimized', network_type='classic', image_id='centos6u5_64_40G_cloudinit_20160427.raw', instance_password='******', instance_min_amount=3, system_disk_category='cloud_ssd', instance_max_amount=3, allocate_public_ip='true', instance_type='ecs.n1.small')
create_stack_body = '''
{
"Name": "%s",
"TimeoutMins": %d,
"Template": %s
}
''' % (stack_name, create_timeout, template)
req.set_content(create_stack_body) # get response
response = client.get_response(req) # deal response
if 201 == response[0]:
parameters = json.loads(response[-1])
print('Create stack succeccfully!!!') return parameters else:
print('Unexpected errors: status=%d, error=%s' % (response[0], response[-1])) return None
调用成功后,登录 ROS 控制台即可看到正在创建的资源栈。
创建 Inventory,获取 Playbook
这部分跟在 VPC 环境下的一样,此处不再赘述。
执行 Playbook,快速部署应用
这部分也跟在 VPC 环境下的一样,不再赘述。
在经典网络下搭建 Redis 集群的所有代码文件可详见附件。在经典网络下,Redis 集群搭建成功后的资源拓扑图如下所示:
更多深度技术内容,请关注云栖社区微信公众号:yunqiinsight。