把本地数据中心之中的工作负载转移到AWS云平台那里,这是企业数字化转型的关键一步。
这并非只是物理服务器的搬迁行为,更是存在如此机会,即对现有的架构去进行现代化的架构重构,进而实现降低成本并提高效率的绝佳时机。
本文会立足于资深运维工程师的视角,通过实战的形式,细致地剖析虚拟机、数据库、应用以及数据朝着云端进行迁移的整个流程,并且给出与之配套的运维以及安全加固指南。
一、迁移前的准备:规划与评估
在动手之前,务必对现有“工作负载”进行盘点。
选取我们当下正在运作的 LNMP 环境(即 Linux 加上 Nginx 再加上 MySQL 紧接着加上 PHP)应用当作例子,我们所要做到的是明确。
应用类型强>:究竟是那种属于stateless的无状态应用呢,还是那种依赖本地会话的stateful应用呀?
数据库:是自建 MySQL,还是使用了云数据库 RDS?
依赖关系:应用之间有无内网调用?
数据量:静态文件、数据库体积有多大,带宽如何?
最终要达成的评估目的便是去制定这样的路线图,即明确哪些属于”直接迁移“的范畴,哪些又是”重构后再迁“的类别。
二、分步实操:LNMP 应用平滑迁移至AWS
这一回的实战场景是,把一台处于本地的虚拟机之上运行的系统为CentOS 7 且为LNMP架构的WordPress站点,转移至AWS那里。并且,最终要运用RDS数据库以及S3用来存储静态资源,达成架构的升级。
第一步:使用 AWS SMS 将虚拟机“直接迁移”上云
在那些不想对系统环境一番折腾闹腾的情形之下,AWS Server Migration Service (SMS)不失为一个能够提供助力的好东西。
操作目的:把本地的虚拟机镜像复制于 AWS,去生成一份处于云上的 AMI。
2. 执行细节:
在本地开展 AWS SMS 连接器即 Connector 的部署工作,随后将其与 AWS 服务进行关联。
创建迁移任务,将源虚拟机复制为 AMI。
注意事项:首次复制是全量,后续是增量。
鉴于数据并非实时进行同步,所以在生产环境实施切换之前,务必要停止机器运行,从而开展最后一回的同步操作。
3. 排错思路:要是连接器没办法完成注册,那就查看一下,本地防火墙有没有将必要的 AWS 端点放行,与此同时,还要看看连接器所在主机的 DNS 能不能把 AWS 服务域名解析出来。
第二步:使用 DMS 将自建 MySQL 零宕机迁移至 RDS
数据库是核心。
我们扔掉传统的那种“先停止服从而之后再进行导出以及导入”的做法,借助AWS Database Migration Service (DMS)达成持续同步。
1. 操作目的就是,把本地的 MySQL 数据,进行全量加载,加载到云上的 RDS 那里,然后开启实时同步,一直持续到切换前夕。
2. 执行细节:
创建复制实例(Replication Instance)。
搭建源端点,需填入,当地 MySQL 的,内部网络 IP,以及端口,还有账户密码。
一定要保证,那个 DMS 复制实例,能够去访问那个 IP,其访问途径可以是借助虚拟专用网络,或者是通过 Direct Connect。
达成目标端点,挑选预先创建的 RDS for MySQL 实例。
创建迁移任务:选择“迁移现有数据并复制持续更改”模式。
三点,关于配置要求,本地的MySQL,务必开启Binlog,并且其格式要是ROW。
这是 DMS 捕获数据变更的前提。
4. 注意事项:于生产割接之前,要让 DMS 任务处于运行状态,并且需随时对延迟情况进行监控。
当延迟为 0 时,即可停写本地应用,再将流量切至 AWS。
第三步:在 AWS 上部署应用环境并配置数据
当虚拟机(AMI)迁移完毕之后,我们能够启动一台 EC2,不过基于要充分展现云原生的优势,我更偏向于在全新的 EC2 上面再度部署 LNMP,其中的数据是从 RDS 那里读取的。
操作目的:实行 LNMP 环境的布设,使其符合标准,进而与 RDS 建立连接。
2. 执行细节:
# 在 EC2 上安装 EPEL 和 Remi 仓库,以获取最新 PHP
sudo yum install -y epel-release
sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum-config-manager --enable remi-php74
# 安装 Nginx、PHP、PHP-FPM
sudo yum install -y nginx php php-fpm php-mysqlnd php-xml php-gd
# 启动服务并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl start php-fpm
sudo systemctl enable php-fpm

3. 进行应用配置的修改:把WordPress的中的wp-config.php打开,针对数据库主机地址,要从localhost变更为RDS的内网域名,像database.cluster-xxx.rds.amazonaws.com这样的,并且还要将用户名密码改成RDS的高权限账号。
4. 要提升加载速度以及降低服务器负载,把附件上传目录(即/wp-content/uploads)整个复制到 S3 桶,还要安装 S3 Offload 插件,以使媒体库直接读取 S3,此为静态资源剥离。
第四步:切换 DNS 与配置 HTTPS
操作目的是,把自本地 IP 出发的公网流量,指向 AWS 的负载均衡器,或者 EC2 的公网 IP。
2. 执行细节:
于 AWS 那儿去创建 Application Load Balancer(ALB),并且对监听器 80/443 予以配置。
将后端 EC2 实例加入目标组,ALB 会进行健康检查。
配置SSL/HTTPS操作如下,在AWS Certificate Manager即ACM中申领公有证书,像那种以.yourdomain.com结尾类型的。然后把所申领的这块公有证书,关联至ALB的HTTPS监听器上。如此这般就可达成一键托管证书的效果,进而免去在服务器那边手动进行续签的繁杂麻烦。
第一步,进行所谓域名解析,第二步,在DNS服务商那里,第三步,把A记录或者CNAME记录,第四步,变更为ALB的域名。
考虑到 DNS 缓存,此操作建议在业务低峰期进行。
三、加速与安全:CDN 与安全加固
开启 CloudFront CDN
目的:加速全球访问,并隐藏源站真实 IP。
先进行配置,此配置为创建CloudFront分配,在创建该分配时,要把源站按照要求设置为ALB的域名。
CloudFront能够自动跟ACM进行集成,从而对HTTPS予以支持。
针对于静态文件(像是 .jpg, *.css),缓存行为能够设置较长的 TTL,而动态内容会直接透传至源站。
AWS 安全服务实战
名为WAF(Web Application Firewall)的防护措施,它被附加于CloudFront或者ALB之上,并且配置有规则集,像SQL注入、XSS阻断这类规则集,其作用是用以保护WordPress,使其免受常见的Web攻击。
安全中枢:开启之后,它会将源自威胁检测的GuardDuty以及漏洞扫描的Inspector的安全发现进行聚合,进而提供一样的安全评分与改进建议,使得你对于云上资产的安全态势能够一眼就看明白。
使用 IAM 角色 , EC2 实例并不再运用长期 AccessKey , 是赋予以此一个其可具备得以访问 S3 、 RDS 等资源能力的 IAM 角色 , 这属于最为基本且相当重要的安全实践。
四、故障排查与备份恢复
常见故障排查
1. 502 错误网关:一般来讲呢,是 PHP - FPM 没有启动起来,或者是 Nginx 跟 PHP - FPM 的 socket 方面,通信配置存在不一致的情况。
查看,是不是指向到正确的,fastcgi_pass参数,在nginx.conf里边,php-fpm.sock文件或者端口。
2. 数据库连接出现失败状况:首先 ,通过执行 telnet RDS域名 3306 来对网络连通性展开测试。
接着,查看 RDS 安全组的入站规则那儿,有没有对 EC2 的私有 IP 予以放行,或者有没有放行安全组 ID 呢。
3. DNS解析未产生预期生效效果:运用 dig,或者 nslookup 来确定解析所呈现出的结果。
若需切回,保留原环境至少一周。
备份与恢复策略
在 RDS 当中默认开启自动备份所涉及的自动化备份之事,其保留期能够被设置成为 7 天到 30 天这个范围。
EC2能够借助AWS Backup服务,去创建具有周期性的AMI备份。
数据库恢复演练:定期于测试环境里,依靠RDS的快照去恢复出一个全新的库,用以验证数据的完整性以及可用性。
数据冗余:S3自身在于那具有99.99999999%持久性的存储,将版本控制功能予以开启,以此来防止出现误删或者覆盖的情况,这便是最佳的数据保护。
五、总结
于此次迁移实战当中,我们把本地工作负载迁移至了云上,而且利用了诸如 RDS 托管数据库、S3 对象存储、CloudFront CDN 这样的云原生服务,达成了架构的升级,这一点更为关键,是极其重要举足轻重的。
对运维人员来讲,这表明我们无需再为数据库的硬件故障而操心,不用再管 MySQL 的源码编译环境,也不用每日手动去备份文件,能够把精力更多地集中在业务代码以及性能优化方面。
此一整套流程,展现出了“直接迁移”跟“现代化改造”的有机融合状况,它乃是企业实现上云的一条稳健可靠的可行途径。

Comments NOTHING