前言
最近一段时间感受了下阿里云和华为云。双方铺的面都挺全。直观上来看, 阿里云控制台有一股浓郁的toC精致范,华为云则是企业简约朴实范,作为互联网熏陶过来的人,我显然觉得前者是更漂亮和舒适的。
华为云应该是这两三年才开始发力,有点晚,而且目前来看还在于铺面,质量还没上来,尤其是在web交互上和阿里云有一定的距离,目前包括非常基础的ECS服务都还没有SDK,只有API接口。
碎碎念了,我们来看看PyMLSQL是如何操作阿里云ECS,方便大家低成本去动态控制ECS。
什么是PyMLSQL
PyMLSQL是 MLSQL一个辅助项目,目前提供两个功能:
- 为MLSQL的Python支持提供了一个可用的库。
- 提供对云的操作封装,从而实现MLSQL集群的自动化云端部署。
今天我们主要是介绍他的第二个功能。
抽象方式
对于ECS操作,使用原生的API/SDK会有如下几个问题:
- 比如创建或者释放ECS实例的动作是异步的,你需要自己去关注对应的状态。
- 我们需要发送shell命令到创建好的ECS实例中,从而实现自动化配置,目前SDK是没有相关功能的。同时我们还需要检测ECS启动后对应的ssh server是不是ready等。
一般而言,我们使用ECS实例其实是四步走:
- 启动ECS
- 执行shell脚本配置环境
- 执行shell脚本启动服务
- 关闭释放ECS
这四个步骤也是顺序执行的,需要阻塞。所以PyMLSQL提供三个核心命令:
- start 启动ECS
- exec-shell 执行shell脚本
- stop 关闭并且释放ECS实例
同时,因为不可避免的需要有client机和ECS实例互传文件的需求,所以有
- copy-from-local
- copy-to-local
两个辅助指令。
由这五个指令,基本我们就能完成我们大部分任务了。
安装介绍
最简单方式:
你也可以手动下载源码安装:
之后你就可以使用pymlsql命令了。
使用介绍
你用pymlsql --help 可以获取帮助信息。
start 指令
pymlsql start
--image-id m-bp13ubsorlrxdb9lmv2x
--instance-type {MASTER_WITH_PUBLIC_IP}
--init-ssh-key false
--key-pair-name mlsql-build-env-local
--security-group ${SECURITY_GROUP}
基本上如果你懂阿里云,那么概念是比较清晰的。这里最值得关注的是后面三个参数:
- need-public-ip 是否需要公网IP,如果你是在阿里云服务器执行指令,那这个可以设置为false,当然,如果你需要联网下载东西,那么还是需要设置为true的。
- init-ssh-key 如果设置为true,我们会自动为你生成一个秘钥,这样以后你就可以通过该秘钥登录任何通过该秘钥创建的服务器。--key-pair-name 设置秘钥的名字,然后改秘钥会自动生成在你的.ssh目录中。
- 安全组。这个你需要到阿里云控制台上先创建一个,然后指定。这个主要是为了控制ECS的端口访问的。
stop
stop指令只要填写instance_id就行。
exec-shell
我们先看一个示例:
execute-user 定义以什么用户在ECS实例中执行脚本。
案例
利用PyMLSQL,我们实现了完全由shell脚本即可在阿里云部署一套任意节点数的MLSQL集群。大家可以看看mlsql_cluster_cloud。
基本思路脚本会自动申请一台ECS实例(具有公网的),然后再登录到到ECS实例中去申请slave节点。还是很库的。