• 基于docker 如何部署surging分布式微服务引擎


    1、前言

          转眼间surging 开源已经有1年了,经过1年的打磨,surging已从最初在window 部署的分布式微服务框架,到现在的可以在docker部署利用rancher 进行服务编排的分布式微服务引擎,再把业务进行剥离, 通过配置路径就能驱动加载业务模块,这样的细粒度设计,能更加灵活从业务中针对于对象加以细分,能更加灵活的拆分聚合服务。而这篇文章我们来谈谈基于docker 如何部署

    surging源码下载

    2、概述

    容器,就是用来存放镜像的器皿,而镜像是构建成的一个轻量的、独立的、可执行的包,包括了执行它所需要的所有东西:代码、运行环境、系统工具、系统库、设置。

    程序被构建成镜像放到容器中,那么它所依赖的下层环境就不再重要了。它可以在任何地方运行,甚至在混合云环境下也可以。所以为何容器能流行起来,而容器技术兴起让Docke也渐渐的映入大家的眼帘,

    那么Docker又是什么呢?

    • Docker是基于Go语言开发并开源的容器引擎

    • Docker将应用软件运行时所需的一切都打包成互相隔离的容器

    • Docker可以自动执行并配置开发/线上环境,快速构建,测试和运行复杂的多容器应用程序

    • 对拥有数千个节点或容器的应用程序,Docker也能快速的扩展和调配

    • 可以运行在主流的Linux系统,Mac以及Windows上,并且保证无论软件在哪里部署,都能正常运行并得到相同的结果

    相关概念介绍

    • Image镜像和Container容器:你可以把两者理解为类和实例对象,或者是ISO系统镜像和虚拟机的关系。不同的Image所包含的软件或者环境是不同的,但是你可以使用Dockerfile(docker特有语法规则所创建的文件)进行管理。而Container则是以Image作为模板,可以独立运行的微型系统,一个Image可以创建出来多个Container容器的实例

    • Registry:Docker Hub镜像仓库,为每个人提供庞大的镜像资源进行拉取和使用

    • Dockerfile:是一个将镜像命令组合在一起的文件,用于Image的自动构建

     3、环境搭建

    系统环境

    宿主机:Windows 10 专业版

    Linux服务器: CentOS 3.10

    1.安装Docker

    Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

    通过 uname -r 命令查看你当前的内核版本

    [root@runoob ~]# uname -r 3.10.0-862.E17.X86_64
    

     # yum install docker-engine 安装docker包

     安装成功后,使用docker version命令查看是否安装成功,安装成功后------如下图

     启动 Docker

    systemctl  start  docker
    

     查看docker信息,如下图

    systemctl  status  docker
    

    测试运行 hello-world

    #docker run hello-world
    

     2.安装rancher

    下载镜像

    docker pull rancher/server
    

    启动rancher

    docker run -d --restart=always -p 8080:8080 rancher/server
    

     安装成功后,通过http://ip:8080访问,如下图所示

     3.安装rabbitmq

     下载镜像

    #docker pull rabbitmq:management
    

    启动rabbitmq

    #docker run -d --name rabbitmq --publish 5672:5672 --publish 4369:4369 --publish 25672:25672 --publish 15671:15671 --publish 15672:15672 
    abbitmq:management
    

     安装成功后,通过http://ip:15672访问,如下图所示

    4.安装Consul

    下载镜像

    #docker pull docker.io/consul:latest
    

     创建 Consul 配置

    #vim /opt/platform/consul/server.json
    
    {
        "datacenter": "quark-consul",
        "data_dir": "/consul/data",
        "server": true,
        "ui": true,
        "bind_addr": "192.168.249.162",
        "client_addr": "192.168.249.162",
        "bootstrap_expect": 1,
        "retry_interval": "10s",
        "rejoin_after_leave": false,
        "skip_leave_on_interrupt": true
    }
    

     配置说明

    官方在启动容器的时候是将一部分配置作为 docker run 的参数,而我是把参数写到了配置文件里。

    • datacenter:数据中心名称(库名)
    • data_dir:数据存储目录
    • server:运行在server模式
    • ui:使用UI界面
    • bind_addr:内部集群通信绑定的地址。默认是0.0.0.0,如果有多块网卡,需要指定,否则启动报错
    • client_addr:客户端接口绑定的地址,默认是127.0.0.1
    • retry_join:重新加入集群
    • retry_interval:重试时间
    • rejoin_after_leave:在离开集群之后才重试加入
    • skip_leave_on_interrupt:在启动后,是否 Ctrl+C 优雅退出,我们是容器模式,所以不用管,直接 true 就好了。

    启动 consul-server

    docker run -d --net=host --name consul -v /opt/platform/consul/config:/consul/config -v /opt/platform/consul/data:/consul/data consul agent
    

     安装成功后,通过http://ip:8500访问,如下图所示

    5. 安装dotnetcore 2.1 runtime

    下载镜像

    #sudo docker pull microsoft/dotnet:2.1-runtime

    启动 

    #sudo docker run -it microsoft/dotnet:2.1-runtime
    

    四、部署程序

    1. 部署surging引擎,无需引用任何业务模块,新建Dockerfile文件

    FROM microsoft/dotnet:2.1-runtime
    WORKDIR /app
    COPY . .
    ENTRYPOINT ["dotnet", "Surging.Services.Server.dll"]

    发布程序

    dotnet publish -r centos.7-x64 -c release
    

     使用Dockerfile创建镜像

    #docker build -t surgingserver .
    

     启动

    #docker run --name surgingserver --env Mapping_ip=192.168.249.162 --env Mapping_Port=198 --env RootPath=/home/fanly --env 
    Register_Conn=192.168.249.162:8500 --env EventBusConnection=172.17.0.4 --env Surging_Server_IP=0.0.0.0 -v /home/fanly:/home/fanly -it -p 198:198 surgingserver
    

     配置说明

    • Mapping_ip:映射的外部IP(环境变量)
    • Mapping_port:映射的外部端口(环境变量)
    • RootPath:业务模块存储的根路径(环境变量)
    • Register_Conn:注册中心地址(环境变量)
    • EventBusConnection:eventbus 地址(环境变量)
    • Surging_Server_IP:容器内部IP(环境变量)

    启动后在rancher如下图所示

    因为方便,把宿主机的目录进行了挂载,microsurging 为分布式微服务引擎,Modules 为业务模块目录,surgingapi为网关

    2. 部署surging网关,新建Dockerfile文件

    FROM microsoft/dotnet:2.1-runtime
    WORKDIR /app
    COPY . .
    ENTRYPOINT ["dotnet", "Surging.ApiGateway.dll"]
    

     

     发布程序

    dotnet publish -r centos.7-x64 -c release
    

     使用Dockerfile创建镜像

    docker build -t surgingapi .
    

      启动

    #docker run --name surgingapi -it -p 729:729 --env Register_Conn=192.168.249.162:8500 surgingapi
    

     启动后在rancher如下图所示

    可以通过http://ip:729进行访问

     

    然后可以通过postman 来测试网关,如下图

    五、总结

    通过1年的开发,surging 也趋于完善,性能非常不错,平均访问在0.12ms 左右,而且6月30日会在上海微软研发中心和大家见面讲解下surging 微服务引擎,也请大家多多关注

  • 相关阅读:
    opencv ellipse
    Spring.NET实用技巧4——NHibernate分布式事务(下)
    Spring.NET企业架构实践之 Nhibernate + WCF + ASP.NET MVC + NVelocity 对PetShop4.0重构(二)——领域模型
    Spring.NET实用技巧3——NHibernate分布式事务(上)
    Spring.NET企业架构实践之 NHibernate + Spring.NET + WCF + Windows服务 + Silverlight 中小企业应用架构完整Demo
    关于nunit调试VS2010中的4.0程序集的问题
    Spring.NET企业架构实践之 Nhibernate + WCF + ASP.NET MVC + NVelocity 对PetShop4.0重构(三)——持久层
    Spring.NET实用技巧5——WCF环境下的NHibernate分布式事务
    有多少可爱IT精英,他们的爱情屡屡“挨踢”
    Spring.NET 1.3.1 正式版已发布
  • 原文地址:https://www.cnblogs.com/fanliang11/p/9191793.html
Copyright © 2020-2023  润新知