WEB层迁移

目标:通过对常规的WEB层应用-apache迁移实验,使学员掌握WEB层应用如何使用Graviton创建和部署,以及如何迁移.

接入迁移

小汪公司是一个互联网企业,应用服务全球,前端大规模使用了CDN服务,并把Apache作为前端接入服务,原系统基于X86架构部署,现在出于将本增效的目的,需要把系统迁移到AWS Graviton架构的EC2主机上,并且希望在2小时停机窗口内完成新老系统的割接。

接入服务迁移&域名割接实验手册

实验流程:

1.创建作为目标实例的Graviton EC2,安装ARM架构下的 Apache server;

2.更改Apache配置文件,路由至 Graviton Java 的地址

3.客户端进行接入层服务响应测试;

4.CloudFront更改源站至Apache On Graviton,执行切换;

5.整体测试,验证割接。


1. Apache On Graviton 主机安装和配置

创建EC2,在左侧的控制台导航菜单选择EC2 DashboardEC2控制面板

验证控制台右上角的Region(区域)是否与本次实验的Region值一致,然后从列表中选择 Launch instance(启动实例)下拉菜单,启动实例

选择启动实例 注意:架构处的下拉框请选中 64位(ARM ),如下图

启动实例的参数如下:

创建EC2如下:

  • 名称: Graviton_Target-Web
  • 实例类型:C6g.large
  • Amazon Machine Image(AMI): Amazon Linux 2 AMI(HVM)
  • 架构:64位(***ARM*** )
  • 密钥对名称:ee-default-keypair.pem
  • VPC: Graviton-GameDay-VPCStack-xxxxxxxx
  • 子网组:Public subnet 1
  • 安全组:选择一个安全组 Graviton-GameDay-SecurityGroupStack-xxxxxxx-WebServerSecurityGroup
  • 实例实例:1

最后点击启动实例按钮在,请在summary(汇总)核对下参数信息。 启动完毕EC2后,可以悬着 View all instance(查看所有实例),等待实例的状态显示为Running(正在运行),这表示实例已完成启动。

2. 登录Apache On Graviton,完成Apache安装和配置

3.1使用登录SSM的远程连接管理器或者Putty连接到堡垒机

登录到堡垒机后再登录到Apache服务器,请您记录下源java的Private IP DNS name如下图所示

在堡垒机上使用ssh命令登录后端机器,输入

ssh -i ee-default-keypair.pem ec2-user@<your-redis-Private-name>

其中 ee-default-keypair.pem替换为您秘钥的文件名,<your-web-Private-name>替换为您在控制塔查看的redis的Private IP DNS name,输入yes以便确定连接

3.2 部署ARM架构下的httpd AWS extras了流行的软件包,在任何平台安装常用的软件包非常简单,现在我们在Web目标机上使用安装命令,输入


sudo yum -y update -y
sudo yum install -y httpd

得到如下返回

............
  Verifying  : httpd-filesystem-2.4.54-1.amzn2.noarch                                                                                                            7/9 
  Verifying  : apr-1.7.0-9.amzn2.aarch64                                                                                                                         8/9 
  Verifying  : httpd-tools-2.4.54-1.amzn2.aarch64                                                                                                                9/9 

Installed:
  httpd.aarch64 0:2.4.54-1.amzn2                                                                                                                                     

Dependency Installed:
  apr.aarch64 0:1.7.0-9.amzn2              apr-util.aarch64 0:1.6.1-5.amzn2.0.2 apr-util-bdb.aarch64 0:1.6.1-5.amzn2.0.2 generic-logos-httpd.noarch 0:18.0.0-4.amzn2
  httpd-filesystem.noarch 0:2.4.54-1.amzn2 httpd-tools.aarch64 0:2.4.54-1.amzn2 mailcap.noarch 0:2.1.41-2.amzn2          mod_http2.aarch64 0:1.15.19-1.amzn2.0.1    

Complete!

3.3 由于我们更新了后台Java-Tomcat的地址,我们需要更新Hpptd的配置文件

删除默认的httpd.conf文件,并使用vim编辑器编辑配置文件,请复制执行以下命令(以下vim内的配置信息由原x86环境httpd.conf复制而来)

sudo rm -rf /etc/httpd/conf/httpd.conf

sudo vim /etc/httpd/conf/httpd.conf

#web
ServerRoot "/etc/httpd"
Listen 80
<VirtualHost *:80>
ProxyPass / http://$APPEndpoint:8080/
ProxyPassReverse / http://$APPEndpoint:8080/
</VirtualHost>
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
<Directory />
    AllowOverride none
    Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
<Files ".ht*">
    Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>
<IfModule mime_module>
    TypesConfig /etc/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
<IfModule mod_http2.c>
    Protocols h2 h2c http/1.1
</IfModule>
IncludeOptional conf.d/*.conf

请将$APPEndpoint替换为您在应用层迁移中完成的Graviton_Target-App的Private DNS,如图 然后按ESC 并且输入:wq 保存退出

启动Web服务并进行本地验证

现在我们启动httpd服务,并为apache赋予权限,请执行以下命令

sudo su
systemctl start httpd.service
systemctl enable httpd.service
systemctl status httpd.service

usermod -a -G apache ec2-user
chown -R ec2-user:apache /var/www
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} \;
find /var/www -type f -exec chmod 0664 {} \;

在您的WEB服务器上Curl一下80端口,请输入以下命令

curl 127.0.0.1:80/sample-webapp/

您将得到如下返回,是我们Contact Management应用系统的前端代码

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
<link rel="stylesheet"
        href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
        integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
        crossorigin="anonymous">
</head>
<body>
        <div class="container col-md-5">
                <div class="card">
                        <div class="card-body">
                                        <form action="j_security_check" method="post">
                                <caption>
                                        <h2>
                                                Wellcome to Graviton Game Day
                                        </h2>
                                        <h2>
                                                Login to Contact Management
.......
.......
                                                name="j_password">
                        </div>
                </div>
        </div>
</body>

在您的自己的笔记本或任意客户端上Curl一下Graviton Web服务器Public IPv4 DNS的80端口,请输入以下命令,您将依然得到同上的返回,是我们Contact Management应用系统的前端代码

curl ec2-18-213-151-194.compute-1.amazonaws.com:80/sample-webapp/

返回
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
<link rel="stylesheet"
.............
                                <caption>
                                        <h2>
                                                Wellcome to Graviton Game Day
                                        </h2>
                                        <h2>
                                                Login to Contact Management
....................................................

当然,您也可以使用浏览器访问迁移完成后的web层服务地址,例如 http://ec2-18-213-151-194.compute-1.amazonaws.com:80/sample-webapp/

请将ec2-18-213-151-194.compute-1.amazonaws.com替换为您自己的Graviton Web服务器Public IPv4 DNS

至此,您完成了接入层的迁移,并且验证了接入层验证与迁移后应用层的调用测试


而如果您的CURL命令得到404等其他报错,说明您并没有正确完成实验。可推断您的任一迁移环节出现笔误或缺失,您可以检查配置文件,查看httpd 日志进行排错

4.进行cloudfront进行割接

登录到您的AWS控制台,导航至Cloudfront

点击Distributions,或 分布,然后点击Origins,或 源

现在gravitongameday这个部分,他现在是指向原Web服务的配置,我们要替换迁移后为Graviton Web的服务地址

请先前往查看记录Graviton Web的服务的公网地址

回到Cloudfront页面,点击Origins,或 源的编辑按钮,将新的地址复制过来,点击确认保存

现在您在公网服务域名不变的情况下完成了后端的切换,请暂停原有web服务主机,到浏览器输入cloudfront服务域名进行验证

以上,恭喜您,您完成小汪公司apache/java/redis/mysql全套架构从x86到Graviton迁移和平滑割接的伟大壮举!