<th id="0poub"></th>
  1. <th id="0poub"><track id="0poub"><dl id="0poub"></dl></track></th><dd id="0poub"><track id="0poub"></track></dd>

    <dd id="0poub"></dd>
    <dd id="0poub"><pre id="0poub"></pre></dd><th id="0poub"></th>
    <th id="0poub"><track id="0poub"></track></th>
    <tbody id="0poub"><pre id="0poub"></pre></tbody>
    <em id="0poub"><acronym id="0poub"><kbd id="0poub"></kbd></acronym></em>
    logo

    地址:深圳南山區大沖國際中心21樓

    聯系我們 : contact@wise2c.com

    產品支持 : service@wise2c.com

    售前咨詢 : sales@wise2c.com

    電話: +86 (755) 33268246

    粵ICP備16049363號

    傳統重型應用服務器Websphere Application Server容器化的實踐

    深圳睿云智合科技有限公司 > 睿云新聞  > 傳統重型應用服務器Websphere Application Server容器化的實踐

    傳統重型應用服務器Websphere Application Server容器化的實踐

    2016年7月,中國銀監會發布了《中國銀行業信息科技“十三五”發展規劃監管指導意見(征求意見稿)》(下稱《意見》),《意見》表示,探索構建私有云平臺,采用成熟度高、開放性強的計算虛擬化、容器虛擬化、分布式存儲、網絡虛擬化等技術,建立資源池,形成資源彈性供給、靈活調度和動態計量的私有云平臺。同時,同步開展應用架構規劃,構建與云計算基礎設施相適應的應用架構,自主設計或推動應用開發商實施應用架構改造,并降低應用與基礎架構的耦合度。從《意見》的描述可以看到,容器技術天生的優勢以及在大規模集群管理、混合云平臺構建、微服務化應用以及云原生應用等場景的廣泛應用,很大程度上與金融業IT 的戰略轉型發展規劃相契合。容器技術正在為傳統金融業IT 技術轉型提供一種顛覆性的轉型思路。

     

    傳統WAS容器化及相關實踐

     

    從2016開始,睿云智合(Wise2C)接觸了一定數量的金融客戶同時實施了好幾個容器化管理平臺的項目,項目中實施的中間件包括Websphere/WebLogic/JBOSS EAP /TOMCAT等,在項目中針對不同客戶的具體應用的容器化感受頗深,理論上重型應用服務器Websphere Application Server(簡稱WAS)和WebLogic不能很好的在容器云平臺充分發揮大規模部署和彈性伸縮的優勢,但是在當前金融客戶實際環境中,大量的應用仍然按照傳統的方式部署在WAS和WebLogic上,所以睿云智合(Wise2C)也積極做了相關研究和探索以支持傳統的應用服務器WAS和WebLogic容器化,滿足當前金融客戶的需求,此篇文章主要介紹傳統WAS容器化及相關實踐。

     

    首先對典型的應用服務器的特性做個對比,參考下圖,由此我們不難知道為什么WAS在金融行業仍然占主導地位。

    WAS在金融行業仍然占主導地位

     

    這里就不對WAS的基本概念做展開了,當前金融客戶中WAS應用服務服務器運行主要包括兩種模式:Standalone和ND集群。在之前的項目中我們已經對Nginx+多節點WAS Standalone 和WAS ND Cluster+HIS分別進行了容器化并進行了相關簡單壓測對比,并實現了一鍵部署和彈性伸縮,另配合公司產品WiseBuild實現Java項目在WAS Standalone持續集成和持續部署。

     

    WAS Standalone

    WAS Standalone結合IBM HTTP Server簡稱IHS

    上圖是WAS Standalone結合IBM HTTP Server簡稱IHS,IBM開發了Websphere Plug-in以實現IHS和WAS的緊密結合,實測中IHS性能表現優秀,但是Nginx作為當前另一款優秀的Web Server,我們參考相關官方資料用它取代IHS并結合rancher-gen實現了WAS在Rancher容器管理平臺的一鍵部署和彈性伸縮,請參考下圖

    WAS在Rancher容器管理平臺的一鍵部署和彈性伸縮

     

    金融行業當前主流WAS應用服務器的版本是8,與舊版本相比,IBM已經用Installation Manager取代之前的updateinstaller,在WAS的dockerlized容器化中我們需要用靜默安裝取代GUI的圖形化安裝,以下是WAS安裝的Dockerfile

     

    WAS安裝的Dockerfile

     

    FROM rhel:7.2

    ARG USER=wasdmin

    ARG GROUP=wasadmin

    COPY scripts /scripts

    ARG URL=http://harbor01.test01.com:8080/was8/

    ENV PATH /websphere/IBM/WebSphere/AppServer/bin:$PATH

    ###################### IBM Installation Manager ##########################

    ?

    # Install IBM Installation Manager

    RUN groupadd $GROUP && useradd -g $GROUP $USER -m \

    ????&& mkdir -p /websphere/IBM/WebSphere/AppServer/ \

    ????&& chown -R $USER.$GROUP ?/websphere /tmp /var \

    ????&& ?wget -q $URL/agent.installer.linux.gtk.x86_64_1.6.2000.20130301_2248.zip -O /tmp/IM.zip \

    ????&& mkdir /tmp/im && ?unzip -qd /tmp/im /tmp/IM.zip \

    ????&& /tmp/im/installc -acceptLicense -accessRights nonAdmin \

    ??????-installationDirectory “/websphere/IBM/InstallationManager” ?\

    ??????-dataLocation “/var/ibm/InstallationManager” -showProgress \

    ????&& rm -fr /tmp/IM.zip /tmp/im

    ?

    ################# IBM WebSphere Application Server ######################

    ?

    # Install IBM WebSphere Application Server v855

    RUN wget -q $URL/WASND_v8.5.5_1of3.zip -O /tmp/was1.zip \

    ????&& wget -q $URL/WASND_v8.5.5_2of3.zip -O /tmp/was2.zip\

    ????&& wget -q $URL/WASND_v8.5.5_3of3.zip -O /tmp/was3.zip \

    ????&& mkdir /tmp/was && unzip -qd /tmp/was /tmp/was1.zip \

    ????&& unzip -qd /tmp/was /tmp/was2.zip \

    ????&& unzip -qd /tmp/was /tmp/was3.zip \

    ????&& /websphere/IBM/InstallationManager/eclipse/tools/imcl -showProgress \

    ??????-acceptLicense install com.ibm.websphere.ND.v85_8.5.5000.20130514_1044 \

    ??????-repositories /tmp/was/repository.config ?\

    ??????-installationDirectory /websphere/IBM/WebSphere/AppServer \

    ??????-preferences com.ibm.cic.common.core.preferences.preserveDownloadedArtifacts=false \

    ????&& rm -fr /tmp/was /tmp/was1.zip /tmp/was2.zip /tmp/was3.zip

    ?

    ############## IBM WebSphere Application Server Fixpack ##################

    ?

    # Install IBM WebSphere Application Server Fixpack v85510

    RUN wget -q $URL/8.5.5-WS-WAS-FP0000009-part1.zip -O /tmp/wasfp1.zip \

    ????&& wget -q $URL/8.5.5-WS-WAS-FP0000009-part2.zip -O /tmp/wasfp2.zip \

    ????&& mkdir /tmp/wasfp \

    ????&& unzip -qd /tmp/wasfp /tmp/wasfp1.zip ?\

    ????&& unzip -qd /tmp/wasfp /tmp/wasfp2.zip \

    ????&& /websphere/IBM/InstallationManager/eclipse/tools/imcl -showProgress \

    ??????-acceptLicense install com.ibm.websphere.ND.v85_8.5.5009.20160225_0435 \

    ??????-repositories /tmp/wasfp/repository.config ?\

    ??????-installationDirectory /websphere/IBM/WebSphere/AppServer \

    ??????-preferences com.ibm.cic.common.core.preferences.preserveDownloadedArtifacts=false \

    ????&& rm -fr /tmp/wasfp /tmp/wasfp1.zip /tmp/wasfp2.zip

    ?

    ########################### Install Java SDK 8.0 ########################

    ?

    # Install Java SDK 8.0

    RUN ?wget -q $URL/7.1.3.30-WS-IBMWASJAVA-Linux.zip -O /tmp/java.zip \

    ????&& mkdir /tmp/java \

    ????&& unzip -qd /tmp/java /tmp/java.zip ?\

    ????&& /websphere/IBM/InstallationManager/eclipse/tools/imcl -showProgress \

    ??????-acceptLicense install com.ibm.websphere.IBMJAVA.v71_7.1.3030.20160224_1952 \

    ??????-repositories /tmp/java/repository.config \

    ??????-installationDirectory /websphere/IBM/WebSphere/AppServer \

    ??????-preferences com.ibm.cic.common.core.preferences.preserveDownloadedArtifacts=false \

    ????&& rm -fr /tmp/java /tmp/java.zip

    ?

    ENV PATH /websphere/IBM/WebSphere/AppServer/bin:$PATH

    RUN managesdk.sh -setCommandDefault -sdkname 1.7.1_64 \

    ????&& managesdk.sh -setNewProfileDefault -sdkname 1.7.1_64 \

    ????&& /websphere/IBM/WebSphere/AppServer/bin/manageprofiles.sh -create -profileName AppSrv01 \

    ???????-profilePath /websphere/IBM/WebSphere/AppServer/profiles/AppSrv01 ?\

    ???????-templatePath /websphere/IBM/WebSphere/AppServer/profileTemplates/default \

    ???????-nodeName DefaultNode01 -cellName DefaultCell01 -hostName localhost \

    ???????-serverName server1 -enableAdminSecurity true -adminUserName wasadmin -adminPassword “wasadmin” \

    ????&& chown -R $USER.$GROUP ?/websphere

    CMD [“tar”,”cvf”,”/tmp/was.tar”,”/websphere/IBM/WebSphere/AppServer”]

     

     

    構建基礎WAS安裝鏡像

     

    docker build –build-arg USER=<user> –build-arg GROUP=<group> \

    –build-arg URL=<URL> -t ibmwas8:prereq ?.

    這里如果不指定參數將使用Dockerfile的默認參數,生成鏡像ibmwas8:prereq 然后基于此鏡像運行下面指令產生一個完整的WAS安裝tar包:was.tar.

    docker run –rm -v $(pwd):/tmp ?ibmwas8:prereq

    有了基本的WAS安裝包,就可以分別構建WAS Standalone 和WAS ND Cluster,當然構建后者是相當復雜的,這里主要介紹下構建WAS Standalone和Nginx結合

    以下是構建WAS Standalone的Dockerfile

     

    FROM rhel:7.2

    ?

    ARG USER=wasadmin

    ARG GROUP=wasadmin

    ?

    COPY scripts /scripts

    RUN mkdir -p /websphere/ \

    ????&& groupadd $GROUP \

    ????&& useradd $USER -g $GROUP -m \

    ????&& chown -R $USER.$GROUP /scripts \

    ????&& chmod +x /scripts/*

    ?

    #USER $USER

    ADD was.tar /websphere/

    RUN /scripts/create_profile.sh

    ENV PATH ?/websphere/IBM/WebSphere/AppServer/bin:$PATH

    EXPOSE 9080 9043

    CMD [ “/scripts/startserver.sh” ]

     

    其中需要注意的是如果想WAS Standalone能被容器快速拉起的話,需要把創建profile直接打入鏡像,否則通過ENTRYPOINT或者CMD在容器拉起時執行創建profile將會比較慢

     

    Rancher-Gen,結合Nginx

     

    Rancher-Gen是一個Python的工具,它能監聽的Rancher服務的變化,并呈現一個用戶指定的Jinja2模板。這允許用戶為現有的、并基于這些變化的服務生成配置文件。另外,Rancher-Gen提供了一種機制,在模板呈現之后會運行通知命令,基于此,所以它能自動檢測后端服務的變化,并實現nginx的動態更新

    構建Nginx和Rancher-Gen的Dockerfile

    FROM phusion/baseimage

    MAINTAINER pitrho

     

    # Step 1– Install nginx and python

    ENV DEBIAN_FRONTEND noninteractive

    RUN \

    ?apt-add-repository -y ppa:nginx/stable && \

    ?apt-get update && \

    ?apt-get install -y python-software-properties \

    ???wget \

    ???nginx \

    ???python-dev \

    ???python-pip \

    ???libev4 \

    ???libev-dev \

    ???expect-dev && \

    ?rm -rf /var/lib/apt/lists/* && \

    ?chown -R www-data:www-data /var/lib/nginx && \

    apt-get clean

    ?

    # Step 2?– Install rancher-gen

    ENV RANCHER_GEN_VERSION 0.3.0

    RUN pip install rancher-gen==$RANCHER_GEN_VERSION

    ?

    # Step 3?– Define services

    RUN mkdir /etc/service/nginx /etc/service/rancher_gen /nginxconf

    COPY nginx_run /etc/service/nginx/run

    COPY rancher-gen_run /etc/service/rancher_gen/run

    COPY default.j2 /nginxconf

    COPY start.sh /

    ?

    # Step 4?– Use baseimage-docker’s init system.

    CMD [“/start.sh”]

    ?

    # Step 5?– Expose ports.

    EXPOSE 80

    EXPOSE 443

    ?

    注意Step3中的rancher-gen_run,正是此條指令啟用了rancher-gen偵聽了Rancher的后端服務,看下腳本內容

     

    #!/bin/bash

    rancher-gen –host $RANCHER_GEN_HOST –port $RANCHER_GEN_PORT –access-key $RANCHER_GEN_ACCESS_KEY –secret-key $RANCHER_GEN_SECRET_KEY –project-id $RANCHER_GEN_PROJECT_ID $RANCHER_GEN_OPTIONS –notify “service nginx reload” /nginxconf/default.j2 /etc/nginx/sites-available/default

     

    注意在通知步驟之后,我們是怎樣通過名為?/nginxconf/default.j2 和/etc/nginx/sites-available/default 的這兩個路徑的。前者是Jinjia2模板,后者是渲染模板的輸出位置

    以下是啟用Cache的Nginx配置Jinjia2模板

     

    upstream webserver.backend {

    {% for container in containers %}

    ??{% if container[‘state’] == “running” %}

    ??server {{container[‘primaryIpAddress’]}}:9080;

    ??{% endif %}

    {% endfor %}

    }

    ?

    server {

    ????listen 80;

    ????server_name webserver_demo;

    ?

    ????location / {

    ????????proxy_set_header X-Real-IP $remote_addr;

    ????????proxy_set_header HOST $http_host;

    ????????proxy_set_header X-NginX-Proxy true;

    ????????proxy_cache my_cache;

    ????????proxy_cache_revalidate on;

    ????????proxy_cache_min_uses 3;

    ????????proxy_cache_valid any 30m;

    ????????proxy_pass http://webserver.backend;

    ????????proxy_redirect off;

    ????}

    }

    關于Rancher-Gen基本介紹就到這里,如果感興趣,請關注代碼實現? https://github.com/pitrho/rancher-gen

     

    最后看看怎么樣在Rancher中部署實現3節點的WAS Standalone +Nginx的應用棧吧

    首先編寫相應的docker-compose.yml和rancher-compose.yml文件

     

    docker.compose.yml

     

    nginx:

    ??ports:

    ??– 9080:80/tcp

    ??environment:

    ????NGINX_RUN_TYPE: rancher-gen

    ????RANCHER_GEN_ACCESS_KEY: 560B5CA0B714BEF574E0

    ????RANCHER_GEN_HOST: 192.168.122.11

    ????RANCHER_GEN_OPTIONS: –stack WAS-Nginx –service was-standalone

    ????RANCHER_GEN_PORT: ‘8080’

    ????RANCHER_GEN_PROJECT_ID: 1a5

    ????RANCHER_GEN_SECRET_KEY: 7QZqs1TgR412FP5oUL9yyNGivbmnbSc9xqaeDNb5

    ??labels:

    ????io.rancher.container.hostname_override: container_name

    ??tty: true

    ??image: harbor01.test01.com/base/nginx-rancher-gen-demo

    ??stdin_open: true

    was-standalone:

    ??labels:

    ????io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=was-nginx/was-standalone

    ????io.rancher.container.pull_image: always

    ????io.rancher.container.hostname_override: container_name

    ??tty: true

    ??image: harbor01.test01.com/base/ibmwas8:v1

    ??stdin_open: true

    ?

    rancher-compose.yml

     

    nginx:

    scale: 1

    was-standalone:

    scale: 3

    然后切到對應的目錄執行rancher-compose up

    rancher-compose up

     

    訪問對應的Nginx端口,顯示如下,表示已經成功連接到WAS后臺

    成功連接到WAS后臺

     

    到這里文章結束,希望借此文章拋磚引玉,給大家更多思考!

    相關參考資料

    Using Rancher-Gen to Dynamically Update Configuration Files

    https://developer.ibm.com/wasdev/docs/nginx-websphere-application-server/

    https://github.com/WASdev/ci.docker.websphere-traditional

    IBM Redbook:sg247957

    IBM Redbook:sg248056

    No Comments

    Post a Comment

    Comment
    Name
    Email
    Website