使用jenkins、docker、consul、nginx搭建支持自动化构建部署以及弹性伸缩的集群系统详细教程

本文档详细介绍了如何使用jenkins、docker、consul、nginx搭建自动化构建、部署及弹性伸缩的集群系统。通过jenkins实现持续集成,docker用于容器化应用,consul进行服务发现,nginx提供负载均衡。文章涵盖了从环境准备到各个组件的部署,以及服务发现、高可用和弹性扩容的测试。
摘要由CSDN通过智能技术生成

一、前言

这是我第一篇博文,中间可能存在许多纰漏,所以请大家不吝指教!另外在文中API及原理性的东西仅做简单提及,因为网上有很多,讲的很详细,我尽量将篇幅放在记录过程上,如有疑惑,欢迎评论。

1.1 搭建思路

  • 使用jenkins+maven做自动化部署及构建工具,采用参数化构建或自动构建方式,减少集成工作量。
  • 在docker容器中装载应用后直接利用docker 的swarm mode 集群模式来搭建一个应用集群,方便简单快捷。
  • 在外部使用nginx进行负载均衡,性能高,可靠。
  • 使用consul进行服务发现,在这里为了简化搭建复杂度,在本文中暂时先用consul的主机发现功能,如果还需要更细粒度的服务发现,可通过应用调HTTP API的方式或者使用registrator进行注册服务。
  • 使用consul-template对nginx的配置文件进行实时更改及重载。
  • 使用keepalived维持主节点的高可用。

1.2 系统结构图

这里写图片描述

1.3 应用场景

任何搭建及部署方式都是有其应用场景,这一套系统主要解决的问题是减少开发-集成-部署工作的繁琐程度、后期运维手动切换故障节点的麻烦和滞后性、以及当业务量上涨时扩充节点的繁琐步骤,使开发人员专心于业务逻辑、运维人员专心于解决服务器故障。

1.3.1 开发及部署

部署完这一套系统之后,开发人员将代码上传到git上,可以自动或根据预设的策略时机触发构建,此时构建服务器会自动检出代码,并进行打包、集成、构建镜像、推送镜像到私有仓库,再自动通知应用容器集群滚动升级容器,整个过程无需人为干预。

1.3.2 后期运维

对于应用容器来说,当某个节点服务器不可用时会通知其它节点拉取镜像;当节点可用时则自动加入集群提供服务,而主服务器使用keepalived做容灾,在某台主服务器挂掉时实现自动切换,大大降低运维成本。而docker swarm支持弹性伸缩,当系统的业务量和访问量上去,只需要一句命令便可水平扩展节点,甚至可编写脚本实时监控节点服务器负载情况,当节点负载过高时则自动扩展节点;当节点负载低时则关闭部分节点容器,通过弹性伸缩可以更加灵活地分配计算资源。


二、实验环境

本次实验使用了两台主机(win10系统,虚拟机软件使用的是系统自带的hyper-V),第一台主机建立三台虚拟机作为节点服务器,第二台主机建立两台虚拟机做构建服务器/负载均衡服务器及双机热备。建议一开始在两台主机上各创建一个虚拟机,然后配置好环境,接着直接复制虚拟机的文件夹,就不用一台一台配置环境。

主服务器配置如下

主机名 地址 操作系统 内存容量
master 192.168.0.200 centos7 3GB
backup 192.168.0.199 centos7 3GB


节点服务器配置如下

主机名 地址 操作系统 内存容量
node1 192.168.0.201 centos7 1GB
node2 192.168.0.202 centos7 1GB
node3 192.168.0.203 centos7 1GB


测试应用

使用spring boot写了一个简单的restAPI,主要用来显示容器的hostname


三、开始搭建

需先准备好环境再进行部署。

3.1 准备环境

说明:主服务器需先配好java环境,至于怎么配自行上网搜索配置。另外建议在配置前更换yum源为阿里源,节约后面的时间,若系统与博主一样为centos7,也可以直接使用复制下面指令进行更换。

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
yum makecache
3.1.1 docker环境

在主服务器及节点服务器中安装docker环境

yum install -y docker

安装完毕后需要修改docker启动服务文件,增加监听远程指令选项。

vi /lib/systemd/system/docker.service

将配置文件中的ExecStart=/usr/bin/dockerd-current后面加上-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
如下配置:

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer

[Service]
Type=notify
NotifyAccess=all
KillMode=process
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
          --default-runtime=docker-runc \
          --exec-opt native.cgroupdriver=systemd \
          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
          $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $ADD_REGISTRY \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
MountFlags=slave

[Install]
WantedBy=multi-user.target

保存完毕后执行下面指令使其生效

firewall-cmd --zone=public --add-port=2375/tcp --permanent && \
systemctl reload firewalld && \
systemctl daemon-reload && \
systemctl start docker || \
systemctl restart docker
3.1.2 jenkins环境

在主服务器中配置jenkins环境,不建议使用jenkins的docker容器,配置docker比较麻烦,且并不比war版方便多少。

wget -P /home/jenkins http://mirrors.jenkins.io/war-stable/latest/jenkins.war && \
firewall-cmd --zone=public --add-port=8080/tcp --permanent && \
systemctl reload firewalld && \
nohup java -jar /home/jenkins/jenkins.war &

当控制台输出带“nohup.out”字样时可按ctrl+c退出,然后执行如下执行

vi /home/jenkins/nohup.out

找到文件中如下字样

信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@24f2b2ff: defining beans [filter,legacy]; root of factory hierarchy
七月 15, 2017 9:11:15 上午 jenkins.install.SetupWizard init
信息:

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

9a8e9681d8f74a5894be57d618c6878b

This may also be found at: /root/.jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

七月 15, 2017 9:11:24 上午 hudson.model.UpdateSite updateData
信息: Obtained the latest update center data file for UpdateSource default
七月 15, 2017 9:11:26 上午 hudson.model.UpdateSite updateData
信息: Obtained the latest update center data file for UpdateSource default
七月 15, 2017 9:11:27 上午 hudson.WebAppMain$3 run
信息: Jenkins is fully up and running
七月 15, 2017 9:11:27 上午 hudson.model.DownloadService$Do

将其中的密钥(9a8e9681d8f74a5894be57d618c6878b)复制出来,在浏览器运行http://192.168.0.200:8080/ ,第一次登陆要求输入密钥,将刚刚复制的密钥复制进去,然后根据资料填写相关信息,插件安装则选择默认安装。
等待一段时间安装完毕后再登陆进去。

3.1.3 Maven环境

在主服务器中配置maven环境,这里有一个注意的地方,截止目前jenkins的这个版本只兼容到maven3.3.9,所以最好使用这个版本进行部署。

wget -P /home/maven https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz<
  • 12
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值