葵花宝典

Linux系统常用的命令和优化

1、 Linux系统查看系统资源以及负载情况的命令:

答:ps aux、Top、htop、netstat、free内存、uptime查看系统负载、
lsmod内核模块、lscpu查看CPU信息、iostat监控系统设备的IO负载情况。

2、Linux系统处理文本工具和编辑查看的命令

答:cat、less、head、tail、diff比较、sort排序、uniq删除重复、fire、find
	Cut、wc、awk、grep、sed等

3、 Linux系统磁盘相关命令和区别LVM逻辑卷组

答:	   Df、fdisk、gdisk、parted、mount、umount、lsblk列出所有可以块设备信息
   		Blkid列出系统名称和设备UUID等数据、partprobe可以使kernel读取分区表。
  	    Mkfs对硬盘分区格式化、fsck对文件系统检测
        Fdisk和parted的区别?
        Fdisk只支持msdos(MBR)、parted支持MBR和gpt

4、Linux系统如何调优、和配置?

答:避免直接使用root用户、配置国内yum源、配置时间同步服务器

配置系统同时打开文件最大数:/etc/sysctl.com配置文件添加fs:fike-max的值

然后sysctl -p 刷新  cat /etc/proc/sys/fs/file-max查看

Selinux上下文、更改ssh端口和配置秘钥

5、Linux系统的重要目录有哪些。

答:/usr /etc /bin /sbin /var /lib64 /lib /dev /proc /home

6、Linux文件系统的区别。

答:ext3:最多支持32TB的文件系统和2TB的文件,目前只支持32000个子目录。

当数据写入到Ext3文件系统中时,数据块分配器每次只能分配一个4KB的块

Ext4:文件系统容量达到1EB,而文件容量则达到16TB,理论上支持无限数量的子

目录,Ext4的多块分配器支持一次调用分配多个数据块

XFS:根据所记录的日志在很短的实际内迅速恢复磁盘文件内容,采用优化算法,  

日志记录对整体文件操作影响非常小,是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间,能以接近裸设备I/O的性能存储数据。

7、文本三剑客的使用

 sed命令如何将一个文件已注释的内容全部取消注释:
 			sed '/#/'d 
 sed命令替换文件里的关键字符串:
 	sed 's/unix被替换/linux替换/' sed-test.txt

awk使用的格式:

1、打印文件的第一列(域)  : awk '{print $1}' a.txt

2、打印文件的前两列(域)  : awk '{print $1,$2}' a.txt

3、打印完第一列,然后打印第二列 : awk '{print $1 $2}' a.txt

4、打印文本文件的总行数: awk 'END{print NR}' a.txt

5、打印文本第一行 :awk 'NR==1{print}' a.txt

6、打印文本第二行第一列 :sed -n "2, 1p" a.txt | awk 'print $1'

    cat test| awk 'NR==4'或cat test|sed -n '4p'直接获取某一行的数据

    cat data|awk '{sum+=$1} END {print "Sum = ", sum}'  ##求和

    cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}' ##求平均

    cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}' 最大值

    awk 'BEGIN {min = 1999999} {if ($1 
   
  • node节点的服务和作用。
  • Node节点主要包括kubelet、kube-proxy模块和pod对象。
    
    Pod:Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一    个进程,它内部封装了一个或多个紧密相关的容器。
    
    kubelet:运行在每个计算节点上,kubelet 组件通过 api-server 提供的接口监测到 kube-scheduler 产生的 pod 绑定事件,然后从 etcd 获取pod 清单,下载镜像并启动容器。同时监视分配给该Node节点的pods,周期性获取容器状态,再通过api-server通知各个组件。
    
    负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能。
    
    kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。
    
    首先k8s 里所有资源都存在 etcd 中,各个组件通过 apiserver 的接口进行访问etcd来获取资源信息
     kube-proxy 会作为 daemon(守护进程) 跑在每个节点上通过watch的方式监控着etcd中关于Pod的最新状态信息,它一旦检查到一个Pod资源被删除了或新建或ip变化了等一系列变动,它就立即将这些变动,反应在iptables 或 ipvs规则中,以便之后 再有请求发到service时,service可以通过ipvs最新的规则将请求的分发到pod上
    

    二、 k8s里pod的启动流程是什么?

    1.kubectl提交创建pod命令,api响应命令,通过一系列认证授权,把pod数据存储到etcd,创建deployment资源并初始化.                              
    
    2.controller通过list-watch机制,监测发现新的deployment,将该资源加入到内部    工作队列,发现该资源没有关联的pod和replicaset,启用deployment controller    创建replicaset资源,再启用replicaset controller创建pod.
    
    3.所有controller正常后.将deployment,replicaset,pod资源更新存储到etcd.                                                                
    
    4.scheduler通过list-watch机制,监测发现新的pod,经过主机过滤主机打分规则,将pod绑定(binding)到合适的主机.
    
    5.将绑定结果存储到etcd.                                                                                    
    
    6.kubelet每隔 20s(可以自定义)向kube-apiserver通过NodeName 获取自身Node上所要运行的pod清单.通过与自己的内部缓存进行比较,新增加pod.
    
    7.启动pod启动容器.
    
    8.把本节点的容器信息pod信息同步到etcd 
    

    三、docker和K8S的区别是什么?

    k8s是一个开源的容器集群管理系统**,可以实现容器集群的自动化部署、自动扩缩容、        维护等功能。
    
    **Docker是一个开源的应用容器引擎**,开发者可以打包他们的应用及依赖到一个可移植       的容器中,发布到流行的Linux机器上,也可实现虚拟化。
    

    四、 K8S的几种部署方式是什么?

    1. 1. 使用kubeadmin通过离线镜像的方式,
      
      2. 通过厂商集成的方式如:rancher。
      
      3. 直接使用类似阿里云这样的公有云平台k8s 。只要有钱,一键搞定
      
      4. 通过yum官方仓库安装,需要启用extras仓库。
       不过里面版本都比较老,目前最新的也只是1.5.2版本,对于想学新的东西,比如k8s角色管理、helm等来说不太方便,因此也不建议使用。
      
      5. 通过二进制包的形式进行安装。
      

    五、 K8S如何将内部的端口暴露出来有几种方式?

    1. 一.容器外部访问容器内部服务
    使用hostNetwork参数(容器内部服务与宿主机同一网段)
    特点:当Pod调度到哪个节点就使用哪个节点的IP地址,客户端使用IP地址访问容器里面的服务。一个node只能启动一个pod端口,端口不能冲
    
    使用hostPort参数 (将容器内端口暴露出来)
    特点:Pod调度到哪个节点就用哪个节点的IP址访问, 端口可以随机指定。生产环境pod必须与宿机绑定才可使用。
    
    使用NodePort参数
    特 点:使用node节点的IP加端口可以访问Pod服务,master节点IP不可以访问。端口范围30000-32767
    
    使用 LoadBalancer参数
    特点:必须使用云服务商提供一个VIP地址,只能node节点的IP地址可以访问,master地址不能访问。
    

    2.容器内部服务访问外部服务

    使用 hostNetwork参数(Pod与宿主机IP在同一网段)
    
    使用endpoints组件 
    

    六、 K8S的核心功能。

    自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。
    
    弹性伸缩: 通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量, 如果这个平均低于10%,减少容器的数量
    
    服务的自动发现和负载均衡: 不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。
    
    滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统
    
    七、 K8S的资源隔离和资源限制。
    

    1、 namespace做资源隔离。

    通过将系统内部的对象“分配”到不同的Namespace中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。
    
    Kubernetes集群在启动后,会创建一个名为“default”的Namespace,通过Kubectl可以查看到。
    
    创建Pod/RC/Service时,如果不指定Namespace,则默认是"default"的Namespace。
    
    使用Namespace来组织Kubernetes的各种对象,可以实现对用户的分组,即“多租户”管理。对不同的租户还可以进行单独的资源配额设置和管理,使得整个集群的资源配置非常灵活、方便。
    

    2、 K8S容器资源限制。

    k8s****采用****request****和****limit****两种限制类型来对资源进行分配**
    
    request(资源需求):即运行pod的节点必须满足运行pod的最基本需求才能运行pod
    
    limit(资源限制):即运行pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额
    可以限制对CPU、内存、namespace做限制。
    
    八、 K8S的网络架构是什么?
    
    同一pod下容器与容器的通信、同一节点下不同的pod之间的容器间通信、
    
    不同节点下容器之间的通信、集群外部与内部组件的通信、pod与service之间的通信
    

    K8S的资源类别有哪些?

    资源对象:Pod、ReplicaSet、ReplicationController、Deployment、StatefulSet、DaemonSet、Job、CronJob、HorizontalPodAutoscaling。
    
    配置对象:Node、Namespace、Service、Secret、ConfigMap、Ingress、Label、ThirdPartyResource、 ServiceAccount
    
    存储对象:Volume、Persistent Volume
    
    策略对象:SecurityContext、ResourceQuota、LimitRange
    

    九、 K8S的部署流程是什么?

    部署流程:K8S集群安装
    
    修改IP地址主机和host解析
    
    Master节点安装etcd
    
    Master节点安装kubernetes
    
    Node节点安装kubernetes
    
    所有节点配置flannel网络
    
    配置master为镜像仓库
    

    Docker的原理和架构

    一、 什么是docker?

    答:Docker 是一个开源的应用容器引擎,基于 [Go 语言](https://www.runoob.com/go/go-tutorial.html) 并遵从 Apache2.0 协议开源。
    Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
    

    二、 docker的三个核心概念。

    镜像、仓库、容器
    
    容器的三要素:镜像:封装的运行环境  仓库:存储镜像 hub.docker.com 容器:正在运行的运行环境或者是曾经运行过的运行环境
    
    镜像的分层:Docker 的镜像通过联合文件系统 将各层文件系统叠加在一起
    
    docker语法  yaml语法 和image语法
    

    三、 docker的三种网络模式是什么?

    bridge**:桥接模式:当Docker服务启动时,会在主机上创建一个名为docker0的虚拟网桥,并选择一个和宿主机不同的IP地址和子网分配给docker0网桥
    
    **host**:主机模式:该模式下容器是不会拥有自己的ip地址,而是使用宿主机的ip地址和端口。这种模式的好处就是网络性能比桥接模式的好。缺点就是会占用宿主机的端口,网络的隔离性不太好
    
    **none**:无网络模式:none模式没有IP地址,无法连接外网,等于就是断网的状态,作用就是用于测试,生产环境一般不会用到这种
    

    四、 docker****的资源限制和隔离。

    常见的隔离方式:网络化配置   隔离机制:写时复制 cgroup机制
    
    已有的分层只能读不能修改    上层镜像优先级大于底层镜像
    

    五、 docker的内存资源限制

    限制参数  默认情况下,如果不对容器做任何限制,容器能够占用当前系统中的所有 CPU 资源
    
    默认情况下,如果不对容器做任何限制,容器能够占用当前系统能给容器提供的所有资源
    
    docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress -vm 2
    
    docker run --name stress -it --rm --cpuset-cpus 0 lorel/docker-stress-ng:latest stress --cpu 8
    

    六、Docker-Compose:容器编排工具,允许用户在一个模板( YAML 格式 )中定义一组相关 联的容器,会根据 --link 等参数,对启动的优先级进行排序。

    Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container),Docker Compose 还可以更新容器。

    常用的命令:

    docker-compose ps            			 ps:列出所有运行容器
    
    docker-compose logs           			查看日志
    
    docker-compose port eureka 8761  	port:打印绑定的公共端口,下面命令可以输出 eureka 服务 8761 端口所绑定的公共端口
    
    docker-compose build           			build:构建或者重新构建服务
    
    docker-compose start eureka    			 start:启动指定服务已存在的容器
    
    docker-compose stop eureka    			 stop:停止已运行的服务的容器
    
    docker-compose rm eureka       			rm:删除指定服务的容器
    
    docker-compose up            			 up:构建、启动容器
    
    docker-compose kill eureka  			  kill:通过发送 SIGKILL 信号来停止指定服务的容器
    

    七、docker的数据卷

     数据卷是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器。
    
    特性:1.数据卷 可以在容器之间共享和重用 
    	 2.对数据卷的修改会立马生效
    
      	 3.对数据卷的更新,不会影响镜像  
       	 4.数据卷 默认会一直存在,即使容器被删除
    
    	查看所有的数据卷:docker volume ls   cd /var/lib/docker/volumes/
    
    	创建数据卷:docker volume create my-vol
    
    	查看指定数据卷的详细信息(显示一个JSON格式的数据) docker volume inspect my-vol
    
    	删除一个volume:docker volume rm my-vol
    
    数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷可能会占据很多空间,所以要及时删除
    

    十、 docker存储化机制Dockerfile、volume 资源限制cgroup

    十一、 容器内如何优雅退出

     Kill参数:SIGHUP启动被终止的程序,可让该进程重新读取自己的配置文件,类似于重新启动
    
     SIGINT相当于用键盘输入ctrl+c来中断一个程序的进行
    
     SIGKLL强行中断一个程序的进行,如果程序进行到一半,尚未完成的部分可能会出现半产品情况。不完全
    
     SIGTERM以正常的方式来终止该程序。由于是正常的终止,所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时,输入这个 signal 也是没有用的。
    
    SIGSTOP相当于键盘输入ctrl+z来暂停一个程序的进行
    
    信号:信号是进程间通信的形式、一个信号就是内核发送给进程的一个信息、
    当一个信号被发送给一个进程后,进程会立即中断当前的执行流并开始执行信号
    的处理程序、如果没有为这个信号指定处理程序,就执行默认的处理程序。
    
    比如为了能让程序优雅的退出(接到退出的请求后能够对资源进行清理)一般程
    序都会处理 SIGTERM 信号、与 SIGTERM 信号不同,SIGKILL 信号会粗暴的结
    束一个进程。
    

    十二、 namespace 和cgroup 的区别?

    Namespace:隔离技术的第一层,确保 Docker 容器内的进程看不到也影响不到    Docker 外部的进程。
    
    Control Groups:LXC 技术的关键组件,用于进行运行时的资源限制
    

    十一、docker的主要组件有哪些?

    Docker 相关的组件:docker、dockerd、docker-init 和 docker-proxy
    
    containerd 相关的组件:containerd、containerd-shim 和 ctr
    
      容器运行时相关的组件:runc
    
    Dockerd是docker服务端的后台常驻进程、用来接收客户端发送的请求执行具体的处理任务,处理完成后将结果返回给客户端
    
    Docker-init: docker会启动inti进程充当容器中的1号进程,当子进程遇到一些问题(收留孤儿进程)的时候inti进程可以进行回收子进程
    
    Docker-proxy:  主要是用来做端口映射的。当我们使用 docker run 命令启动容器时,-p 参数  
    docker run --name=nginx -d -p 8080:80 nginx
    
    Containerd:容器周期管理、镜像管理、接收douckerd请求调用runc启动容器、管理存储、管理网络。
    
    Containerd-shim:containerd-shim 的主要作用是将 containerd 和真正的容器进程解耦,使用 containerd-shim 作为容器进程的父进程,从而实现重启 containerd 不影响已经启动的容器进程
    
    Ctr: containerd-ctr它是 containerd 的客户端用来开发和调试ctr 可以充当 docker 客户端的部分角色,直接向 containerd 守护进程发送操作容器的请求。
    
    Runc: runc 是一个标准的 OCI 容器运行时的实现,它是一个命令行工具,可以直接用来创建和运行容器。
    

    十二、docker容器的生命周期。

           create初建状态       
           running运行状态
            stopped、停止状态      
            paused  暂停状态      
            deleted删除状态
    
    十二、什么dockerfirle和他的使用说明。
    

    Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

    作用:安装dockerfile中的指令定义docker容器或者容器中的应用程序以及服务 Dockerfile制作一个镜像模板安装模板统一生成容器

    ​ 常见的指令参数:

    FROM:指定创建镜像的基础镜像                      
    
    MAINTAINER:Dockerfile作者信息,一般写的是联系方式   
    
    RUN:运行Linux系统的命令使用                       
    
    CMD:指定容器启动执行的命令;启动容器中的服务
    
    LABEL:指定生成镜像的源数据标签
    
    EXPOSE:指定镜像容器监听端口号;发布服务使用
    
    ENV:使用环境变量
    
    ADD:对压缩文件进行解压缩;将数据移动到指定的目录
    
    COPY:复制宿主机数据到镜像内部使用
    
    WORKDIR:切换到镜像容器中的指定目录中
    
    VOLUME:挂载数据卷到镜像容器中
    
    USER:指定运行容器的用户
    
    ARG:指定镜像的版本号信息
    
    ONBUILD:创建镜像,作为其他镜像的基础镜像运行操作指令
    
    ENTRYPOINT:指定运行容器启动过程执行命令,覆盖CMD参数
    

    十三、docker总结和补充

     NameSpace 名称空间   chroot给容器提供伪根机制  cgroup进程级别的资源限制
    
    UFS联合文件系统,提供镜像读写层挂载点之间的关联
    
    Iptables SNAT进  DNAT出  网桥软件级别的交换机   LXC linux容器技术容器级别的隔离机制
    

    十四、docker资源限制的原理

    1.docker资源限制的原理,

    namespace资源隔离:
    
      MNT:文件系统访问和结构(挂载点)
    
      chroot():控制文件系统跟目录的位置
    
      Cgroup:资源保护
    
      PID:进程标示符和进程能力(进程编号)
    
      NET:网络访问和结构(网络设备、网络栈、端口)
    
      UTS: 主机和域名
    
      USR: 用户名和标识符(用户和用户组)
    
      IPC: 通过共享内存进行通信(信号量、消息队列和共享内存)
    
    cgroup资源限制
    
    cgroups通过给资源设置权重、计算使用量、操控任务(进程和线程)启停等来实现资源控制
    
    cgroups的4个特点:
    
    cgroups的API以一个伪文件系统的方式实现,用户态的程序可以通过文件操作实现cgroups的组织管理
    
    cgroups的组织管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁cgroup,从而实现资源再分配和管理
    
    所以资源管理的功能都以子系统的方式实现,接口统一
    
    子任务创建之初与其父任务处于同一个cgroups的控制组
    

    cgroups 四个功能:

    资源限制:对任务使用的资源总额进行限制
    
    优先级分配:通过分配的cpu时间片数量及磁盘IO带宽大小,实现优先级控制
    
    资源统计:统计资源使用量,如CPU使用时长、内存用量等
    
    任务控制:cgroups可以对任务执行挂起、恢复等操作
    

    十五、docker命令如何实现端口穿透暴露在外面

      	 暴露特定端口到主机的特定端口:docker run -p 80:80
    
    ​    docker run -itd -p 8080:8080 dockercentos /bin/bash
    
    ​    docker stop $(docker ps -a -q) 停掉所有的容器
    
    ​    docker rm $(docker ps -aq)  删除所有的容器
    

    十六、docker和VMwore的区别是什么?

    Vmwore:在宿主机器操作系统的基础上创建的从操作系统,需要几个相互隔离的应用,就需要启动几个虚拟机,会消耗大量CPU和内存。

    Docker:docker守护进程取代了VMware中的从操作系统。它是运行在操作系统上的后台进程,用于管理docker容器。
    docker守护进程可以直接与主操作系统进行通信,为各个docker容器分配资源。还可以将容器与主操作系统隔离,并将各个容器互相隔离。
    docker在宿主机的操作系统上创建docker引擎,直接在宿主机操作系统上调用硬件资源,而不是虚拟化操作系统和硬件资源,所以操作速度快。

    十七、docker的常用命令

    docker info                 守护进程的系统资源设置
    
    docker search               Docker 仓库的查询
    
    docker pull                 Docker 仓库的下载
    
    docker images               Docker 镜像的查询
    
    docker rmi                  Docker    镜像的删除
    
    docker ps                   容器的查询
    
    docker run                  容器的创建启动
    
    docker start/stop           容器启动停止
    
     docker ps --no-trunc                      查看
    
    docker stop/start CONTAINERID              停止
    
    docker start/stop MywordPress       		通过容器别名启动/停止
    
    docker inspect MywordPress          		查看容器所有基本信息
    
    docker logs MywordPress          			 查看容器日志
    
    docker stats MywordPress         		   查看容器所占用的系统资源
    
    docker exec 容器名 容器内执行的命令  			容器执行命令
    
     docker exec -it 容器名 /bin/bash     		 登入容器的bash
    
    导出:docker save -o   
    导入:docker load -i
    stop 停止容器  start开启容器  config -q验证 yaml 配置文件是否正确   logs    查看日志信息      restart    重新启动容器
    up -d 启动容器项目  pause暂停容器  unpause恢复暂停  rm删除容器 ps显示所有容器信息
    

    存储系统和原理

    一、MFS分布式存储 NFS共享存储 ISCSI块存储

    1、  NFS:它允许网络中的计算机之间通过 TCP/IP 网络共享资源 它就是是可以透过网络,让不同的主机、不同的操作系统可以共享存储
    
      原理:NFS 在文件传送或信息传送过程中依赖于 RPC 协议
    
      开启流程:启动RPC服务 启动NFS服务向RPC注册 客户端请求NFS服务 RPC把客户端和ip地址发给客户端  客户端与服务器端连接
    

    2、MFS 分布式方案:每个完整文件存放在不同的存储服务器中。

      分布式文件系统:将一个文件拆分多份,把每一份放在不同的服务器进行存储 如果有一组文件,把组内的每一个文件单独放在不同的服务器进行存储
    
      Master 存储数据的元数据信息 从内存中索引 持久化在本地磁盘
    
      Metalogger 跟 Master 建立连接,实时同步元数据信息
    
      ChunkServer 存储真实数据的部分
    
    默认文件冗余值:2**
    
    ​    1、Master 会尽可能使文件的冗余数目达到期望值
    
    ​    2、如果 chunkserver 数目少于期望值,拿会根据当前主机的最大数进行设置,并且继续满足期望
    
    ​    3、如果副本服务器死亡,Master 会重新挑选新的 Chunserver 进行补充
    
    MFS****适用场景:大规模高并发的线上数据存储及访问(小文件,大文件都适合)**
    
    MFS特性:高可靠性:每一份数据可以设置多个备份(多分数据),并可以存储在不同的主机上
    
    高可扩展性:可以很轻松的通过增加主机的磁盘容量或增加主机数量来动态扩展整个文件系统的存储量
    
    高可容错性:我们可以通过对mfs进行系统设置,实现当数据文件被删除后的一段时间内,依旧存放于主机的回收站中,以备误删除恢复数据
    
    高数据一致性:即使文件被写入、访问时,我们依然可以轻松完成对文件的一致性快照
    

    3**、ISCSI路存储 同步磁盘**

    4**、SQUID 一个缓存服务器的守护进程 FTP HTTP SSL**

    ​ 正向代理 、反向代理、透明代理

    5**、CDN 内容分发网络:智能 DNS 缓存服务器SQUID VARNISH NGINX**

    6**、SQUID ACL 规则**

    如果定义了 acl 但是没有对 acl 做 http access 的设置,默认拒绝
    
    如果定义了 acl 但是没有对 acl 做 http access 的设置 并且 http access deny all 被关闭,那么这个 acl 匹配会根据最后一条的 http access 进行反向操作
    

    三、 ceph分布式存储也是相当于云存储。

    1、Ceph的系统架构

    cmds:Metadata server cluster,元数据服务器(缓存和同步分布式元数据)
    
    cosd:Object storage cluster,对象存储集群(将数据和元数据作为对象存储,执行其他[关键职能](https://baike.baidu.com/item/关键职能)
    
    cmon:Cluster monitors,集群监视器(执行监视功能)
    

    2、ceph的核心组件:Ceph OSD,Ceph Monitor,Ceph MDS

    ceph osd :主要功能包括存储数据,处理数据的复制、恢复、回补、平衡数据分布,并将一些相关数据提供给 Ceph Monitor
    
    ceph Monitor:ceph的监控器,主要功能是维护整个集群健康状态,提供一致性的决策,包含了Monitor map、OSD map、PG(Placement Group)map和CRUSH map
    
    ceph mds:全称是Ceph Metadata Server,主要保存的是Ceph文件系统(File System)的元数据(metadata);
    
    ceph mgr:负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载,Ceph Manager 守护进程还托管基于python的插件来管理和公开Ceph集群信息,包括基于Web的Ceph Manager Dashboard和 REST API。高可用性通常至少需要两个管理器.
    

    3、ceph组件和概念介绍

    Object:ceph最底层的存储最小单位是Object–对象,每个Object包含元数据和原始数据
    
    PG:一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。
    
    CRUSH:CRUSH是Ceph底层使用的数据分布算法,让数据分配到预期的地方
    
    RBD:RBD全称RADOS block device,是Ceph对外提供的块设备服务
    
    RGW:RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。
    
    CephFS 文件存储: CephFS全称Ceph File System,是Ceph对外提供的分布式文件存储服务
    

    监控系统

    一、 zabbix监控系统。

    zabbix架构和原理

    Zabbix可以监控服务器、路由器、交换机、OS、网络、应用程序、故障监控
    
    Zabbix架构组件:zabbix-server  Zabbix-agent Zabbix-web Zabbix-proxy
    
    Zabbix自动发现是基于icmp协议实现的
    

    二、 Prometheus监控系统和grafana。

    1、 Prometheus的主要组件有哪些?

    Prometheus Server: 用于收集和存储时间序列数据。
    
    Client Library: 客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。
    
    Push Gateway: 主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。
    
    Exporters: 用于暴露已有的第三方服务的 metrics 给 Prometheus。
    
    Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件, pagerduty,OpsGenie, webhook 等。
    
    一些其他的工具,大多数Prometheus组件都是用Go编写的,因此易于构建和部署为 静态二进制文件
    

    2、 Prometheus的工作流程。

    Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
    
    Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
    
    Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
    
    在图形界面中,可视化采集数据。
    

    3、 grafana的概念?

    Grafana支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。 官方支持以下数据源:Graphite,Elasticsearch,InfluxDB,Prometheus,Cloudwatch,MySQL和OpenTSDB等

    4、 grafana如何使用?

    Granana相当于一个动态展示工具,绑定数据源以及导入监控模板即可使用,

    5、 Nagios监控系统架构及原理。

    它是一款免费的开源 IT 基础设施监控系统,其功能强大,灵活性强,能有效监控 Windows 、Linux、VMware 和 Unix 主机状态,交换机、路由器等网络设置等。

    实现原理:

    Nagios 软件需安装在一台独立的服务器上运行,这台服务器成为监控中心,监控中心服务器可以采用 Linux 或 Unix 操作系统;每一台被监视的硬件主机或服务都运行一个与监控中心服务器进行通信的 Nagios 软件后台程序,也可以理解为 Agent 或插件均可。监控中心服务器读取配置文件中的指令与远程的守护程序进行通信,并且指示远程的守护程序进行必要的检查。虽然 Nagios 软件必须在 Linux 或 Unix 操作系统上运行,但是远程被监控的机器可以是任何能够与其进行通信的主机,根据远程主机返回的应答,Naigos 将依据配置进行回应;接着 Nagios 将通过本地的机器进行测试,如果检测返回值不正确,Nagios 将通过一种或多种方式报警;

    面试遇到的问题一

    一、通过linux 命令,统计机器上的连本机80端口的客户端的地址,输出格式为每个客户 端地址 和对应的连接数

    netstat -antlp |grep -w 本机IP地址:22 |awk '{print $5}' |awk -F: '{print $1}' |sort |uniq -c
    
    获取连接本机80口的命令,就是netstat和grep 命令
    
    awk 指定分隔符获取字符
    
    sort 和uniq 做排序和去重
    

    三、 本机机器重启了如何查看重启原因?

    基本答案:history 查看历史记录,/var/log/message 查看日志。
    
    高阶答案,在回答基本答案的基础上,能说出用ipmitool命令查看硬件的日志
    

    四、 docker 基本的命令使用?怎么查看容器的运行日志?

    基本答案:docker start ,docker run,docker ps;等,日志查看:docker logs
    

    五、 怎么查看磁盘的IO

    答:iostat命令,sar命令
    

    六、 怎么查看网络的流量?

    答:iperf,sar等
    

    七、 为什么查看文件内容时不推荐用vim?推荐用什么命令?

    答:因为vim占用内存高,推荐用less
    

    八、 了解openstack的有哪些组件吗?

    答:nova neutron,cinder,等。nova需要能说出来是管理虚拟化计算的,neutron需要能说出来搞虚拟网络控制的,cinder需要能说出来是搞存储的。

    九、 查看linux系统版本,内核版本,系统路由,本机DNS地址

    系统版本:cat /etc/os-release 或 cat /etc/redhat-release 
    
    内核版本:uname -a 或 uname -r
    
    系统路由:route -n 或 ip r 等
    
    本机DNS地址:cat /etc/resolv.conf 或dig 或nslookup
    

    十、 创建逻辑卷

    答:能说出使用pvcreate(物理卷),vgcreate(卷组),lvcreate(逻辑卷)创建逻辑卷相关命令。

    十一、每天凌晨3:30清空/tmp/的内容

    ​ 答:30 3 * * * /usr/bin/rm -rf /tmp/

    十二、登录远程mysql数据库

    ​ 答:mysql -h 数据库地址 -P 端口号 -u 用户名 -p密码

    十三、Mysql怎么删除某表中的一条数据?

    ​ 答:delete from 表名 where 条件

    十四、centos系统eth0网卡默认配置文件名称及路径

    ​ 答:完整说出 /etc/sysconfig/network-scripts/ifcfg-eth0

    十五、对test文件压缩成gz和zip包,然后解压

        压缩gz包:tar -czvf test.tar.gz test (v可省略,下同)
    
    	解压gz包: tar -cxvf  test.tar.gz
    
    	压缩zip包:zip test.zip test
    
    	解压zip包:unzip test.zip
    

    十六、linux shell脚本使用for循环批量ping 100个不同的ip把结果输出到ping.txt文件里

    答:把100个不同ip写入ip.txt文件里(文件名不限制),每个ip一行,然后执行下面命令

    for ip in cat ip.txt ; do ping $ip >> ping.txt ; done (for后面的ip变量名称不限制)

    十七、zabbix的主动和被动模式的监控有什么区别?

    主动模式是agent主动采集,返回给server。不需要server进行分析,减轻server的眼里。server向agent拉取数据

    十八、jumpserver有哪些组件?分别是干嘛的?

    ​ 答:luna,coco,jumpserver等

    十九、zabbix-proxy是干嘛的?自己需要DB吗?

    ​ 代替server收集性能数据,数据汇总给server;需要的

    二十、$? $0 $* $@是什么?

    返回值,文件名,所有参数列表,参数列表。区别是输出的括号
    

    二十一、nginx有集中类型的进程?分别是干什么的?

    ​ master和worker。master是信号管理worker。worker是并发量

    二十二、CI CD是什么意思?主要解决什么问题?

    ​ 答:持续集成,持续交付。用于代码部署,上传到gitlib仓库,部署到服务器上

    二十三、怎么把一个正在运行中的容器做成一个镜像?

    ​ 答:docker commit 命令

    二十四、grep -P 是什么意思? -E 是什么意思?

    ​ 用一个正则,传递多个内容,通过管道符分割

    二十五、docker 有哪些隔离技术?

    namespace:Linux命名空间,实现进程间信息的独立与隔离需要在操作系统内核层面进行实现的
    
    Mount Namespaces:挂载命名空间,用于隔离挂载目录
    
    UTS Namespaces:UTS命名空间,用于隔离主机及网络域等信息
    
    IPC Namespaces:用于隔离进程之间的调用,也就是隔离进程之间的通信
    
    PID Namespaces:进程命名空间,用于隔离进程的运行信息
    
    Network Namespaces:网络命名空间,用于隔离网络配置和访问
    
    cgroups(Control groups)实现了对资源的配额和度量
    
    资源限制(Resource Limitation)
    
    优先级分配(Prioritization
    
    资源统计(Accounting)
    
    进程控制(Control)
    

    二十六、怎么查看硬件日志?

    ​ 答:/var/log/dmesg

    二十七、ipmitool 这个命令是干么的?

    ​ PMItool是一个用于管理和配置,支持智能平台管理接口(IPMI)1.5版和2.0版规范的设备的实用程序。 IPMI是一个开放的标准,监控,记录,回收,库存和硬件实现独立于主CPU,BIOS,以及操作系统的控制权。起到监控作用。

    二十八、shell的基本用法有哪些

    ​ if语句条件判断、for循环语句、while循环语句、break退出正在进行中的循环、continue提前进入下一轮循环

    二十九、数据库主从原理

    主数据库有个bin-log二进制文件,纪录了所有增删改Sql语句。(binlog线程)
    
    从数据库把主数据库的bin-log文件的sql语句复制过来。(io线程)
    
    从数据库的relay-log重做日志文件中再执行一次这些sql语句。(Sql执行线程)
    
    步骤一:主库的更新事件(update、insert、delete)被写到binlog
    
    步骤二:从库发起连接,连接到主库。
    
     步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库。
    
     步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到            relay log
    
     步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos           位置开始执行读取到的更新事件,将更新内容写入到slave的db
    

    三十、join 几种用法

    ​ 第一种inner join:用inner join连接两张表,结果返回两边完全匹配的记录,也就是最多返回3条记录

    ​ 第二种left join:用left join连接两张表,结果以左边的表为主,也就是返回左表所有的行,也就是5条记录

    ​ 第三种right join: 以右表为主,结果3条记录

    ​ 第四种full join:只要有一个表存在匹配,就返回行,也就是最多返回8条记录(两表条件完全不匹配时)

    三十一、什么是触发器

    ​ 触发器是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或 DELETE。触发器可以查 询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求

    三十二、存储过程

    ​ 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过 指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它

    三十三、Redis哨兵(Sentinel)模式

    ​ 哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从 而监控运行的多个Redis实例

    ​ 作用:通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器

    ​ 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机

    ​ 故障切换(failover)的过程:假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,但是哨兵1主观的认为主服务器不可用,这个现象成为主观下线,当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线

    三十四、redis的几种数据结构

    1、String:可以是字符串,整数或者浮点数,对整个字符串或者字符串中的一部分执行操作,对整个整数或者浮点执行自增(increment)或者自减(decrement)操作

    ​ get获取指定键的值 set设置存储在指定键的值 del删除指定键的值

    2、list:一个链表链表上的每个节点都包含了一个字符串,虫链表的两端推入或者弹出元素,根据偏移量对链表进行修剪(trim),读取单个或者多个元素根据值查找或者移除元素

    rpush、将给定值推入列表的右端 lrange、获取列表在指定范围上的所有值

    lindex、获取列表在指定范围上的单个元素 lpop、从列表的左端弹出一个值,并返回被弹出的值

    3、set:包含字符串的无序收集器(unordered collection)、并且被包含的每个字符串都是独一无二的。添加,获取,移除单个元素,检查一个元素是否存在于集合中,计算交集 ,并集,差集,从集合里面随机获取元素

    sadd、将给定元素添加到集合 smembers、返回集合包含的所有元素

    sismember、检查指定元素是否存在于集合中 srem、检查指定元素是否存在于集合中,那么移除这个元素

    4、hash:包含键值对无序散列表,添加,获取,移除当键值对,获取所有键值对

    hset、在散列里面关联起指定的键值对 hget、获取指定散列键的值 hgetall、获取散列包含的所有键值对 hdel、如果给定键存在于散列里面,那么移除这个键

    5、zset:字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定。添加,获取,删除单个元素,根据分值范围(range)或者成员来获取元素

    zadd、将一个带有给定分值的成员添加到有序集合里面

    ②zrange、根据元素在有序排列中所处的位置,从有序集合里面获取多个元素

    ③zrangebyscore、获取有序集合在给定分值范围内的所有元素

    ④zrem、如果指定成员存在于有序集合中,那么移除这个成员

    Apache、tomcat、nginx和HTTP状态码

    一、 apache的工作模式

    prefork:一个管理进程 多个工作进程 每个工作进程维持一个线程每个线程维持一个连接

    worker:一个管理进程 多个工作进程 每个工作进程维持多个线程每个线程维持一个连接

    二http动态返回码

    403(禁止)服务器拒绝请求。可能是您的服务器或主机拒绝Googlebot 访问

    404(未找到)服务器找不到请求的网页。 例如,如果请求服务器上不存在的网页,服务器通常会返回此代码

    502(错误网关)服务器充当网关或代理,从上游服务器收到无效响应

    504(网关超时)服务器充当网关或代理,但没有及时从上游服务器收到请求

    503(服务不可用)服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态

    400(错误请求)服务器不理解请求的语法

    401(未授权)请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应

    二、 nginx常用的模块

    proxy_pass http://192.168.1.3:80; 反向代理
    
    rewrite ^(.*)$ https://$host$1 permanent; 地址跳转
    
    可以前端Nginx后端apache  也可以前端Nginx后端Tomcat  还可以前端 Nginx,后端 Nginx 具体怎么做修改主配置文件声明区域
    
    http_upstream_module:负载均衡模块,用来对后台任务的调度及分配,常见模式Nginx+apache nginx+tomcat
    
    http_ssl_module:实现服务器加密传输的模块部署完成后可以使用httpds协议进行数据
    
    输,保证数据的安全
    
    nginx是如何连接PHP进行页面解析的:
    
    nginx支持fastCGI功能(默认支持) PHP编译时开启FPM服务(编译的时候指定)在nginx配置文件中添加匹配规则(匹配后缀为.php)
    
    nginx和Tomcat之间的数据传输过程:如果是静态的nginx就会自动返回数据 如果是动态的就反向代理到tomcat拿取数据返回
    

    三、 web服务器Nginx的功能与作用

    反向代理的作用真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已
    
    proxy_pass http://localhost:8080;
    
    proxy_set_header Host $host:$server_port;
    
    负载均衡:就是分摊到多个操作单元上进行执行,比如web服务、FTP服务等共同完成任务。是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略。
    
    RR
    
      upstream test {  负载均衡区域
    
    ​     server localhost:8080;
    
       server localhost:8081;
    
     proxy_pass http://test;  反向代理区域
    
    权重:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况
    
    upstream test {
    
       server localhost:8080 weight=9;  9次访问
    
       server localhost:8081 weight=1;  1次访问
    
     }
    
    fair(第三方): 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    
      upstream backend { 
    
    ​    fair; 
    
    ​    server localhost:8080;
    
    ​    server localhost:8081;
    
    }
    
    url_hash第三方:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效
    
       upstream backend { 
    
    ​    hash $request_uri; 
    
    ​    hash_method crc32; 
    
    ​     server localhost:8080;
    
    ​      server localhost:8081;
    
    }
    

    四、 HTTP服务器

    1、nginx本身也是静态资源服务器,当只有静态资源的时候可以使用Nginx来做服务器,可以使用动静分离nginx也可以实现。

    server {
    
       listen   80;                            
    
       server_name localhost;                       
    
    ​    client_max_body_size 1024M;
    
     
    
       location / {
    
    ​       root e:\wwwroot;
    
    ​       index index.html;
    
    ​     }
    
     }
    

    2、正向代理:正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器

    为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理

    当你需要把你的服务器作为代理服务器的时候,可以用Nginx来实现正向代理

    Nginx正向代理不支持https

    resolver_timeout 5s; 正向代理的DNS服务器

    3、如何在不关闭nginx和他进程的情况下重启?

    Killall -s 1 进程名

    Nginx平滑重启:kill -HUP ‘cat /opt/nginx/logs/nginx.pid’

    五、apache的原理及功能作用

    1、acl访问控制基于用户密码的控制方案

    authname "welcome to apahce"
    
    authtype basic
    
    authuserfile /usr/local/apache2/htdocs/a.psd
    
    require valid-user
    

    添加用户与系统用户无关

    /usr/local/apache2/bin/htpasswd -c /usr/local/apache2/htdocs/a.psd zhangsan
    
    /usr/local/apache2/bin/htpasswd -m /usr/local/apache2/htdocs/a.psd lisi
    

    2、基于客户端地址的认证方案允许个别拒绝所有

     
    
    ​       require all granted
    
    ​        require ip xx.xx.xx.xx
    
    
    

    3、虚拟主机功能:基于ip地址的虚拟主机,一个域名多个ip

    4、虚拟主机功能:基于端口的虚拟主机,一个ip多个端口

    5、虚拟主机功能:基于域名的虚拟主机,一个ip可以有多个域名

    6、可以配置HTTPS加密颁发证书

    7、apache的工作模式

    prefork:一个管理进程 多个工作进程 每个工作进程维持一个线程 每个线程维持一个连接

    worker:一个管理进程 多个工作进程 每个工作进程维持多个线程 每个线程维持一个连接

    8、apahce访问慢如何排查解决?

    首先使用top命令查看服务器负载情况高不高、然后查看线程httpd的数量看看是不是到达了连接的最大值 看看是不是人多导致的。 也可以加内存硬件方面

    netstat -ant | grep $ip:80 | wc -l
    

    可以更改apache最大连接数 更改主配置文件

     
    
    ​       StartServers     5
    
    ​       MinSpareServers   5
    
    ​       MaxSpareServers   10
    
    ​       ServerLimit     1500
    
    ​       MaxClients      1000
    
    ​       MaxRequestsPerChild 
    

    八、tomcat的工作原理

    tomcat是由Apache、SUN公司开发而成,由于有了SUN的参与和支持,最新的语言规范总能在Tomcat中得到体现,因为Tomcat技术先进、性能稳定,而且免费,成为目前比较流行的web应用服务器,Tomcat处理静态HTML能力不如Apache服务器,所以一般不使用Tomcat作为web服务,还是会使用apache或nginx作为web服务器

    JDK: JAVA开发工具包,有两个版本,一个是OpenJDK等同于SUNJDK,一个是oracaljdk

    Tomcat有着apache和nginx一样的web网页的功能,tomcat是war包java编写的

    负载均衡集群和高可用集群

    一、 集群算法

    负载调度算法:固定算法(静态调度算法):只根据算法本身去调度,不考虑服务器本身 动态算法(动态调度算法):除了考虑算法本身,还要考虑服务器状态

    二、 LVS负载均衡集群(四层负载、调度器)

    LVS负载均衡集群:三种模式

    1、DR:不支持端口映射 后端主系统必须是 Linux 负载调度器与 RS 处于同一个广播域中,通过 MAC 寻找目标 站数据报文经过 D 进入集群,出站数据报文通过 RS 离开集群

    2、NAT:支持端口映射 后端主机系统应用没有限制 负载调度器工作 C 与 RS 之间,并且 RS 必须将网关指向 D 入站数据报文与出站数据报文全部经过 D 调度器

    3、TUN:D 与 RS 采用 数据包二次封装 实现 D RS 必须拥有公网 IP 或者是能够被公网访问 入站数据报文有 D 接手转发至 RS ,出站由 RS 传输至 C

    访问量非常大,而且后端节点较为稳定(结构) DR 所有模式中压力最小的

    访问较大,而且机器在多个不同的公网中存在,想组成集群 TUN

    访问较大,并且后端比较灵活 NAT

    三、 高可用集群

    高可用集群:HAC 尽可能的保障服务器的可用性heartbeat 或者keepalived

    原理是:心跳检测 可能出现的问题是闹分裂 解决方案是心跳线冗余 实现的方案是heartbeat 或者keepalived

    抢占机制、心跳检测、支持故障自动切换 支持节点健康状态检查 使用的是VRRP协议

    虚拟设备:由一个“主( Master )”设备和多个“备( Backup )"设备组成的一个虚拟网关

    虚拟IP:配置在虚拟设备上的虚拟IP地址一个虚拟设备可以拥有一个或者多个虚拟IP地址

    抢占模式:当 Backup 设备接收到的 VRRP 报文通过分析得出当前 Master 设备的优先级低于 Backup 设备,则 Backup 设备会切换为 Master 设备

    VRRP 一共有三种状态,分别是:初始状态( Initialize )、活动状态( Master )、备份状态( Backup )

    VRRP工作模式:主备备份模式 负载分担模式

    主设备( Master ):负责转发数据报文和周期性向备设备发送 VRRP 协议报文

    备设备( Backup ):不负责转发数据报文,在 Master 设备发生故障的时候会通过选举形式成为新的 Master 设备,该角色会接收来自 Master 设备的 VRRP 报文并加以分析

    数据库以及sql语句

    一、 sql语句增删改查

    1、sql语句:增

    ​ 创建用户:create user 指定的用户名 @ ‘连接用户的方式’ identified by ‘密码’

    ​ 创建数据库:create datebase 要创建的数据库名

    ​ 创建数据表:create table 表名 (id int,name char(30));

    插入数据:insert into 表名 (id,name,age)values (1,‘要加的数据’,23)

    2、sql语句:删

    删除用户:drop user 指定的用户名@‘%’;

    删除数据库:drop databese 数据库名;

    删除数据表:drop table 表名;

    删除数据:delete from 表名 where 要删除的内容

    ​ delete from 表名 age between 23 and 25 删除23-25之间的

    3、sql语句:改

    修改数据表中的数据:update 表名 set age=21 where id=3 把3的年龄改为21 修改数据表的名称:alter table 表名 rename 要改的名;

    修改数据表的字段类型:alter table 表名 modify name char(50));

    修改数据表的字段类型:alter table 表名 change name username char(50)not null default ‘’;

    添加删除字段:alter table 表名 add time datetime 增加

    ​ alter table 表名 drop time 删除

    4、sql语句:查

    查看所有数据库:show databases;

    查看指定库内所有数据表:show tables;

    查看指定数据表的字段结构:describe 表名

    查看所有Mysql用户密码登录方式:select user,password,host from mysql.user;

    5、 sql语句授权

    授予用户全部权限grant all on 库.表 to 用户@‘%’ 远程方式登录 授权对指定库所有权限

    给存在的用户授权 创建用户并授权:grant all on 库.表 to 用户@‘@’identfied by ‘密码’

    取消用户授权删除库表 表里数据的权限:revoke drop,delete on 库.表 from 用户@‘%’;

    查看指定用户的授权:show grants for 用户@‘%’;

    6、 sql语句启动关闭

    service mysqld start service mysqld stop

    /etc/init.d/mysqld start /etc/init.d/mysqld stop

    mysqld_safe & 源码包 mysqladmin -uroot -p123 shotdown

    7.修改密码

    set password=password(“123456”); 修改普通用户密码

    set password=password(“123456”);修改管理员密码

    update mysql.user set password=password(“123”) where user=‘root’; 登录 mysql 使用命令修改密码

    查看指定用户的授权 show grants for 用户@‘%’;

    8.如何把mysql用户最大连接数统计出来?

    “show variables like ‘%max_connections%’” 查看

    “MySQL> set global max_connections=1000” 修改最大连接数

    二、 mysql主从原理以及引擎和主键外键

    开启主服务bin-log日志记录功能,将主服务器的bin-log日志传到从服务器

    从服务器根据日志内容将数据还原到本地,从服务器主动把主服务器的数据同步到本地

    第一步:从服务器 发起连接 主服务器 传输对应的同步信息 user passwd ip pos_file pos-size IO 线程的对接 验证 pos 值偏移位

    第二步:主服务器验证主机偏移位 如果出现偏移,主服务器将偏移数据推送至 从服务器,推送完毕后进入休眠状态

    第三步:从服务器获取中继日志完成后,从服务器的 IO 线程进入休眠,并且唤醒从服务器的 SQL 线程,SQL 将中继日志运行得到对应数据

    如果以后再出现新的对数据结构发生改变的 SQL 语句,主服务端主动唤醒从服务器端的 IO 线程,传递数据,后边步骤同理

    SQL 线程:将中继日志转储数据 I/O 线程:传输二进制日志 从服务器的随机端口连接至主服务器的 3306 端口

    mysql主从服务器:从服务器主动把主服务器上的数据同步到本地(备份)

    ​ 从服务器分摊主服务器的查询压力)(负载均衡)

    什么是索引:索引本身是数据结构排好序的快速查找数据结构,可以提高查找效率数据分身 快速查找 快速的定位查询内容速度

    什么是主键:唯一标识一条记录,不能有重复,不允许为空,用来保证数据完整性,主键只能有一个,自增自减

    ​ 数据库主键,指的是一个或多列的组合。其值能唯一的表示表中的每一行,通过他可强制表的实体完整性,主键主要用于其他表的外键关联,以及本记录的修改和删除。

    什么是外键:表的外键是另一个表的主键,外键可以有重复的,可以是空值,用来和其他表建立联系用的,一个表可以有多个外键

    数据库引擎:

    InnoDB存储引擎:支持事务安全表、支持行锁定和外键、支持外键完整性约束

    MyISAM存储引擎:拥有较高的插入、查询速度,但不支持事物、每个MyISAM表最大索引数是64、最大的键长度是1000字节、可以通过编译来改变、可以把数据文件和索引文件放在不同目录

    MEMORY存储引擎:将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。

    优化sql语句的一般步骤:

    通过show status 命令了解各种SQL的执行效率

    可以根据需要加上参数来显示session级(当前连接,默认)和global级(自数据库上次启动至今)的统计结果

    通过explain 或 desc分析低效SQL的执行计划

    通过show profile 分析SQL。

    SQL语句分类:DML:数据操作语言 DDL:数据描述语言 DCL:数据控制语言

    一般查询日志 二进制日志 慢查询日志

    面试过程遇到的问题二

    1、 Nginx和apache的区别是什么?

    两者最核心的区别在于:Apache是同步多进程模型,一个连接对应一个进程, 而Nginx是异步的,多个连接(万级别)可以对应一个进程。

    Apache:同步阻塞型应用 nginx:异步阻塞型应用

    Nginx静态处理性能要比apache好,配置文件简单,模块多样化,他本身也是一个反 向代理服务器和负载调度服务器属于是七层负载。

    apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向

    2、 Nginx高并发如何解决?

    nginx是异步非阻塞型应用,如果一个server采用一个进程负责一个request的方式,那么进程数就是并发数。正常情况下,会有很多进程一直在等待中。

    而nginx采用一个master进程,多个woker进程的模式。

    master进程主要负责收集、分发请求。每当一个请求过来时,master就拉起一个worker进程负责处理这个请求。

    同时master进程也负责监控woker的状态,保证高可靠性

    woker进程一般设置为跟cpu核心数一致。nginx的woker进程在同一时间可以处理的请求数只受内存限制,可以处理多个请求。

    Nginx 的异步非阻塞工作方式正把当中的等待时间利用起来了。在需要等待的时候,这些进程就空闲出来待命了,因此表现为少数几个进程就解决了大量的并发问题。

    3、 系统负载过高该如何解决,你的排查思路是什么?

    如果是系统负载过高可以查看cpu、内存、load,比如僵尸进程和没有用的服务占用,可以使用top、htop、iostat、ps aux来进行查看,可以关掉一些没有用的服务,是否有僵尸进程有的话给他杀掉。

    使用vmstat 查看系统纬度的 CPU 负载;
    使用 top 查看进程纬度的 CPU 负载;

    4、 Top命令里cpu的各项参数的意思是什么

    total 为进程总数

    running 正在运行的进程数

    sleeping 睡眠的进程数

    stopped 停止的进程数

    zombie 僵尸进程数

    Cpu(s): 0.3%us, 0.6%sy, 这个为用户空间和内核空间所占cpu百分比

    0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比

    99.1%id 空闲CPU百分比

    0.0 wa 等待输入输出的CPU时间百分比

    0.0 hi 硬中断(Hardware IRQ)占用CPU的百分比

    0.0 si 软中断(Software Interrupts)占用CPU的百分比

    5、 Docker如何启动一个容器,和如何将一个端口暴露在外面?

    例如容器内部的端口是8080,可以映射到宿主机8080或者8081,通过命令即可实现

    docker run -itd -p 8080:8080 dockercentos /bin/bash

    6、 Free -h 查看内存信息,里面的内容是什么?

    total: 内存总数

    used: 已经使用内存数

    free: 完全空闲内存

    shared: 多个进程共享的内存

    buffers: 用于块设备数据缓冲,记录文件系统metadata(目录,权限,属性等)

    cached: 用于文件内容的缓冲

    available:真正剩余的可被程序应用的内存数

    7、 LVS负载均衡是如何实现的?

    LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

    ipvs:一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。

    ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器

    (1) 首先,客户端向调度器(Director Server)发起一个请求,调度器将这个请求发送至内核

    (2) PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链。

    (3)当请求达到INPUT链上,调度器判断报文中的目标端口来确定这个访问是不是要访问集群服务(因为还有可能只是ssh想单纯的远程登录主机这个主机),如果是访问的集群服务,那么就会强制修改这个包的目标IP

    (4) POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

    8、 在使用K8S过程中遇到过什么问题你是如何解决的?

    		看实际情况
    

    9、 如何安装一个操作系统流程是什么?

    		百度一下,你就知道
    

    10、 Shell脚本里$? $* $#代表什么?

    $$ 当前shell的进程pid
    
    $! 上一个后台进程的pid
    
    $?  上一个命令的返回值
    
    $*  代表所有的参数位置,而且视为一个字符串
    
    $@  代表所有的参数位置,但是代表各位置参数组成的串行
    
    $# 参数的个数
    
    $0  shell本身的文件名
    

    11、docker和K8S的区别是什么?

    k8s****是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能

    Docker****是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化

    12、TCP长连接短连接区别,三次握手四次挥手?

    长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持(不发生RST包和四次挥手)。

    连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接(一个TCP连接通道多个读写通信);

    短连接

    短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接(管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段);

    连接→数据传输→关闭连接

    这就要求长连接在没有数据通信时,定时发送数据包(心跳),以维持连接状态;

    13、 如何使用sed命令将一个文件里注释的内容全部取消注释?

    sed '/#/'d

    14、 K8S的master节点的服务有哪些和他的组件都有什么?

    答:K8S集群由master和node节点两部分组成

    Master节点主要包括API Server、Scheduler、Controller manager、etcd几大组件

    API Server提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接和etcd进行交互。

    Scheduler负责对集群内部的资源进行调度,相当于调度室

    controller-manager 作为 k8s 集群的管理控制中心,负责集群内 Node、Namespace、Service、Token、Replication 等资源对象的管理,使集群内的资源对象维持在预期的工作状态

    etcd在kubernetes集群是用来存放数据并通知变动的

    node节点

    kubelet 组件通过 api-server 提供的接口监测到 kube-scheduler 产生的 pod 绑定事件,然后从 etcd 获取 pod 清单,下载镜像并启动容器

    首先k8s 里所有资源都存在 etcd 中,各个组件通过 apiserver 的接口进行访问etcd来获取资源信息

    kube-proxy 会作为 daemon(守护进程) 跑在每个节点上通过watch的方式监控着etcd中关于Pod的最新状态信息,它一旦检查到一个Pod资源被删除了或新建或ip变化了等一系列变动,它就立即将这些变动,反应在iptables 或 ipvs规则中,以便之后 再有请求发到service时,service可以通过ipvs最新的规则将请求的分发到pod上

    15、 K8S的部署流程是什么?

    部署流程:K8S集群安装

    修改IP地址主机和host解析

    Master节点安装etcd

    Master节点安装kubernetes

    Node节点安装kubernetes

    所有节点配置flannel网络

    配置master为镜像仓库

    16、 Prometheus是如何监控数据的?

    答:prometheus的组件和功能就可以。

    17、 如何有一个web页面访问过慢你该如何解决?

    答:看进程、访问量、cpu、内存、数据目录、HTTP动态返回码、日志。

    18、 服务器的bond是什么,有什么作用?

    所谓bond,就是把多个物理网卡绑定成一个逻辑上的网卡,使用同一个IP工作,在增加带宽的同时也可以提高冗余性,一般使用较多的就是来提高冗余,分别和不同交换机相连,提高可靠性,但有时服务器带宽不够了也可以用作增加带宽

    网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6。 常用的有三种:

    mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。

    mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。

    mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。

    重点:所谓bond,就是把多个物理网卡绑定成一个逻辑上的网卡

    好处:增加带宽,还可以实现主备功能

    20、路由器和交换机的原理是什么?

    路由器是不同的局域网之间通信,可以动态获取也可以静态配置。

    交换机是同一物理局域网之间通信。

    你可能感兴趣的:(K8S,openstack,linux,负载均衡,nginx,docker,运维)