微服务部署集群整套方案

使用的平台语言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 copyJars

def 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 copyJars

def 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/bash
if [ ! -d $project ];then
    git clone http://$user:$password@xxx.xxx.com:10080/$user/$project.git #克隆私有部署项目
    cd $project
else
    cd $project
    git pull
fi
if [ "$commit" != "" ];then #部署指定版本
    git checkout $commit
else #部署最新版本
    git checkout master
fi
java -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/sh
source /etc/profile

yum install git -y
cd /root
git clone https://github.com/nd-team/docker.git
cd docker
bash docker-install.sh #将docker安装写成脚本
systemctl start docker
systemctl enable docker
sudo 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主机添加
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值