App自动伸缩autoscaling_release
1 App自动伸缩的原理:
2 准备工作:
2.1 安装mysql
1. 下载安装程序包,可到MySQL官方网站www.mysql.com下载,得到mysql-installer-community-5.6.20.0.msi和mysql-workbench-community-6.1.7-win32.msi,先安装mysql-workbench-community-6.1.7-win32.msi再安装mysql-installer-community-5.6.20.0.msi
2. 双击下载的安装文件mysql-installer-community-5.6.20.0.msi,点击“Install MySQL Products” 勾选“I accept the license terms”后,点击“Next”,选择下方的“Skip the check for updates(not recommended)”,点击“Next”继续;根据右侧安装类型描述文件选择适合自己的安装类型,选择developer,根据你所选择的安装类型,会需要安装一些框架(framework),等待所需框架均安装成功;
3. 服务器配置型选择,Developer Machine——安装的MySQL服务器作为开发机器的一部分,在三种类型选择中,占用最少的内存;Server Machine——安装的MySQL服务器作为服务器机器的一部分,占用内存在三种类型中居中; Dedicated MySQL Server Machine——安装专用MySQL数据库服务器,占用机器全部有效的内存。可不做修改,默认端口3306等也可不做修改,点击“Next”;
4. 设置管理员密码,root
5. 可以设置系统服务器名称,是否在系统启动的同时自动自动MySQL数据库服务器,可用默认选项,点击“Next”;
6. 安装成功;
7. 打开mysql Workbench
在左侧的Navigation面板里新建一个叫config的数据库,必须新建一个空的config,要不然autoscaling-config连不上,然后点击managemt,打开users and privileges,add account 添加用户名root,10.137.46.122地址,和密码为root
或者在右侧输入grant all privileges on *.* to 'root'@'10.137.46.122' identified by 'rootidservice_instance_idrulesrules';并执行。授权给使用数据库的用户。
2.2 安装rabbitMQ
这里使用现有的rabbitMQ,地址为10.179.104.101:5672,用户名为cf,密码为cf
2.3 下载autoscaling_release源码
进入/usr/local/目录,执行git clone http://rnd-github.huawei.cn/w00204372/autoscaling_release.git,进入autoscaling_release目录,执行git submodule init和git submodule update
将src / rnd-github.huawei.cn / paas / paas-controller / Godeps / _workspace / src目录下的code.google.com和github.com目录复制/usr/local/autoscaling_release/src下;
3 autoscaling-config:
3.1 autoscaling-config编译运行
进入/usr/local/autoscaling_release/src/autoscaling-config目录,其结构大致如下图:
进入conf目录,打开app.conf,按下图配置:autoscaling-config起在10.137.46.122:8082,mysql在10.135.68.174:3306,rabbitmq在10.179.104.101:5672;
回退到/usr/local/autoscaling_release/src/autoscaling-config,执行go build,go install,可以看到生成了一个autoscaling-config的可执行文件,执行./ autoscaling-config,可以看到类似如下提示,因为我数据库里的表已经建好了,这里提示已经存在,若第一次运行成功,会提示创建表成功。
到此autoscaling-config已经成功运行了,需要注意的是该程序会在/root/.cf/下保存一份admin.config,若相关配置更改,需要将这个文件删除,否则,更改配置无效。
3.2 用PostMan模拟发送请求
打开autoscaling-config的路由文件autoscaling-config\routers\router.go,在这里定义了autoscaling-config对外暴露的9个rest请求:
其中,前五项以/V2开头的请求是autoscaling-config与autoscaling-service-broker交互的接口,很不幸,本人未能 拿到autoscaling-service-broker的源码!后4项是autoscaling-config与autoscaling-dashboard交互的接口,autoscaling-dashboard是用js写的,可以看其源码,下面介绍这九条rest请求中几个重要的。
1. "/v2/service_instances/:id"
这条路由是用来创建service_instances的,:id指定了新建service_instances的instance_id,在PostMan里生成如下请求:
添加"service_id","plan_id","organization_guid","space_guid"字段,填入相应的值,其中"organization_guid","space_guid"可通过在cf客户端设置set CF_TRACE=true,调用cf org ORG和cf space myspace来查看起guid。
在autoscaling-config\controllers\service_instance_controller.go中定义了该条请求的具体处理方法,func (this *ServiceInstanceController) CreateServiceInstance(),该方法是提取请求中的"service_id","plan_id","organization_guid","space_guid"字段信息,将其写入数据库
service_instances表中。在发送该请求后,可以看到autoscaling-config有输出提示:
再来看看数据库中的数据,已经成功写入了:
2. "/v2/service_instances/:instance_id/service_bindings/:id"
这条路由是用来创建service_bindings的,:id指定了新建service_bindings的service_binding_id,:instance_id指定了要绑定的服务的instance_id,在PostMan里生成如下请求:
添加"service_id","plan_id","app_guid"字段,其中service_id与plan_id前面创建service_instance_id为2的保持一致,app_guid可以通过cf客户端发送cf apps看到。
在autoscaling-config\controllers\service_binding_controller.go中定义了该条请求的具体处理方法,func (this *ServiceBindingController) CreateServiceBinding(),该方法是提取请求中的"service_id","plan_id","app_guid"字段信息,将其写入数据库service_ bindings中。在发送该请求后,可以看到autoscaling-config有输出提示:
再来看看数据库中的数据,已经成功写入了:
3. "/v2/catalog"
这条路由是用来查询信息的的,由autoscaling-config\controllers\catalog_controller.go中的func (this*CatalogController) GetCatalog()方法处理。
4. "/policy_config"
这条路由是用来创建policy的,在PostMan里生成如下请求:
添加"Policy"和"Rules"字段,在autoscaling-config\controllers\policy_config_controller.go中定义了处理方法,func (this *PolicyConfigController) CreatePolicyConfig(),该方法会提取"Policy"和"Rules"字段,写入数据库policies和rules表中,再执行了这个请求后,数据库的policies和rules表中会增加相应的信息:
5. "/policy_config/:service_instance_id
该请求根据:service_instance_id,在数据库中查询,并删除对应的policy和rules,具体由autoscaling-config\controllers\policy_config_controller.go中的func (this *PolicyConfigController)DeletePolicyConfig()处理。
/policy_config"
该请求是更新策略规则的,是put请求,与之前的创建不同。
/policy_config/:service_instance_id"
该请求是查询对应:service_instance_id的策略规则
- 点赞
- 收藏
- 关注作者
评论(0)