复习

  1. linux常用目录
    1. / 根目录
    2. /root root用户的home目录
    3. /bin 基本命令
    4. /tmp 临时目录
    5. /home 非root用户的home目录
    6. /etc 配置文件
      1. profile 环境变量
      2. yum.repos.d
      3. vi sysconfig/network-scripts/ifcfg-ens33
    7. /opt 安装软件
    8. /var /var/log 日志
    9. /usr
    10. /boot
    11. /dev
    12. /sbin
  2. 命令的结构 选项 参数
  3. 命令
    1. ls 列出内容
      1. -a 所有文件
      2. -t 按照时间排序
      3. -l 详细信息
    2. cd
    3. touch 创建文件
    4. nohup 不挂线
    5. cat 查看文件内容
    6. less 查看
      1. j 下 k上 gg头 G尾 q退出 /搜索 n下一处 N上一处
    7. cp 复制 cp {from} {to}
    8. rm -rf 强制删除文件或者文件夹
    9. tar
      1. -cvf 压缩
      2. -xvf 解压
      3. -C 指定目录
      4. -tvf 查看
    10. firewall-cmd
      1. —add-port 添加端口 =8080/tcp
      2. —reload 重载
      3. —remove-port 删除端口
      4. —list-port 查看
      5. —permanent 持久化
    11. rz 上传
    12. kill 杀死进程
    13. yum 安装软件
    14. systemctl 系统管理
      1. stop start status restart reload enable(开机启动)
    15. ps aux 查看系统进程
    16. mv 移动、重命名
    17. tail -5f 查看文件尾部,并跟随
    18. head 查看文件头部
    19. | 管道
    20. grep 搜索关键字
    21. echo 输出内容
    22. man 查看帮助
    23. ip addr 查看ip
    24. pwd 当前路径
    25. mkdir 创建文件夹
    26. rpm 安装rpm包
    27. sl 小火车
    28. cowsay 奶牛说
    29. source 使profile立即生效
    30. curl 访问地址
    31. make 编译安装
    32. tree 以树形方式展示目录
    33. wget 下载
    34. clear 清理
    35. vi 编辑器
      1. 模式: 命令模式 | 编辑模式 | 视图模式
      2. 模式切换:
        1. 命令 -> 编辑模式
          1. i o O a s c
        2. 编辑 -> 命令 esc
      3. 退出: :q! :wq :q :x
      4. 导航 hjkl
      5. 编辑
        1. d 删除
        2. p 粘贴
        3. y 复制 y5y yG文章末尾 y0行首

补充

  1. 网络如何配置

image.png

  1. 编辑配置文件
    1. vi sysconfig/network-scripts/ifcfg-ens33
    2. 重启network服务 systemctl restart network
  2. nmtui / 改完重启网络服务
    1. bash 与 alias

配置文件 /etc/bashrc 每次进入shell时都会source以下bashrc,配置生效
alias 别名 给一个命令取一个别名,方便记忆和使用

  1. alias sysout='cowsay -f turtle'
  2. alias chkps='ps aux | grep'
  3. ----
  4. source /etc/bashrc

alias cd=’rm -rf’

nginx

http://nginx.org/en/download.html
轻量级高性能的http服务器,将资源发布为网络资源,俄罗斯
安装步骤

  1. 添加仓库,在/etc/yum.repos.d路径下,创建文件 nginx.repo,内容如下:

    1. [nginx]
    2. name=nginx repo
    3. baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    4. gpgcheck=0
    5. enabled=1
  2. yum install -y nginx

  3. nginx命令启动
  4. 配置文件
    1. /etc/nginx nginx.conf
    2. /usr/share/nginx html的位置
    3. /var/log/nginx/ 日志

反向代理

image.png
反向代理:

  1. 隐藏内部结构
  2. 提供高性能的http服务,在tomcat出错,得到友好的提示
  3. 负载均衡服务

步骤:

  1. 关闭selinux,防止403问题
    • 修改/etc/selinux/config文件,将enforcing改为disabled;
    • 重启电脑 shutdown -r / halt / reboot
  2. 配置nginx vim /etc/nginx/default.d/default.conf

    1. location / {
    2. proxy_pass http://localhost:8080;
    3. # 转发原始IP和header
    4. proxy_set_header X-real-ip $remote_addr;
    5. proxy_set_header Host $http_host;
    6. }
  3. 修改nginx.conf

    1. #root /usr/share/nginx/html;
  4. 启动nginx,重新加载配置 nginx -s reload

  5. 启动 spring-boot项目

    负载均衡

    单机问题:
  • 出现故障,导致服务不可用
  • 单机性能有上限,无法永远支撑服务规模扩张

冷备(主机,备机,备机不开机) 热备(主机备机开着,但只有主机提供服务,浪费)
集群:
负载均衡问题:将请求均衡的分发给所有参与服务的服务器
如何具体分发请求的策略称为:负载均衡策略

  • 轮询
  • 加权轮询
  • 随机
  • IP hash,对请求的IP进行hash计算,保证同一个IP的请求被分发给同一台服务器处理
  1. 编写一个测试用的spring-boot项目
    1. 配置一个随机端口 server.port=${random.int(8000,8010)}
    2. 开发一个返回端口的接口 ```java package com.woniuxy.simple;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;

@RestController public class GetPortController {

  1. @Autowired
  2. private Environment environment;
  3. @GetMapping("getPort")
  4. public String getPort(){
  5. //获得当前应用端口
  6. return environment.getProperty("local.server.port");
  7. }

}

  1. 2. 部署两次,获得两个端口
  2. 2. 配置nginx
  3. nginx.conf
  4. ```nginx
  5. # 配置一个集群
  6. upstream woniu_cluster{
  7. server 127.0.0.1:8001 weight=1;
  8. server 127.0.0.1:8009 weight=2;
  9. }

default.conf

  1. location / {
  2. proxy_pass http://woniu_cluster;
  3. proxy_set_header X-real-ip $remote_addr;
  4. proxy_set_header Host $http_host;
  5. }
  1. 重载nginx nginx -s reload
  2. 在服务器外部,访问 http://192.168.60.179/getPort

两个版本

  1. 我的版本 nginx.conf + /etc/nginx/default.d/default.conf
  2. 另一个那本 nginx.conf + /etc/nginx/config.d/default.conf

修改default.conf 里的location 的配置
upstream也是配在default.conf

Docker

image.png
image.pngimage.png
容器 vs 虚拟机
虚拟机: 虚拟一个完整地操作系统;传输,封装效率很低;大小一般在若干G
容器:复用宿主机的操作系统;内部包含了一个完整地操作系统;大小在几十上百M

  • windows版本的docker与linux版本的docker的容器不相通的

容器可以理解为轻量级虚拟机
原理:复用宿主机系统,并且进行了各种资源隔离;
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。由于容器是进程级别的,相比虚拟机有很多优势。

  • 启动快
  • 资源占用少
  • 体积小

安装docker

  1. curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

修改docker的镜像源为国内源

/etc/docker/daemon.json

  1. {
  2. "registry-mirrors": [
  3. "https://ustc-edu-cn.mirror.aliyuncs.com",
  4. "https://hub-mirror.c.163.com"
  5. ]
  6. }

启动docker : systemctl start docker
docker info ==>

  1. Registry Mirrors:
  2. https://ustc-edu-cn.mirror.aliyuncs.com/
  3. https://hub-mirror.c.163.com/

测试: docker run hello-world

docker的概念

2021年6月30日 Linux2 - 图6
client: docker客户端
deamon: docker守护线程
registry: 仓库 https://hub.docker.com/search?q=&type=image
container: 容器
image: 镜像文件

封装镜像文件 ——> 发布到仓库(registry)——> 下载镜像文件———> 创建容器(在宿主机上运行的一个程序)
centos+wnmysql
镜像:文件,类似Java类
容器:程序,类似Java的对象

nginx

docker pull 拉取镜像 docker pull nginx
docker run 创建并运行一个容器 docker run nginx 创建并运行一个nginx的容器
docker images 查看本地镜像
docker container ls -a 查看所有容器 简写为 docker ps -a
docker run ubuntu:latest 直接创建容器,并运行,并退出
docker run -itd ubuntu 运行并保持容器不关闭
docker rm id/名字 删除
docker ps -aq | xargs docker rm 删除全部容器,删除之前需要先关闭

docker run -itd —name=myubtu ubuntu
进入容器中,并打开一个bash终端
docker exec -t -i myubtu /bin/bash

docker run -itd —name=jdk openjdk

安装mysql

  1. docker run -itd —name=mysql5 -e MYSQL_ROOT_PASSWORD=root123 -p 3307:3306 mysql:5
  • -itd 后台运行
  • —name 名字
  • -e 环境变量,设置的root用户密码
  • mysql:5 镜像名:标签
  • -p 端口映射 {宿主机端口}:{容器端口}

下载一个mysql:5镜像,并且创建容器,运行该容器

  1. 进入容器,操作mysql docker exec -it mysql5 /bin/bash

> mysql -uroot -proot123 # 进入mysql
> grant all privileges on . to root@’%’identified by ‘root123’; #授权,外部也可以访问
> FLUSH PRIVILEGES;
> exit; # 退出mysql
exit 退出容器

  1. 测试

systemctl stop firewalld 关闭防火墙,便于测试
在window上通过navicat访问3307端口,测试连接
image.png

作业

  1. 在centos上安装maven,不使用docker
  2. docker安装运行nginx, -v 选项 (注意,防火墙firewalld必须打开)