1. 初识倍市得
从陌生到熟悉,再从熟悉到陌生
入职开始接触倍市得私有化部署,通过编写shell脚本,不仅在技术上有所收获,因为工作上有了共同话题,也更快的融入到了团队中,初步得到大家的认可。
虽然shell的部署方式在刚哥的筹划中,但在其中扮演着承上启下的角色,当时也带来了小小的骄傲。
2. SaaS的前世今生
SaaS 虐我千百遍,我待SaaS如初恋
倍市得SaaS是个爱漂亮的小姑娘,从相遇开始,就迫不及待的想要让自己变的更漂亮更完美。于是在迁移的道路上一往无前,勇敢的让人心疼…
2.1 邋遢的小姑娘
最初,倍市得SaaS就像一个邋遢的小姑娘,爹不亲娘不爱。各种资源名称随意命名,更新迭代的文件配置让人分不清真假,配置文件路径时常跟你玩躲猫猫,混乱的安全组规则仿佛在向入侵者呐喊:“向我开炮…”,各个服务器上的iptables规则和扫雷游戏差不多……哇哦,真是糟糕透了!
2.2 开始蜕变
俗话说,没有丑女人只有懒女人。来吧,让我们开始梳妆打扮,gogogo!
SaaS 迁移改造.pdf
越是了解你,越是感觉像一层层的剥开洋葱的外衣,让我泪流满面…
可怜的孩子,我发大宏愿:愿用下一个照顾你的人的全部幸运,来换取你以后的幸福。
首先,号召江湖的能人志士来出谋划策(SaaS迁移启动会)。
接下来,大大小小的会议沟通数十次,每一次的变动都是为了预见更好的你
心得小结
- 多思考,多请教,多沟通
- 开小会,开短会,每日小会的时长10分钟,与各接口人同步进度
- 明确议题,相关资料提前准备好,会必议,议必决,决必行,行必果
- 提高团队协作,挖掘进度难点,努力解决其他人的困难
- 小事当日毕,大事领导定,发现无法协调解决的问题及时升级反馈
最终,我们制定了详细的上线变更步骤(194次变更)和对应的进度迁移排期,与各路豪杰抱着三千越甲可吞吴的气势来迎接你的到来。
2.3 破茧成蝶
历时18小时的改头换面,在各路英雄的不懈努力下,我们宣布倍市得涅槃重生,新生的你美的不可方物。
应用标准化
1.1 统一命名
1.1.1 环境名称
1.1.2 资源命名
1.1.3 应用命名
应用名-模块名-环境-编号-资源类型
xm-apisix-prod-10001-ecs
xm-app-prod-10001-ecs
1.1.4 容器命名
应用名-模块名功能
xm-apprpc app组件的rpc模块
xm-biapi bi组件的api模块
xm-miniproblem 前端小程序
1.2 安全组
根据安全组的使用方式,我们将安全组进行如下定义:
- VPC级别的安全组:所有属于这个VPC的服务器都必须要加入这个安全组,对这个安全组的调整只会影响服务器的管理,不会对业务造成影响禁止在这个安全组中添加允许出的策略,禁止 0.0.0.0
层级的安全组:所有属于这个层级的服务器都必须要加入这个安全组,这个安全组设置一些针对这个层级的安全组策略,比如数据层需要开放应用层的访问,应用层之间开通一些互访端口
- 应用层安全组 :允许应用之间服务器互访
- 8000/9000
- 80
- 443
数据层安全组: 允许数据之间服务器互访,允许应用层的服务器访问
- 6379
- 27017
- 5672 15672 25672 4369
2181 3888 2888
8123 9000 9009
2379 2380
- 应用层安全组 :允许应用之间服务器互访
特殊安全组:常规标准端口外的额外端口,如通过zeus反代到可视化的应用服务,如rabbitmq 管理界面,apisix dashboard等
1.4 nginx
优化apisix的默认nginx.conf文件
user www www;
worker_processes auto;
error_log /data0/logs/nginx/nginx_error.log error;
pid /var/run/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
multi_accept on;
}
http {
server_tokens off;
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
proxy_ignore_client_abort on;
variables_hash_max_size 2048;
ssl_session_cache shared:SSL:10m;
proxy_next_upstream http_503 http_504 error timeout invalid_header;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_comp_level 4;
gzip_types font/ttf font/otf font/opentype application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-javascript application/xml application/xml+rss application/xhtml+xml font/truetype image/svg+xml text/css text/javascript text/js text/json text/plain text/x-component text/xml;
gzip_vary on;
log_format json '{'
'"agent":"$http_user_agent",'
'"status":"$status",'
'"host":"$host",'
'"hostname":"$hostname",'
'"method":"$request_method",'
'"request_uri":"$request_uri",'
'"port":"$remote_port",'
'"protocol":"$server_protocol",'
'"real_ip":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"remote":"$remote_addr",'
'"request_length":"$request_length",'
'"request_time":$request_time,'
'"scheme":"$scheme",'
'"server_addr":"$server_addr",'
'"size":$body_bytes_sent,'
'"time":"$time_iso8601",'
'"upstream_addr":"$upstream_addr",'
'"upstream_response_time":"$upstream_response_time",'
'"upstream_status":"$upstream_status",'
'"uri":"$uri",'
'"user":"$remote_user"'
'}';
access_log /data0/logs/nginx/accesslog.log json;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $http_x_real_ip;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
proxy_set_header X-SERVER-IP $server_addr;
proxy_http_version 1.1;
proxy_set_header Connection "";
include conf.d/*.conf;
}
1.5 docker
2、组件配置
2.1 系统镜像
packer 打包基础镜像,需求如下:
- 系统centos7.9,修复最新漏洞
- 新增系统用户www
- 新增系统组docker,www用户添加到docker组
- 新增docker应用,版本:20.10.3
- 新增docker-compose应用,版本:1.25.5
daemon.json配置如下
{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }, "max-concurrent-downloads": 10, "max-concurrent-uploads": 10, "registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com"], "bip": "172.17.10.1/24", "storage-driver": "overlay2", "data-root": "/data/docker", "iptables": true, "storage-opts": [ "overlay2.override_kernel_check=true" ] }
iptables需要关闭
2.2 ECS
磁盘优化,80G系统盘,40G日志盘,数据盘(如需)
好处:
更换操作系统,不影响数据
快速扩缩容
镜像重新打包,修复最新漏洞,磁盘容量缩容,定义日志和应用路径
安全改造
数据备份
弹性伸缩一、 配置弹性伸缩的核心服务有:
1、 xm-ds-prod
2、 xm-surveyapi-prod
3、 xm-nexus-prod
4 、xm-appgrpc-prod
5、 xm-rpc-prod
6、 xm-celery-prod
7、 xm-tinyurl-prod
8、 xm-bigrpc-prod
9、 xm-appapi-prod
10、xm-biapi-prod
11、xm-dstask-prod
12、xm-nexusadmin-prod
13、xm-fed-prod
14、xm-fedapaas-prod
15、xm-other-prod
16、xm-push-prod
二 、不支持扩缩容的服务有:
xm-tools-prod 服务为仅支持单节点启动
三 、 自动扩缩容规则:
cpu 使用率(平均) > 80 (1分钟连续3次) 扩容 1 台 cpu < 20 (1分钟连续5次)缩容 1 台
每次执行完需要360秒后才能进行再次触发执行
成本控制SaaS:为什么要控制成本?
我:老板说你胖,不好看…
https://wiki.idiaoyan.cn/pages/viewpage.action?pageId=49615145
准入控制
https://wiki.idiaoyan.cn/pages/viewpage.action?pageId=41985037
- JumpServer 权限申请控制
- 阿里云 RAM 用户权限控制
- 数据库 DMS 用户操作控制
- OA 权限申请指引 more and more
- grpc 调优,解决负载不均衡
- 数据库云盘开启加密,引入KMS
- 优化 WAF 跨站规则
- 优化 CDN 跨域问题 CDN请求跨域问题分析.pdf
- 优化CK、MQ配置参数
- OSS 权限公共读改为私有
- 完成倍市得三级等保
- 监控优化(prometheus、grafana、sls)
3. Terraform
terraform,一生之“敌”
倍市得SaaS 目录结构tf-alicloud-xm-pre
├── action_trail
├── kms
├── pvtz
├── ram
├── res_grp
└── snapshot
tf-alicloud-xm-prod
├── action_trail
├── kms
├── pvtz
├── ram
├── README.md
├── res_grp
├── snapshot
└── tf-backend
tf-xm-network
├── pre
│ ├── backend.tf
│ ├── locals.tf
│ ├── main.tf
│ ├── ngw.tf
│ ├── variables.tf
│ ├── versions.tf
│ └── vpc.tf
└── prod
├── backend.tf
├── locals.tf
├── main.tf
├── ngw.tf
├── variables.tf
├── versions.tf
└── vpc.tf
tf-xm-security
├── pre
│ ├── backend.tf
│ ├── locals.tf
│ ├── main.tf
│ ├── sg-data.tf
│ ├── sg-ds.tf
│ ├── sg-service.tf
│ ├── sg-vpc.tf
│ ├── sg-xm-appapi.tf
│ ├── sg-xm-fed.tf
│ ├── sg-xm-nexusadmin.tf
│ ├── sg-xm-rabbitmq.tf
│ ├── variables.tf
│ └── versions.tf
└── prod
├── backend.tf
├── locals.tf
├── main.tf
├── sg-data.tf
├── sg-ds.tf
├── sg-service.tf
├── sg-vpc.tf
├── sg-xm-appapi.tf
├── sg-xm-fed.tf
├── sg-xm-nexusadmin.tf
├── sg-xm-rabbitmq.tf
├── variables.tf
└── versions.tf
tf-xm-product
├── pre
│ ├── data
│ │ ├── clickhouse
│ │ ├── etcd
│ │ ├── mysql
│ │ ├── nas
│ │ ├── oss
│ │ ├── rabbitmq
│ │ └── redis
│ └── service
│ ├── cdn
│ ├── ecs
│ ├── ess
│ └── pvtz
└── prod
├── data
│ ├── clickhouse
│ ├── etcd
│ ├── mongodb
│ ├── mysql
│ ├── nas
│ ├── oss
│ ├── rabbitmq
│ └── redis
└── service
├── cdn
├── ecs
├── ess
└── pvtz
3.1 配置本地离线源
# zero 服务器自己的家目录
mkdir -p $HOME/.terraform.d/plugin-cache
[chao.huang@ops-zero-prod-00000-ecs ~]$ cat .terraformrc
plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"
disable_checkpoint = true
provider_installation {
network_mirror {
url = "https://terraform.idiaoyan.cn/pub/terraform/providers/"
}
}
- plugin_cache_dir 是插件的缓存目录(此目录需要提前创建不然init报错)
- disable_checkpoint 禁用 需要连接HashiCorp 提供的网络服务的升级和安全公告检查
3.2 版本升级
git仓库:https://code.idiaoyan.cn/ops/tf-network-mirror/-/blob/master/providers.json3.3 开启金手指
terraform—阿里云—资源
terraform—阿里云—modules
terraform—阿里云—github
terraform—阿里云—文档
terraform—官网—文档
terraform—入门教程
阿里云—OpenAPI—ECS4. 惊喜彩蛋
4.1 极客时间
https://ops-data-prod-10001-oss.oss-cn-shanghai.aliyuncs.com/pub/geekbang
4.2 kompose
5. 结束语
聚是一团火,散是满天星……
2021年6月入职众言科技,感恩遇见,感谢成长;
愿诸君有始料不及的运气,也有突如其来的惊喜;
青山不改,绿水长流;
人生有梦,各自精彩;
江湖再见!
莫愁前路无知己,天下谁人不识君