首页 文章 精选 留言 我的

精选列表

搜索[云客服],共10000篇文章
优秀的个人博客,低调大师

微服务实战之春云与刀客(四)—— docker swarm 集群实战

概述 docker swarm 是一个非常简单的docker 原生集群部署环境。在docker swarm 出来之前,要搭建一个docker 集群需要复杂的网络运维和配置能力,而docker swarm 把这一切都解放了。简单来说呢,docker swarm把多个docker节点连接成一个集群,可以认为是一个可以互通的独立局域网,通过服务的方式管理应用的生命周期。例如有一个MyService的微服务,在单机的模式需要你分别在两个节点上启动相应的docker 容器,而docker swarm直接就有“服务”的概念,只要在某一管理节点上执行创建服务命令,同时指定节点数为2,则集群自动找两个节点分别运行你的MyService微服务。当两个节点扛不住的时候,你要增加到4个节点,则只需要执行一个扩展命令就行。 docker 安装 本文基于centos 版本7.2搭建的docker 集群,用的是17.09版本的docker。 节点有192.168.0.37和192.168.0.38 两个节点,分别为管理节点和工作节点。工作节点可以运行服务,管理节点也可以运行服务,但比工作节点多了“管理控制”的功能,即可以创建服务。为了避免脑裂现象,管理节点数量为1,3,5奇数。分别在0.37和0.38上安装docker。 介质下载 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm 安装 yum install docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm 启动 systemctl start docker 开机启动 systemctl enable docker 或者chkconfig docker on hostname vi /etc/hosts 把两个节点的host和ip加上。 搭建和使用 docker hub私有仓库 搭建docker hub私有仓库(0.37) 仓库是用来存放docker镜像的,在创建和启动服务的时候,多个节点需要从仓库中拉取镜像。 sudo docker run -d -p 5000:5000 -v /root/hub:/var/lib/registry --restart=always --name registry2 registry:2 默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载。 https://github.com/docker/docker.github.io/blob/master/registry/index.md 配置拉取镜像认证(0.37/0.38) 客户端访问docker hub拉取镜像,缺省走https的,会报https://192.168.0.37:5000镜像没找到或不存在(No such image: 192.168.0.37:5000/cehome/operation-service:),解决方式一种是通过nginx 添加https代理,我们采用是另一种是非安全方式: 打开 /usr/lib/systemd/system/docker.service 添加(ExecStart=/usr/bin/dockerd 可能已经有,只需要添加insecure参数)ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.37:5000 重载 systemctl daemon-reload 重启 service docker restart 集群环境搭建 参考:https://docs.docker.com/engine/swarm/swarm-mode/https://docs.docker.com/engine/reference/commandline/service/ https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/#replicated-and-global-services 关闭防火墙(0.37/0.38) 需要互相访问2377等端口(为方便,直接关闭防火墙,否则可能会有不可意料的事情) 查看 systemctl is-enabled firewalld 关闭 systemctl stop firewalld.service 禁用服务 systemctl disable firewalld 初始化管理节点(0.37) docker swarm init --advertise-addr 192.168.0.37 ( 多ip的情况:docker swarm init --advertise-addr ,一般要加上,否则会有网络问题) 添加其它节点前查看token(0.37) 添加其它节点到集群,必须先在管理节点执行如下命令,它会打印出在其它节点将要执行的包含token的完整脚本。 1)查看如何添加work节点docker swarm join-token worker2)查看如何添加manager节点 docker swarm join-token manager 添加work节点(0.38) 通过上面的命令可以查出执行的脚本,然后拷贝到0.38并执行(即来源于0.37上面执行docker swarm join-token worker的打印结果),执行后0.38就加入了集群。docker swarm join\ --token SWMTKN-1-3jcd5cjgwy8ct1gfyqqy8oqnokz4jjaul7el97h77qii4e6zw3-1vrjlin1bl5k9whzc4fulqfh2 192.168.0.37:2377 查看节点(0.37) 必须在管理节点才能执行: docker node ls 创建overlay网络 为什么需要overlay 网络?保证多台机器不同容器之间通信! docker network create --attachable --driver overlay tiejia--attachable 参数为了兼容单机的容器可以加入此网络。tiejia是网络名称。 管理节点信息的备份与恢复 由于目前是单管理节点,最好是备份信息,主要步骤是停止docker,备份目录/var/lib/docker/swarm/参考:https://docs.docker.com/engine/swarm/admin_guide/#back-up-the-swarm 移除节点的命令(这里只是介绍,不要执行) 当你节点不需要的时候可以从集群剥离, docker swarm leave -f 例子:部署一个nginx 服务 在manager节点0.37上部署nginx服务,服务数量为3个,公开指定端口是8080映射容器80,使用nginx镜像。这里直接会从官网下载nginx镜像,上面部署的私有仓库还用不上。 docker service create --replicas 3 --name nginx --publish 8080:80 nginx 通过 docker service ps nginx 命令查看服务分布情况。

优秀的个人博客,低调大师

J2EE分布式架构集成阿里云OSS存储

服务接口定义 /** 文件上传 1:头像 2:显示图片 3:个人封面 :4:基础图片 @param request @param response @param uid 用户id @param userType 文件上传 1:头像 2:显示图片 3:个人封面 :4:基础图片 0:视频 @param files 上传的文件对象 @return @throws Exception */ @RequestMapping(value = "/upload/base64Code", method = RequestMethod.POST) public ResponseVO fileuploadBase64(@RequestBody JSONObject json, HttpServletRequest request, HttpServletResponse response) throws Exception { String uid = json.optString("uid"); String userType = json.optString("userType"); String base64Code = json.optString("base64Code"); String oldName = json.optString("oldName"); String suffix = json.optString("suffix"); //获取当前登陆用户 if(StringUtils.isEmpty(uid)){ return CloudResponseCode.buildEnumResponseVO(CloudResponseCode.USER_ID_NOT_NULL, null); } //上传文件新名字 String newName = String.valueOf(new Date().getTime()); String fileKey = CloudConstant.VITAL_USER_INFO_PATH + uid + "/" + newName + "." + suffix; AliyunUtils.getInstance().uploadByte(base64Code.getBytes(), fileKey); ...... ....... return CloudResponseCode.buildEnumResponseVO(CloudResponseCode.FILEUPLOAD_SUCCESS, obj); } oss utils封装 /** 上传byte数组 @param fileByte @param fileKey */ public void uploadByte(byte[] fileByte, String fileKey){ // 创建OSSClient实例 OSSClient ossClient = new OSSClient(CloudConstant.ENDPOINT, CloudConstant.ACCESSKEYID, CloudConstant.ACCESSKEYSECRET); // 上传byte数组 ossClient.putObject(CloudConstant.BUCKET, fileKey, new ByteArrayInputStream(fileByte)); // 关闭client ossClient.shutdown(); } /** 上传文件流 @param inputStream @param fileKey */ public void uploadInputStream(InputStream inputStream, String fileKey){ // 创建OSSClient实例 OSSClient ossClient = new OSSClient(CloudConstant.ENDPOINT, CloudConstant.ACCESSKEYID, CloudConstant.ACCESSKEYSECRET); // 上传文件流 ossClient.putObject(CloudConstant.BUCKET, fileKey, inputStream); // 关闭client ossClient.shutdown(); } /** 删除文件 @param fileKey */ public void deleteFile(String fileKey){ // 创建OSSClient实例 OSSClient ossClient = new OSSClient(CloudConstant.ENDPOINT, CloudConstant.ACCESSKEYID, CloudConstant.ACCESSKEYSECRET); // 删除文件 ossClient.deleteObject(CloudConstant.BUCKET, fileKey); // 关闭client ossClient.shutdown(); } 界面效果

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册