DCOS云平台之业务多应用部署改造方案

1           云平台改造需求

由于上线活动系统平台是将所有活动封装在一套docker镜像环境。因而存在活动更新与发布应用会影响其它活动正常使用,每次上线新活动也需要测试人员对全部活动进行功能测试,增加了测试人员的工作量。活动在发布的过程中需要重启服务对其它活动使用也会存在一定的干扰,这样会让客户对系统体验效果感觉极差。

客户需求提出:

1、 新上线活动发布与调整不影响其它活动正常使用。

2、 多个活动之间性能无互相干扰。

3、 新上线的活动只需要测试新需求,测试不需要全面覆盖功能。

4、 每个应用活动对应一个子域名,并能够通过80端口来访问。

5、 手机微信端要求使用80端口访问活动。

由于当前云平台架构方案是无法满足客户提出来的以上5点要求,因而我们需要对当前云平台架构做出适当调整,已满足客户业务系统使用要求。

2           云平台改造目标

在云平台harpxoy负载上游前端加一套nginx keepalived高可用反向代理服务器,使得所有活动入口都得通过nginx反向代理,然后子域名加80端口来访问。下游每个活动单独一个docker活动镜像,然后通过云平台发布活动。后续新增的活动需要人工在nginx配置文件中加入新活动的反向代理配置,然后重载nginx配置。

3           应用部署流程

流程说明:

1、 开发提供上线代码给DCOS运维工程师。

2、 按生产配置修改上线代码中的配置。

3、 将上线代码按tag方式上传到SVN或git代码服务器。

4、 使用DCOS云平台自动化构建应用镜像。

5、 使用DCOS云平台发布应用镜像或更新应用镜像。

6、 新增活动需要在nginx服务器加入反向代理部分配置,更新活动就不需要这步操作。

7、 新增活动重载nginx配置生效,更新活动不需要这步操作。

4           活动镜像构建

注:方案省略如何去获取开发上线代码与上传SVN代码这两个操作。

4.1       上线代码配置更新

1 .修改配置文件:front/suites/config/config.php,请按实际生产地址修改。

1) 、变更操作:(修改URL 域名和Redis 地址)  

$config['sess_save_path'] = ' redis_ip:6379?auth=Redis@2017';   // 修改生产redis地址

 

// 将临时域名huodong.youoil.cn 替换成 生产域名huodongzs.youoil.cn

define('NOTIFY_URL', ' http://huodongzs.youoil.cn/front/index.php/_activity/activity/notify');

define('RETURN_URL', ' http://huodongzs.youoil.cn/front/index.php/_activity/activity/response');

 

2 )、变更REDIS 部分

$config['redis'] = [

      'host'              =>  'redis_ip',

      'port'              =>  '6379',         

      'auth'              =>  'Redis@2017',         

      'time_out'          =>  1,             

      'retry_interval'    =>  100,            

];

 

2. 修改生产数据库配置文件 front/suites/config/database.php

变更操作:( 修改生产数据库的IP 地址、数据库名、账号与密码)

'hostname' => ' db_ip [WU1] ,                

'username' => ' activitycenter' [WU2] ,                 

'password' => ' password' [WU3] ,           

'database' => ' activitycenter [WU4] '      

 

3. 修改代码front/suites/themes/default/js/activity.js文件

// 修改成外网映射域名

var signUrl =   options.isTest ? ' http://huodongzs.youoil.cn/front/index.php/_activity/activity/make_sign'   : '';

var url = options.isTest   ? ' http://huodongzs.youoil.cn/front/index.php/_activity/activity/entrance'   : '';

4.2       应用镜像准备

1、 定义数据卷

宿主机共享路径

容器路径

目录用途

/sharefs/cecrm_acitivtycenter/frontcert

/var/www/cecrm_acitivtycenter/uploads

存储前台证书

/sharefs/cecrm_acitivtycenter/uploads

/var/www/cecrm_acitivtycenter/cert

存放后台推送过来的活动静态文件

 

 

2、 前台应用镜像dockerfile

前提条件:

1) 需要准备一个安装好nginx1.0+php-fpm7.0支持redis、gd、unzip等扩展包的基础镜像。

2) 准备好开发完成的应用代码

3) 准备好应用加载的配置文件

4) 准备nginx配置文件

5) 前台应用dockerfile文件(dockerfile文件由开发商提供)

FROM xx.xx.xx.24/dcos_mgmt/nginx-phpfpm70:v1.0.3  ## 基础镜像

MAINTAINER   jaymarco@shsnc.com

ADD front   /var/www/cecrm_acitivtycenter/front        ## 代码文件

ADD   website.nginx.conf /etc/nginx/conf.d/website.nginx.conf  ##nginx 配置文件

ADD   MP_verify_xhggISVWupuON4Z9.txt  /var/www/cecrm_acitivtycenter/MP_verify_xhggISVWupuON4Z9.txt   ## 微信验证文件

4.3       活动镜像构建

首先开发商将活动平台代码提交给中经汇通运维工程师,并将代码提交到中经SVN服务器上面,然后运维同事按( 4.1 小节)变更配置文件后将文件更新SVN服务上。

 

1 登录DCOS平台,进行“资源管理”—》“项目镜像”,然后点击“新建”

2 、选择系统对应的项目,并输入镜像名

3 、代码控制选择 ”svn”

4 、输入SVN地址,SVN账号和密码,然后选择对应的SVN版本号

 

5 、选择自定义构建SVN模板,输入镜像版本号,然后定义好构建镜像流水线命令

6 、点击“开始构建”按钮

5           云平台发布活动

5.1       部署新增活动

地址: https://SVN_IP/svn/projects/ 活动平台 /tags/front

账号: activity_platform

密码: act_plat_123456

1 、创建活动平台应用: 活动平台系统

2 、创建服务

1 )、设置服务器名称、容器资源分配和容器个数。

2 )、选择服务的镜像名和网络模式。

3 )、设置服务映射端口。

4 )、配置服务使用负载均衡

5 )、配置应用健康检查

6 )、配置服务存储卷

 

7 )、指定容器运行集群

5.2       更新活动应用

这里举例更新一下活动平台后台应用镜像

1 、选中“活动平台后台”服务,然后点“服务管理”按钮

2 、然后选择“容器设置”选项,找到部署版本找到需要更新的镜像。最后点确定。

6           更新 NGINX 反向代理

这里就不介绍如何去搭建一套nginx+keepalived 主从环境,主要介绍新增了活动如何来更新反向代理配置。

注:以下操作步骤只是针对新活动发布,更新老活动不需要以下配置。

1、   查看活动发布后对应的端口

 

2、 将发布后的新活动映射到nginx代理。

请在两台nginx服务器增加反向代码配置

NGINX 服务器(xx.xx.xx.37, xx.xx.xx.38)

请在两台nginx 配置文件/etc/nginx/conf.d/website.nginx.conf 增加如下内容

#################################add   proxy############################

upstream hd3_cluster [WU5]  {

      ip_hash;

      server xx.xx.xx.31:10013;

    server xx.xx.xx.32:10013; [WU6] 

}

 

server {

          listen      80;

          server_name  hdtestone.youoil.cn [WU7] ;

           location ~ ^/NginxStatus/ {

            stub_status on;

            access_log off;

           }

           location / {         

            proxy_pass http://hd3_cluster/ [WU8] ;

            proxy_buffering off;

            proxy_redirect off;

            proxy_set_header Host $host;

            proxy_set_header X-Real-IP   $remote_addr;

            proxy_set_header REMOTE-HOST   $remote_addr;

            proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;

            client_max_body_size 50m;

            client_body_buffer_size 256k;

            proxy_connect_timeout 30;

            proxy_send_timeout 30;

            proxy_read_timeout 60;

            proxy_buffer_size 256k;

            proxy_buffers 4 256k;

            proxy_busy_buffers_size 256k;

            proxy_temp_file_write_size 256k;

            proxy_next_upstream error timeout   invalid_header http_500 http_503 http_404;

            proxy_max_temp_file_size 128m;

          }

}

#################################end   proxy############################

 

3、 重载 NGINX 配置

新增活动后在两台nginx 主机上面生效配置。

/usr/sbin/nginx –s reload

有需要的朋友可以关注我的公众号,文章每日一更


请使用浏览器的分享功能分享到微信等