上云小记

 

0x01 系统简介: Java开发的B2B程序,以角色双节点互相组合运行.对外有webapp,及银行支付和数字签名交互服务.

 上云小记_第1张图片


0x02 云平台调研

ECS服务器选用跟内网测试环境相同相同的系统版本,先建好一台测试运行ok,制作快照存档.

RDS/Memcached/Rocketmq也跟内网测试版本尽量一致.

 

网络 ECS安全组,SLB负载均衡,根据内网外网隔离的思路建立.除了对外公共服务端口外,其他都以白名单方式开发.对内以安全组间控制网络请求,Mysql Cache MQ也设置来访问白名单. ssh端口只开放给公司出口ip.设置跳板堡垒机来在外VPN连接服务器进行调试管理.

 

同角色的多台ECS节点在切换流量过程中,通过Memcache缓存机制保持会话与中间数据的不间断,同客户端cache状态会有校验来防止异常会话.


短信等即时高效需要推送的通知和内部消息,通过RocketMQ消息队列来进行订阅消费. RDS数据库用来沉淀和归档业务数据,以及大范围的复杂逻辑查询.


Ram 子账号访问控制权限. RDS/Memcached/Rocketmq的程序调用单独开子账号设置权限和AccessKey.人员操作的账号建立角色,通过API脚本来备份数据的账号只开放AccessKey关闭控制台登陆权限.

 

前端流量主要走公网负载均衡和CDN加速,后端互相调用的带宽可以节省下来.默认内网间调用是不限速的. ecs默认限速是从服务器往外的方向,所以后端基本是发布备份用的流量有保障就可以.

 

0x03 上云过程

ECS 用之前测试过的快照直接创建自定义镜像批量新建其他节点实例,速度杠杠的.单独建一个批量发布账号,设置sudo权限及发布脚本.

RDS建库表和程序调用账号权限,单独建一个只读账户给开发查问题用.

数据库同步,可以在DTS面板创建迁移任务,设置源库为内网的测试mysql.记得修改端口和加白名单.后面勾选增量即可实时同步来进行短期数据同步测试用.

 

程序批量部署,同步war包后用发布脚本改名启服务.IP测试过后更改DNS指向到CDN加速及公网负载均衡.

 

0x04遇到的问题及解决方案

ecs上默认有运行java的云监控及云盾进程,导致测试过程中跟合同生成程序编码冲突.内网测试环境默认是设置的LANG变量,在阿里云会乱码.解决办法:Dsun.jnu/ Dfile的编码也设置UTF-8.

 

银行程序的4层协议跟阿里云SLB负载均衡兼容不好,数据不能很好的通信. 后来测试阿里云的Tengine,数据可以分发.但是hello状态检测包方式比较怪,后端很多异常log频繁刷出. 临时解决办法,使用Nginx 1.10.2官方的ngx_stream_core_module 4层负载均衡来分发解决.

 

0x05 其他考虑

其实每个云平台都有自己的特点,比如rocketmq 大数据或者监控. 同时也会有一些限制,比如自建负载均衡没有内网IP. ECS实例没有多网卡输出. RDS物理备份文件还原效率. 还有紧急工单的响应时间等. 综合考虑,还是觉得不要把宝压在一个云上面好,初期短阶段在云上面跑还可以,后面业务核心还是以IDC托管+多地云端冗余的方式比较好. 

你可能感兴趣的:(上云小记)