项目部署(二)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 项目部署(二)

每日分享

What would life be if we had no courage to attempt anything?

如果我们没有勇气尝试任何事情,生活会怎样?

小闫语录

机会不是偏执于那些成功的人,只是成功的人看到并把握住了机遇。如果你连尝试的勇气都没有,那么生活注定平庸。



项目部署(二)

1.负载均衡

我们之前使用proxy_pass的方式实现了nginx代理请求到后端的效果,随着我们的网站访问量越来越多,一个后端就不现实了,那么接下来我们应该如果在访问量日渐增大的情况下,满足线上业务的稳定呢?解决办法就是负载均衡了,负载均衡是一种特殊的反向代理。负载均衡简单点说,就是人多力量大。一台服务器不行,来两台......

1.1osi七层模型

物理层、数据链路层、网络层(ip)、传输层(port)、会话层、表示层、应用层(url - http)

负载均衡分类四层负载(port 传输层),七层负载(url 应用层)

1.2负载均衡

upstream 主要是定义一个后端服务地址的集合列表,每个后端服务使用一个server命令表示。

upstream {} 和 Server {} 两部分内容属于平级关系

upstream的格式:

upstream 主机群名称 {
    server 主机1;
    server 主机2;
    ...
    server 主机3;
}
server {
    location / {
        proxy_pass 主机
    }
}

关键点

配置关键字:upstream。

主机群名用在哪里?proxy_pass后面指定主机。

主机列表如何来制作? 使用server指令。

1.3属性详解

down:表示当前server主机暂时不参与负载均衡 。(当主机故障时候,直接进行隔离。)

backup:后备主机,当所有非backup机器出现故障或者繁忙的时候,才会请求backup机器。(此主机有能力完成,但是作为储备,平时不用,只有紧急情况或繁忙时使用。)

max_fails:允许请求的最大失败数,默认为1,配合fail_timeout一起使用。(重试次数,当重试失败次数达到一定程度,就终止给该主机发送请求。)

fail_timeout:经历max_fails次失败后,暂停服务的时间,默认为10s。(当重试失败停止后,等待一段时间,继续进行尝试。)

扩展命令

安装curl来演示效果,不用使用浏览器。

使用 curl命令来检查Nginx的页面展示效果。语法:

  1. curl <option><url>

还可以使用循环,多次执行。

  1. for i in{1..10};do curl 192.168.xx.xx;done

1.4负载均衡调度算法

1.4.1内置策略

Nginx自带算法:

雨露均沾型:轮询、加权轮询、哈希

轮询(默认):请求按顺序逐一分配到不同的后端服务器 。

加权轮询weight:指定轮询权重,值越大,分配到的几率就越高,适用于后端服务器性能不均衡情况 。

定向服务型:iphash、leastconn、cookie、route、lean

ip_hash:按访问 IP 的哈希结果分配请求,比如同一个ip都让其访问固定一台服务器。分配后访客访问固定后端服务器,有效的解决动态网页会话共享问题 。

商业类型:ntlm、least_time、queue、stick(都是收费的,使用量少)

1.4.2扩展策略

第三发开发的算法:fair、url_hash

fair:基于后端服务器的响应时间来分配请求,响应时间短的优先分配。

url_hash:按访问 URL 的哈希结果分配请求,使同 URL 定向到同一台后端服务器,可提高后端缓存服务器的效率。

也可以自定义算法。

1.4.3实践

加权轮训
upstream backends {
    server 192.168.8.15:10086 weight=1;
    server 192.168.8.15:10087 weight=3;
    server 192.168.8.15:10088 weight=1;
}
ip_hash算法
upstream backends {
    ip_hash;
    server 192.168.8.15:10086 weight=1;
    server 192.168.8.15:10087 weight=3;
    server 192.168.8.15:10088 weight=1;
}

2.日志解析

默认日志地址:

  1. /var/log/nginx/

下面默认有两个日志文件:access.log和error.log。我们除了可以使用默认日志格式之外,还可以自定义日志格式。

2.1日志定制

日志定制是工作中很重要的意向内容,特别是监控网站的运行状态。我们可以在 /etc/nginx/nginx.conf 文件中配置。

日志格式定制:

  1. log_format 日志格式名'内置变量组成的日志格式 ';

日志格式使用:

  1. access_log 日志文件所在路径采用日志格式名;
  2. err_log 日志文件所在路径采用日志格式名;

nginx常用的内置变量:

  1. $remote_addr        前一台主机的ip地址,不一定是真实的客户端IP
  2. $remote_user        用于记录远程客户端的用户名称(一般为“-”)
  3. $time_local            用于记录访问时间和时区
  4. $request            用于记录请求的url以及请求方法
  5. $status                响应状态码,例如:200成功、404页面找不到等。
  6. $body_bytes_sent    给客户端发送的文件主体内容字节数
  7. $http_referer        可以记录用户是从哪个链接访问过来的
  8. $http_user_agent    用户所使用的代理(一般为浏览器)

其他常用变量:

  1. $request_uri             包含请求参数的原始 URI,不包含主机名
  2. $uri                     不带请求参数的当前 URI,不包含主机名
  3. $http_x_forwarded_for     可以记录客户端 IP,通过代理服务器来记录客户端的 ip 地址
  4. $http_x_real_ip         可以记录客户端 IP,通过代理服务器来记录客户端的 ip 地址
  5. $args                     这个变量等于请求行中的参数,同$query_string
  6. $host                     请求主机头字段,否则为服务器名称。
  7. $scheme                 HTTP 方法(如 http https
  8. $document_uri             $uri 相同
  9. $document_root             当前请求文件配置文件中 html 的根目录即 root
  10. $request_filename         当前请求的文件路径,由 root alias指令与 URI 请求生成

2.2获取客户端真实ip

2.2.1需求

获取真实的客户端ip地址

2.2.2步骤

1.要有相应的请求属性值。

  1. X-Real-IP
  2. X-Forwarded-For

2.要在后端主机上获取这些属性值。

  1. $http_x_forwarded_for
  2. $http_x_real_ip

2.2.3方法

2.2.3.1方法一

在所有的主机上及后端主机上获取下面的参数:

  1. $http_x_forwarded_for
2.2.3.2方法二

在第一台代理主机上设置:

  1. x_real_ip

然后再最后一台提供服务的backend主机上获取:

  1. $http_x_real_ip

2.3日志定制案例

1.定制日志格式。

2.在第一个代理上 设置两个真是的报文头:X-Real-IP和X-Forwarded-For。

3.方法

方法一:在所有的主机上获取 $httpxforwarded_for

方法二:在最后一台主机上设置 $httpxreal_ip

4.在后端主机上使用定制日志

root@itcast:/etc/nginx/conf.d# cat upstream.conf backends.conf 
upstream backends {
    server 192.168.8.15:10086;
}
server{
    listen 80;
    location / {
        proxy_pass http://backends;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
server {
    listen 192.168.8.15:10086;
    root /var/www/html/huang;
    index index.html;
    access_log /var/log/nginx/huang.log proxy_format;
    real_ip_header X-Forwarded-For;
    location / {
        try_files $uri $uri/ =404;
    }
}

3.Docker

3.1Docker是什么?

我们先引入一个场景,就是我们在自己电脑上开发项目完成后,要部署到不同的服务器上去运行,因为涉及到负载均衡,那么服务器超多,每一台都需要从零搭建相关环境,保证项目运行正常。好不容易都弄完了,有台主机崩了,你说惊喜不惊喜?如果我们可以直接将环境和项目完整的复制移植到服务器上会多么省事,只需要一次构建,即可多次使用,这就是docker。简单的说,Docker是一种快速解决生产问题的技术手段。它由镜像、仓库、容器三大部分组成。由此引出docker的理念:构建(build)、运输、运行。

3.2优缺点

优点:适用场景比较多;环境部署快、更新快;省钱省力,非常流行,人们都在选择。

缺点:依赖操作系统;依赖网络;有限制条件,那就是银行u盾等场景不能使用。

3.3部署docker

安装依赖软件:

apt-get update
apt-get install apt-transport-https ca-certificates curl software-properties-common -y

使用阿里云的源:

  1. curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  2. add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_re lease -cs) stable"

检查:

  1. apt-get update

查看支持的docker版本:

  1. apt-cache madison docker-ce

安装docker:

  1. apt-get install docker-ce -y

指定安装的版本:

  1. apt-get install docker-ce=<VERSION>-y

启动docker:

systemctl start docker
# 查看docker的状态
systemctl status docker

Ubuntu安装完成之后默认就开启了服务。

测试docker:

  1. docker version

docker启动之后,使用ifconfig命令查看IP,会发现网卡多了一个docker0网卡,网卡地址是172.17.0.1

docker服务命令:

  1. docker start | stop | restart docker

删除docker命令:

yum remove docker-ce
rm -rf /var/lib/docker/ 
rm -rf /etc/docker

docker的基本目录:

/etc/docker/    # docker的认证目录
/var/lib/docker/    # docker的应用目录

3.4docker加速器

在国内使用docker的官方镜像源,会因为网络的原因,造成无法下载,或者一直处于超时。所以我们使用 daoclo ud 的方法进行加速配置。

访问 daocloud.io网站,登录 daocloud 账户,点击右上角的加速器,在新窗口显示的命令记下来,我们使用该命令进行配置:

  1. 窗口显示的命令

加速器配置:

修改daemon.json文件

# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://74f21445.m.daocloud.io"], "insecure-registries": []}

修改完之后重启一下docker:

  1. systemctl restart docker

3.5镜像

特点:镜像是一个只读文件,和我们安装Windows系统的iso镜像文件一样。

搜索镜像:

  1. docker search [image_name]

先在本地的仓库找,如果找不到会去网上仓库找。

获取镜像:

  1. docker pull [image_name]

查看镜像:

查看本地仓库的镜像信息。

  1. docker images
  2. # 查看某一个镜像
  3. docker images [image_name]

查看镜像的历史信息:

  1. docker history nginx

会查看历史操作过的命令以及产生文件大小。

重命名,打标签:

  1. docker tag [old_image]:[old_version][new_image]:[new_version]

里面的版本号如果不指定,默认是latest。

删除镜像:

  1. docker rmi [IMAGE ID]# 方法一
  2. docker rmi [image]:[image_version]# 方法二

当一个image id指向多个镜像名的时候,就不能使用方法一image id删除了。

docker的家目录:

  1. /var/lib/docker

将docker的镜像导出,进行备份:

  1. docker save -o [包文件][镜像]

导入镜像:

  1. docker load <[image.tar_name]
  2. docker load --input [image.tar_name]

docker load不能指定镜像的名称。

3.6容器管理

特点:在docker中我们可以为所欲为的地方,与外界完全隔离。

查看正在运行的容器:

  1. docker ps

查看所有运行过的容器:

  1. docker ps -a

启动容器:

docker run <参数,可选> [docker_image] [执行的命令]
# 让docker容器在后台以守护形式运行
docker run -d [docker_image]
# 启动已经终止的容器
docker start [container_id]

创建并进入到容器里面:

  1. docker run --name [container_name]-it [docker_image]/bin/bash

--name给容器定义一个名字

-i 表示以“交互模式”运行容器

-t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。

/bin/bash执行一个命令

进入到容器里面

  1. docker exec-it <容器id>/bin/bash

关闭容器:

  1. docker stop [container_id]

删除容器:

docker rm [container_id] # 删除已经关闭的容器
docker rm -f [container_id] # 强制删除正在运行的容器

获取到所有的容器id

  1. docker ps -a -q

强制删除所有的容器:

  1. docker rm -f $(docker ps -a -q)

$(xxx)表示先执行括号里面的命令。

退出容器:

  1. exit

也可以直接ctrl+D

基于容器创建镜像:

docker commit -m <注释> -a <作者> [container_id] [new_image]:[new_version]

查看系统号:

  1. netstat -tnulp

查看容器的所有的详细信息:

  1. docker inspect [container_name]

二次开发要好好了解inspect命令的结果内容,十分的主要

查看容器运行日志:

  1. docker logs [container_id]

3.7仓库管理

此处将的仓库就是镜像存储的地方。

docker仓库分类(安全角度):安全仓库、不安全仓库。

Docker仓库分类:共有仓库、私有仓库、本地仓库。

私有仓库:registry(轻量级)、harbor(企业级)

3.7.1相关命令

docker login [仓库名称]
docker pull [镜像名称]
docker push [镜像名称]
docker search [镜像名称]

3.7.2私有仓库部署

创建仓库的流程

1.获取仓库镜像并运行。

2.配置仓库权限。

3.提交镜像到私有仓库。

4.推送拉取测试。

实施方案

下载registry镜像:

  1. docker pull registry

启动仓库容器:

  1. docker run -d -p 5000:5000 --restart=always registry

--restart代表的是什么时间重启

docker-proxy将容器里的端口映射到外面

检查容器效果:

  1. curl 127.0.0.1:5000/v2/_catalog

配置容器权限:

vim /etc/docker/daemon.json
{"registry-mirrors": ["http://74f21445.m.daocloud.io"], "insecure-registries": ["192.168.8.14: 5000"]}

注意:私有仓库的ip地址是宿主机的ip,而且ip两侧都有双引号

重启docker服务:

  1. systemctl restart docker
  2. systemctl status docker

效果查看

启动容器:

  1. docker start [container_id]

标记镜像:

  1. ddocker tag ubuntu-mini 192.168.8.14:5000/ubuntu-14.04-mini

提交镜像:

  1. docker push 192.168.8.14:5000/ubuntu-14.04-mini

下载镜像:

  1. docker pull 192.168.8.14:5000/ubuntu-14.04-mini
注意事项

1.运行仓库的时候,添加 --restart参数。

2.推送镜像的时候,镜像的名称应该携带仓库地址。

3.8数据管理

数据卷:将宿主机的某个目录,映射到容器中,作为数据存储的目录,我们就可以在宿主机对数据进行存储。缺点是太单一了 。

数据卷容器:将宿主机的某个目录,使用容器的方式来表示,然后其他的应用容器将数据保存在这个容器中,达到大批量应用数据同时存储的目的

3.8.1数据卷简介

宿主机和容器间共享数据的一种机制

-v 宿主机文件:容器文件路径

3.8.2数据卷实践

目录

  1. docker run -d -v /tmp:/test1 nginx

文件

  1. docker run -d --name hah -v /tmp/nihao.txt:/nicai/h.py nginx

需求:

如果我准备启动10个容器每个容器我都同时挂载2个文件

思路1:

一个数据卷操作的命令执行10遍

3.8.3数据卷容器简介

场景:

批量数据卷的操作

步骤:

1 创建数据卷容器

注意:数据卷容器不会启动

2 启动应用容器的时候,挂载数据卷容器

3.8.4数据卷容器实践

docker create -v /tmp/:/test -v /suzhuji:/jizhusu -v /su:/us --name vc-test nginx 
docker ps
docker ps -a
docker inspect 5d8526a2abe9
docker ps -a
docker run --volumes-from vc-test --name nginx-test1 nginx
docker run -d --volumes-from vc-test --name nginx-test1 nginx
docker run -d --volumes-from vc-test --name nginx-test2 nginx
docker run -d --volumes-from vc-test --name nginx-test3 nginx
docker ps
docker exec -it nginx-test2 /bin/bash
docker exec -it nginx-test3 /bin/bash

3.8.5容器里面的数据备份和还原(扩展)

3.9网络管理

3.9.1端口映射详解

随机端口的起始端口号是:32768。

每次使用随机端口映射,都会在之前的端口号基础上+1。

好处

1.无需关心容器的端口号和宿主机上的端口号。

2.所有的容器永远不可能冲突。

3.9.2随机映射实践

  1. docker run -d -P nginx

3.9.3指定映射实践

  1. -p [宿主机ip]:[宿主机port]:[容器端口]

注意:

1.宿主机ip不写表示0.0.0.0;宿主机port不写,表示随机端口。

2.容器端口必须写。

3.生产中在使用指定端口映射的时候,一定要合理的安排端口的分配。

docker run -d -p 192.168.8.15:999:80 nginx
docker run -d -p :999:80 nginx
docker run -d -p :998:80 nginx
docker run -d -p ::80 nginx

3.9.4拓展

1.docker的网络模型 (5种)

docker自带的网络模型:bridge(默认) none host

docker其他的网络模型:container overlay

2.docker 网络模型简单实践

3.docker overlay网络模型实践

weave、flannel、calico、canel、openswitch

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
关系型数据库 应用服务中间件 数据库
项目部署二:服务器和环境配置
项目部署二:服务器和环境配置
|
4月前
|
前端开发 应用服务中间件
前端项目部署问题总结
【7月更文挑战第13天】
63 1
|
缓存 前端开发 数据库
项目部署(三)
项目部署(三)
|
6月前
|
前端开发 应用服务中间件 网络安全
前端项目部署
前端项目部署
469 0
|
数据采集 缓存 运维
项目部署(一)
项目部署(一)
|
Java 关系型数据库 MySQL
将springboot项目部署到阿里云服务器
将springboot项目部署到阿里云服务器
|
SQL NoSQL 关系型数据库
2022-10-9-项目部署
2022-10-9-项目部署
85 0
|
前端开发 应用服务中间件 Linux
第一次部署项目有感
本文将叙述我在部署项目过程中遇到的一些问题和解决方法,同时简略介绍一下我的项目
103 2
第一次部署项目有感
|
jenkins Java 持续交付
项目部署(jenkins 环境配置) | 学习笔记
快速学习 项目部署(jenkins 环境配置)
121 0
项目部署(jenkins 环境配置) | 学习笔记
|
jenkins Java Linux
项目部署(jenkins 安装1) | 学习笔记
快速学习 项目部署(jenkins 安装1)
135 0
项目部署(jenkins 安装1) | 学习笔记