微服务部署集群整套方案

来源:互联网 发布:飞客数据恢复怎么样 编辑:程序博客网 时间:2024/05/16 07:04

使用的平台语言JAVA:1.8

第一步:开发

java 项目

每个系统分为三个模块(gradle项目)

api

用于存放consumerprovider共用实体类

consumer

SpringBoot项目

主要功能
1.RESTFul对外接口访问。
2.包含限流,断路器,幂等请求等。

cat build.gradle 核心配置

buildscript {    repositories {        mavenCentral()    }    dependencies {        classpath("org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version")    }}apply plugin: 'org.springframework.boot'jar {    String buildDir = project.buildDir    manifest {        attributes (                "Main-Class": "com.dounine.demo.Application",//main主函数加载入口                "Class-Path": new File(buildDir+'/libs/lib').list().collect { "lib/${it}" }.join(" ")//为了打成jar包,不把全部包都打进一个包里面        )    }}task copyJars(type:Copy) {    from configurations.runtime    into new File('build/libs/lib') // 目标位置}compileJava.dependsOn copyJarsdef env = hasProperty("pro")?"pro":(hasProperty("dev")?"dev":null)//用于打包线上环境sourceSets {    main {        resources {            srcDirs = ["src/main/resources", "src/main/profile/$env"]        }    }}

开发完成使用gradle打包命令

gradle build -Ppro -xtest #打包两次

provider

与数据库或逻辑操作

cat build.gradle 核心配置

jar {    String buildDir = project.buildDir    manifest {        attributes (                "Main-Class": "com.bjike.goddess.ticket.Application",//main主函数加载入口                "Class-Path": new File(buildDir+'/libs/lib').list().collect { "lib/${it}" }.join(" ")        )    }}task copyJars(type:Copy) {    from configurations.runtime    into new File('build/libs/lib') // 目标位置}compileJava.dependsOn copyJarsdef env = hasProperty("pro")?"pro":(hasProperty("dev")?"dev":null)sourceSets {    main {        resources {            srcDirs = ["src/main/resources", "src/main/profile/$env"]        }    }}

存储

可将mysql或者其它数据库等做成一个容器运行在Rancher网络中,访问通过容器名称访问即可

第二步:上传

将已经打包好在项目中的build/libs/里面的所有文件上传
将打包好的项目上传到自己的gitlab搭建的平台,防止配置文件数据外漏。

consumer项目上传之前先处理掉重复的jar包

7z d ls | grep .jar$ BOOT-INF/lib #使用7z的命令将jar包中的重复jar包删除git add .git commit -m "xxx"git push

第三步:使用Rancher管理docker集群一键部署

在某一个台Docker主机上新增一个容器,境像为java
挂载的目录为/root:/root
这里写图片描述
容器重启即可部署最新打包项目

cat /root/docker/deploy.sh

#!/bin/bashif [ ! -d $project ];then    git clone http://$user:$password@xxx.xxx.com:10080/$user/$project.git #克隆私有部署项目    cd $projectelse    cd $project    git pullfiif [ "$commit" != "" ];then #部署指定版本    git checkout $commitelse #部署最新版本    git checkout masterfijava -jar `ls | grep *.jar` #运行java项目

服务内部通讯使用Rancher提供的ipsec网络,根据容器的名称做为IP地扯通讯。

如何解决域名统一访问服务consumer或者node

使用nginx
在某台宿主主机上部署一个nginx容器

//泛解析配置如下server {  listen 80; //可访问node程序  server_name ~^(?<subdomain>.+)\.xxx\.xxx\.com$;  access_log off;  location / {    set $node "-node";    client_max_body_size    100m;    resolver 169.254.169.250;//rancher网络DNS地扯    proxy_pass http://$subdomain$node;//容器名称跟域名相对如:user-node项目对应的域名就是user.xxx.com    proxy_set_header  Host  $host;    proxy_set_header  X-Real-IP  $remote_addr;    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;  }}server {  listen   8080;//用来访问consumer  server_name ~^(?<subdomain>.+)\.xxx\.xxx\.com$;  access_log off;  location / {    set $consumer "-consumer";    client_max_body_size    20m;    resolver 169.254.169.250;//rancher网络DNS地扯    proxy_pass http://$subdomain$consumer:8080;//项目名称跟域名一样如:user项目对应的域名就是user.xxx.com    proxy_set_header  Host  $host;    proxy_set_header  X-Real-IP  $remote_addr;    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;  }}

在宿主主机再装一个nginx服务[可选]

server {  listen   80;//前端页面端口  server_name *.xx.xx.com;  return     301 https://$server_name$request_uri;}server {  listen   443;  server_name *.xx.xx.com;  ssl on;  ssl_certificate /etc/nginx/ssls/xx.xxx.com.crt;  ssl_certificate_key /etc/nginx/ssls/xxx.xx.com.key;  location / {    client_max_body_size    20m;    proxy_pass http://10.42.1.1;//nginx容器ip地扯    proxy_set_header  Host  $host;    proxy_set_header  X-Real-IP  $remote_addr;    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;  }server {  listen   8080;//用来测试consumer  server_name *.xx.xx.com;  location / {    client_max_body_size    20m;    proxy_pass http://10.42.1.1:8080;//nginx容器ip地扯    proxy_set_header  Host  $host;    proxy_set_header  X-Real-IP  $remote_addr;    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;  }}

如何往Rancher集群添加一台Docker主机

新增一台主机运行第一次安装脚本

#!/bin/shsource /etc/profileyum install git -ycd /rootgit clone https://github.com/nd-team/docker.gitcd dockerbash docker-install.sh #将docker安装写成脚本systemctl start dockersystemctl enable dockersudo docker run -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.1 http://xxxxxx:7777/v1/scripts/79578F2CC50344FB776D:1483142400000:lTyVH6kebwBnAGdGZS2artrVRP8 #执行Rancher主机添加
1 0
原创粉丝点击