一种微服务网站的自动化部署方法与流程

文档序号:18639153发布日期:2019-09-11 22:45阅读:395来源:国知局
一种微服务网站的自动化部署方法与流程

本发明涉及自动化部署与自动化运维相结合的领域,具体涉及一种微服务网站的自动化部署与配置的方法。



背景技术:

随着信息技术的飞速发展,互联网已经成为新的基础设施。截至2018年6月,仅我国就约有544万个境内网站为其用户提供电子商务、电子政务、社交娱乐、交通出行、金融理财、在线教育等服务。

一个网站通常包括数个主要功能,传统一体化的体系结构设计会导致网站的可靠性与扩展性较低,网站功能的更新需要对网站整体进行重新部署。但是采用微服务架构设计的网站可以有效避免这些问题。通过对不同功能之间的解耦,使网站具有更高的敏捷性、可靠性与扩展性。不同功能之间通过api进行交互,可以使不同的功能以不同的迭代速度进行迭代[参考文献1:陈春霞.基于容器的微服务架构的浅析[j].信息系统工程,2016(3):95-96.]。采用微服务架构的网站已经成为一种主流趋势。

微服务网站的部署区域通常由隔离区dmz、数据库服务区、存储区、计算服务区四个区域组成。dmz区负责处理https请求并转发业务请求至计算服务区的服务器,通常dmz区部署nginx用来反向代理内网服务器。数据库服务区部署各种关系数据库及非关系型数据库,如mysql、microsoftsqlserver、oracle、redis、mongodb等。存储区用来储存各种多媒体文件,通过nfs(网络文件系统)、ftp(文件传输协议)等方式供计算服务区访问。计算服务区部署核心业务系统,通常部署如tomcat、django、wordpressdiscuzz等基础软件。

各类微服务网站如何快速部署与更新对运维人员提出了较高要求。而且出于安全需要,内网服务器往往不能直接与互联网相连。传统的部署方法需要运维人员预先准备好基础软件及其依赖项安装包,根据依赖关系通过linux终端逐个安装或升级,并手动修改相应的配置文件进行代理、主从等配置,以人工的方式验证基础软件和配置文件是否正确,安装过程繁琐,效率低,容易出错。



技术实现要素:

本发明针对人工部署与更新运维微服务网站过程繁琐,效率低,容易出错等问题,提出一种微服务网站的自动化部署方法,实现微服务网站在服务器上的快速批量部署与更新。

本发明提供的一种微服务网站自动化部署方法,包括如下步骤:

步骤1:构建部署文件和配置文件。部署文件定义服务器ip地址和基础软件的映射关系;基础软件源路径;基础软件安装路径;基础软件安装动作。配置文件定义服务器间的集群关系;主服务器ip地址;从服务器的ip地址。

步骤2:部署模块依据部署文件中服务器ip地址、基础软件名称、基础软件源路径,向目标服务器发送对应的基础软件及依赖项。

步骤3:部署模块依据部署文件中服务器ip地址,在指定服务器上创建用户和用户组;关闭服务器防火墙,禁止防火墙开机自动启动。

步骤3.1:依据部署文件中计算服务区ip地址、基础软件名称、基础软件源路径及安装指令,在指定服务器上自动卸载旧版本jdk,部署指定版本jdk,配置jdk运行环境;自动部署apache-tomcat,修改tomcat配置文件。

步骤3.2:依据部署文件中数据库服务区ip地址、基础软件名称、基础软件源路径及安装指令,在指定服务器上自动部署mysql及其依赖项,配置mysql运行环境。依据配置文件,配置mysql主从关系。

步骤3.3:依据部署文件中数据库服务区ip地址、基础软件名称、基础软件源路径及安装指令,在指定服务器上自动部署redis及其依赖项,配置redis运行环境。依据配置文件,配置redis主从关系。

步骤3.4:依据部署文件中存储区ip地址、基础软件名称、基础软件源路径及安装指令,在指定服务器上自动部署nfs及其依赖项,配置nfs运行环境。依据配置文件,挂载nfs。

步骤3.5:依据部署文件中dmz区ip地址、基础软件名称、基础软件源路径及安装指令,在指定服务器上自动部署nginx及其依赖项,配置nginx运行环境。依据配置文件,配置nginx负载均衡关系。

步骤4:验证模块依据测试文件中服务器ip地址、软件名称、端口号、服务器间关系,验证基础软件jdk、tomcat、mysql、redis、nfs、nginx是否正确安装;验证mysql、redis数据库集群是否正确配置;验证nginx负载均衡是否正确配置。

验证模块在部署模块部署完成后,自动执行测试文件进行检测,如果正确执行完毕,说明服务器已经按照部署文件和配置文件正确执行部署和配置过程;如果执行过程中遇到错误,部署模块将对出现错误的服务器进行初始化,重新执行部署与配置过程,直至自动检测通过或超过最大重试次数。

步骤5:依据部署配置文件中计算服务区ip地址,在指定服务器上部署微服务网站的web存档文件,检查微服务网站是否可以访问。

本发明提出了一种基于微服务网站的自动化部署方法,其优点在于:

(1)部署效率高:在面对部署大量服务器时,运维人员不必逐台服务器手动安装,只需要构建部署配置文件,准备好基础软件及其依赖包,运行自动化部署系统就可以完成服务器上基础软件及其依赖项的部署与配置,减少了运维人员的工作负担。

(2)部署准确率高:自动化的部署工作及配置可以避免手动部署时因为操作失误导致的部署或配置错误,提升了部署过程的准确率。

(3)结果直观:自动化部署完成后,可以直观的将服务器上的部署验证结果显示出来。

附图说明

图1为本发明的微服务网站的自动化部署方法所涉及的部署区域示意图;

图2为本发明的微服务网站的自动化部署方法流程示意图。

具体实施方式

下面将结合附图和实施例对本发明作进一步的详细说明。

本发明通过将微服务网站的部署区域按照主要功能解耦为dmz区、数据库服务区、存储区和计算服务区,根据用户需求在指定服务器上完成微服务网站的自动化部署与配置工作。

如图1所示,微服务网站部署涉及的区域,包括:负载均衡区dmz、计算服务区、数据库服务区和存储区,本发明需要对上述四个区域进行部署。本实施例中,在dmz区的服务器部署nginx,进行负载均衡配置,负责对外提供https访问入口,并将访问流量负载均衡到计算服务区的tomcat服务器;存储区部署nfs,负责存储微服务网站中多媒体文件,并以挂载的方式供计算服务区tomcat服务器访问;数据库服务区的服务器部署关系型数据库mysql、非关系型数据库redis,并分别配置主从模式来保证数据库服务区服务的高可用性,供计算服务区tomcat服务器访问;计算服务区服务器部署jdk及tomcat,负责提供微服务网站的计算服务。本发明提供的一种微服务网站自动化部署方法,实现的一个流程如图2所示,下面对各个步骤进行说明。

步骤1:构建部署文件和配置文件。部署文件定义服务器ip地址和基础软件的映射关系,基础软件源路径,基础软件安装路径,以及基础软件安装动作。配置文件定义服务器间的集群关系,主服务器ip地址,以及从服务器的ip地址。本发明实施例中对部署文件和配置文件进行如下定义。

部署文件定义为:installfile={installentry1,installentry2,……,installentryq},其中q表示部署条目个数。

部署条目installentry=(ip,basicsoftware,sourcepath,targetpath,installationmethod)。其中ip是服务器的ip地址;basicsoftware是基础软件及其依赖项元素的集合;sourcepath是基础软件源路径;targetpath是基础软件目标安装路径;installationmethod代表基础软件安装动作。

定义ip::=ip地址字符串。

定义basicsoftware={software1,software2,……,softwaren}。其中n表示基础软件及其依赖项个数。

定义software::=软件名称字符串。

定义sourcepath::=路径字符串|null。

定义targetpath::=路径字符串|null。

定义installationmethod::=install|uninstall|update。其中install代表执行安装操作,uninstall代表卸载操作,update代表升级操作。

配置文件定义为:configurationfile={configurationentry1,configurationentry2,……,configurationentrym},其中m表示配置条目个数。

配置条目定义为configurationentry=(relation,masterip,slaveip)。

定义relation::=null|mysql|redis|nginx|nfs。其中null代表服务器不属于任何集群,mysql代表属于mysql集群,redis代表属于redis集群,nginx代表配置为负载均衡集群,nfs代表挂载指定服务器。

定义masterip::=主服务器ip地址字符串。

定义slaveip::=从服务器ip地址字符串。

步骤2:部署模块依据部署文件中服务器ip地址、基础软件名称、基础软件源路径,向目标服务器发送对应的基础软件及依赖项。

根据部署条目中的软件名称、服务器ip地址、软件源目录,通讯连接模块使用scp命令“scp${software}${ip}:${sourcepath}”将基础软件及依赖项软件的安装包发送至目标主机的指定目录。

步骤3:部署模块依据部署文件中服务器ip地址,在指定服务器上创建用户和用户组,关闭服务器防火墙,禁止防火墙开机自动启动。

通过groupadd指令“groupadd–g${gid}${groupname}”创建用户组;gid为组号,groupname为组名;

通过指令“useradd–g${gid}–u${userid}–d${home}–m{createuserhome}”创建用户;useradd为创建用户的命令,gid为用户组号,userid为用户编号,home是指用户登入时的主目录,createuserhome是指如果home代表的目录不存在,则自动创建的目录。通过指令“systemctlstopfirewalld.service,systemctldisablefirewalld.service”关闭服务器防火墙,禁止防火墙开机自动启动;firewalld.service是指防火墙,systemctl是进程管理命令。

根据部署条目installentry中installationmethod,在sourcepath位置通过执行“rpm-ivh${basicsoftware}”、“tar-zxv-f${basicsoftware}”等指令自动部署basicsoftware中基础软件及依赖项到targetpath位置;根据配置条目configurationentry中relation自动配置集群中主从关系。开启基础软件的服务。rpm-ivh是安装软件的指令,tar-zxv-f是解压文件的指令。

步骤3.1:依据部署文件中计算服务区ip地址,在指定服务器上自动卸载旧版本jdk,部署指定版本jdk,配置jdk运行环境;自动部署apache-tomcat,修改tomcat配置文件。

本发明实施例中,计算服务区installfile={installentry1,installentry2,installentry3}。

installentry1=(172.16.114.52,{java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64,java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64,java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64,java-1.7.0-openjdk-headless-1.7.0.91-2.6.2.3.el7.x86_64},null,null,uninstall)。

installentry2=(172.16.114.52,{jdk-8u131-linux-x64.rpm},“/home/temp”,null,install)。

installentry3=(172.16.114.52,{apache-tomcat-7.0.79.tar.gz},“/home/temp”,“/home/tomcat”,install)。

上面实施例中,计算服务器的ip地址是172.16.114.52,installentry1是卸载旧版本的jdk,installentry2是安装新版本的jdk,installentry3是安装apache-tomcat。

步骤3.2:依据部署文件中数据库服务区ip地址、软件名称、基础软件源路径及安装指令,自动部署mysql及其依赖项,配置mysql运行环境;依据配置文件,配置mysql主从关系。

本发明实施例中,数据库服务区installfile={installentry1}。

installentry1=(172.16.114.164,{libaio-0.3.109-13.el7.x86_64.rpm,mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz},“/home/temp”,“/home/mysql”,install)。

configurationfile={configurationentry1}。

configurationentry1=(mysql,172.16.114.164,172.16.114.165)。

在地址为172.16.114.164的服务器上自动部署mysql及其依赖项,配置mysql运行环境。配置mysql集群中的主服务器为172.16.114.164,从服务器为172.16.114.165。

步骤3.3:依据部署文件中数据库服务区ip地址、软件名称、基础软件源路径及安装指令,自动部署redis及其依赖项,配置redis运行环境;依据配置文件,配置redis主从关系。

本发明实施例中,数据库服务区installfile={installentry1}。

installentry1=(172.16.114.166,{cpp-4.8.5-11.el7.x86_64.rpm,gcc-4.8.5-11.el7.x86_64.rpm,gcc-c++-4.8.5-11.el7.x86_64.rpm,glibc-2.17-157.el7_3.5.x86_64.rpm,glibc-common-2.17-157.el7_3.5.x86_64.rpm,glibc-devel-2.17-157.el7_3.5.x86_64.rpm,glibc-headers-2.17-157.el7_3.5.x86_64.rpm,kernel-headers-3.10.0-514.26.2.el7.x86_64.rpm,libgcc-4.8.5-11.el7.x86_64.rpm,libgomp-4.8.5-11.el7.x86_64.rpm,libmpc-1.0.1-3.el7.x86_64.rpm},“/home/temp”,“/home/redis”,install)。

configurationfile={configurationentry1}。

configurationentry1=(redis,172.16.114.166,172.16.114.167)。

在地址为172.16.114.166的服务器上配置redis运行环境,配置redis集群中的主服务器为172.16.114.166,从服务器为172.16.114.167。

步骤3.4:依据部署文件中存储区ip地址、软件名称、基础软件源路径及安装指令,自动部署nfs及其依赖项。依据配置文件,配置nfs运行环境。

本实施例中,存储区installfile={installentry1}。

installentry1=(172.16.114.170,{libtirpc-0.2.4-0.8.el7_3.x86_64.rpm,nfs-utils-1.3.0-0.33.el7_3.x86_64.rpm,rpcbind-0.2.0-38.el7_3.1.x86_64.rpm},“/home/temp”,null,install)。

configurationfile={configurationentry1,configurationentry2}。

configurationentry1=(nfs,172.16.114.170,172.16.114.52)。

configurationentry2=(nfs,172.16.114.170,172.16.114.53)。

在地址为172.16.114.170的服务器上部署nfs及其依赖项,通过在指定服务器(172.16.114.170)上执行命令:“mount-tnfs${ip}:${remotepath}${localpath}”,完成存储区服务器的挂载。其中ip指的是存储区的服务器ip地址,remotepath指的是存储区的服务器共享的路径字符串,localpath指的是计算服务区服务器本地需要挂载的路径字符串。mount-tnfs是挂载命令。

步骤3.5:依据部署文件中dmz区ip地址、软件名称、基础软件源路径及安装指令,自动部署nginx及其依赖项。依据配置文件,配置nginx运行环境。

本实施例中,dmz区installfile={installentry1,installentry2}。

installentry1=(172.16.114.116,{libmpc-1.0.1-3.el7.x86_64.rpm,libgcc-4.8.5-11.el7.x86_64.rpm,libgomp-4.8.5-11.el7.x86_64.rpm,libstdc++-4.8.5-11.el7.x86_64.rpm,libstdc++-devel-4.8.5-11.el7.x86_64.rpm,glibc-2.17-157.el7_3.4.x86_64.rpm,glibc-common-2.17-157.el7_3.4.x86_64.rpm,kernel-headers-3.10.0-514.26.2.el7.x86_64.rpm,glibc-headers-2.17-157.el7_3.4.x86_64.rpm,glibc-devel-2.17-157.el7_3.4.x86_64.rpm,cpp-4.8.5-11.el7.x86_64.rpm,gcc-4.8.5-11.el7.x86_64.rpm,gcc-c++-4.8.5-11.el7.x86_64.rpm,pcre-8.32-15.el7_2.1.x86_64.rpm,zlib-1.2.7-17.el7.x86_64.rpm,pcre-devel-8.32-15.el7_2.1.x86_64.rpm,zlib-devel-1.2.7-17.el7.x86_64.rpm,e2fsprogs-1.42.9-9.el7.x86_64.rpm,e2fsprogs-libs-1.42.9-9.el7.x86_64.rpm,keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm,krb5-devel-1.14.1-27.el7_3.x86_64.rpm,krb5-libs-1.14.1-27.el7_3.x86_64.rpm,krb5-workstation-1.14.1-27.el7_3.x86_64.rpm,libcom_err-1.42.9-9.el7.x86_64.rpm,libcom_err-devel-1.42.9-9.el7.x86_64.rpm,libgudev1-219-30.el7_3.9.x86_64.rpm,libkadm5-1.14.1-27.el7_3.x86_64.rpm,libselinux-2.5-6.el7.x86_64.rpm,libselinux-devel-2.5-6.el7.x86_64.rpm,libselinux-python-2.5-6.el7.x86_64.rpm,libselinux-utils-2.5-6.el7.x86_64.rpm,libsepol-2.5-6.el7.x86_64.rpm,libsepol-devel-2.5-6.el7.x86_64.rpm,libss-1.42.9-9.el7.x86_64.rpm,libverto-devel-0.2.5-4.el7.x86_64.rpm,openssl-1.0.1e-60.el7_3.1.x86_64.rpm,openssl-devel-1.0.1e-60.el7_3.1.x86_64.rpm,openssl-libs-1.0.1e-60.el7_3.1.x86_64.rpm,systemd-219-30.el7_3.9.x86_64.rpm,systemd-libs-219-30.el7_3.9.x86_64.rpm,systemd-python-219-30.el7_3.9.x86_64.rpm,systemd-sysv-219-30.el7_3.9.x86_64.rpm},“/home/temp”,null,install)。

installentry2=(172.16.114.116,{nginx-1.11.12.tar.gz},“/home/temp”,“/home/nginx”,install)。

configurationfile={configurationentry1,configurationentry2}。

configurationentry1=(nginx,172.16.114.116,172.16.114.52)。

configurationentry2=(nginx,172.16.114.116,172.16.114.53)。

在地址为172.16.114.116的服务器上自动部署nginx及其依赖项,配置的负载均衡集群中,主服务器为172.16.114.116,从服务器包括172.16.114.52和172.16.114.53。

步骤4:依据测试文件中服务器ip地址、软件名称、端口号、服务器间关系,验证基础软件jdk、tomcat、mysql、redis、nfs、nginx是否正确安装;验证mysql、redis数据库集群是否正确配置;验证nginx负载均衡是否正确配置。

基础软件测试集定义为:testset={testentry1,testentry2,……,testentryp},其中p代表测试条目个数。

定义测试条目为:testentry=(masterip,testsoftware,port,relation,salveip)。其中masterip代表主服务器ip地址,testsoftware代表被测试的基础软件,port代表被测试的端口,relation代表服务器集群中的主从关系,salveip代表从服务器ip地址。

定义masterip::=主服务器ip地址字符串。

定义testsoftware::=被测试基础软件名称字符串。

定义port::=null|被测试服务器的端口号。

定义relation::=null|mysql|redis|nginx|nfs。其中null代表服务器不属于任何集群,mysql代表服务器属于mysql集群,redis代表服务器属于redis集群,nginx代表服务器属于负载均衡集群,nfs代表服务器处于nfs挂载状态。

定义salveip::=null|从服务器ip地址字符串。

验证模块根据testentry中masterip利用ping命令“ping–c5{masterip}”测试目标服务器可访问性,利用显示ps与查找grep命令“ps-ef|grep${testsoftware}|grep-vgrep”测试基础软件进程是否存在,利用“telnet${ip}${port}”测试指定端口port是否成功开启。

验证mysql数据库集群是否正确配置时,验证模块根据当前系统时间随机生成数据库名称tempname。依据testentry中masterip,在用做主机的服务器上新建名称为tempname的数据库。依据testentry中salveip,在用做从机的服务器上查看数据库名称,如果包含tempname的数据库,则证明主从模式配置成功。

本实施例中,验证mysql数据库集群的testset={testentry1}。

testentry1=(172.16.114.164,mysql-5.7.19,3306,mysql,172.16.114.165)。

验证redis数据库集群是否正确配置时,验证模块根据当前系统时间随机生成键值对。依据testentry中masterip,在用做主机的服务器上存储键值对。依据testentry中salveip,在用做从机的服务器上查看键值对。如果包含对应的键值对,则证明主从模式配置成功。

本实施例中,验证redis数据库集群的testset={testentry1}。

testentry1=(172.16.114.166,redis-3.2.5,6379,redis,172.16.114.167)。

验证nginx负载分流是否正确配置时,验证模块关闭计算服务区所有服务区上的tomcat。然后开启salveip服务器的tomcat,测试网站是否可以正常访问。

本实施例中,验证nginx负载分流的testset={testentry1,testentry2}。

testentry1=(172.16.114.116,nginx-1.11.12,80,nginx,172.16.114.52)。

testentry2=(172.16.114.116,nginx-1.11.12,80,nginx,172.16.114.53)。

本发明部署与配置过程结束后,自动根据testset进行正确性与可用性检测。如果顺利执行,则代表服务器已经按照部署文件和配置文件顺利执行部署和配置过程,无需人工检查每一台服务器软件安装与配置情况。如果执行过程中遇到错误,部署模块会初始化出错的服务器,对其重新执行部署与配置过程,直至自动检测通过或超过最大重试次数。

步骤5:依据部署配置文件中计算服务区ip地址,在指定服务器上部署微服务网站的war包,检查微服务网站是否可以访问。

上传模块首先依据配置文件中计算服务区ip地址,关闭指定服务器的tomcat,将微服务网站war包上传至指定服务器的tomcat的webapps下,打开指定服务器的tomcat。

通过“curl{url}”指令获得部署的页面,通过比对获取的内容与首页布局内容是否相同,来验证微服务网站是否可以访问。如果验证可以访问,说明自动上传网站代码成功且网站初始化过程顺利。验证失败则说明上传网站代码遇到错误,或者是由于网站代码自身存在问题,无法顺利初始化。

将本发明方法应用于部署某科技文化公众服务平台这样的大型微服务架构网站,实验证明能快速自动化完成部署工作,所取得的效果显著,非常具有实用价值。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1