答:ps aux、Top、htop、netstat、free内存、uptime查看系统负载、
lsmod内核模块、lscpu查看CPU信息、iostat监控系统设备的IO负载情况。
答:cat、less、head、tail、diff比较、sort排序、uniq删除重复、fire、find
Cut、wc、awk、grep、sed等
答: Df、fdisk、gdisk、parted、mount、umount、lsblk列出所有可以块设备信息
Blkid列出系统名称和设备UUID等数据、partprobe可以使kernel读取分区表。
Mkfs对硬盘分区格式化、fsck对文件系统检测
Fdisk和parted的区别?
Fdisk只支持msdos(MBR)、parted支持MBR和gpt
答:避免直接使用root用户、配置国内yum源、配置时间同步服务器
配置系统同时打开文件最大数:/etc/sysctl.com配置文件添加fs:fike-max的值
然后sysctl -p 刷新 cat /etc/proc/sys/fs/file-max查看
Selinux上下文、更改ssh端口和配置秘钥
答:/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的性能存储数据。
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
卷组命令:一般维护命令
vgscan #检测系统中所有磁盘
vgck [卷组名] #用于检查卷组中卷组描述区域信息的一致性。
vgdisplay [卷组名] #显示卷组的属性信息
vgrename 原卷组名 新卷组名
vgchange -a y|n [卷组名] #改变卷组的相应属性。是否可分配
vgchange -l 最大逻辑卷数 #卷组可容纳最大逻辑卷数
vgchange -x y|n [卷组名] #卷是否有效
vgmknodes [卷组名|卷组路径] #用于建立(重新建立)已有卷组目录和其中的设备文件卷组配置的备份与恢复命令
vgcfgbackup [卷组名] #把卷组中的VGDA信息备份到“/etc/lvmconf”目录中的文件
vgcfgrestore -n 卷组名 物理卷全路命名 #从备份文件中必得指定物理卷的信息卷组的建立与删除命令
vgcreate 卷组名 物理卷全路径名[物理卷全路径名]
vgmove 卷组名
卷组的扩充与缩小命令
vgextend 卷组名 物理卷全路径名[物理卷全路径名]
vgreduce 卷组名 物理卷全路径名[物理卷全路径名] 卷组的合并与拆分
vgmerge 目的卷组名 源卷组名 #合并两个已经存在的卷组,要求两个卷组的物理区域大小相等且源卷组是非活动的。
vgsplit 现有卷组 新卷组 物理卷全路径名[物理卷全路径名] 卷组的输入与输出命令
vgexport 卷组名
vgimport 卷组名 卷组中的物理卷[卷组中的物理卷]
逻辑卷命令
lvscan
lvdisplay 逻辑卷全路径名[逻辑卷全路径名]
lvrename 旧逻辑卷全路径名 新逻辑卷全路径名
lvrename 卷组名 旧逻辑卷名 新逻辑卷名
lvchange
e2fsadm -L +|- 逻辑卷增减量 逻辑卷全路径名
逻辑卷的创建与删除命令
lvcreate
lvremove
逻辑卷的扩充与缩小命令
lvextend -L|--size +逻辑卷大小增量 逻辑卷全路径名
lvreduce q -L|--size +逻辑卷减小量 逻辑卷全路径名
逻辑卷管理命令
lvmdiskscan #检测所有的SCSI、IDE等存储设备
lvmchange -R|--reset #复位逻辑卷管理器
lvmsadc [日志文件全路径名] #收信逻辑卷管理器读写统计信息,保存到日志文件中。
lvmsar 日志文件全路径名 #从lvmsadc命令生成的日志文件中读取并报告逻辑卷管理器的读写统计信息。
关闭ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1
开启恶意icmp错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses = 1
关闭路由转发
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
处理无源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
关闭sysrq功能
kernel.sysrq = 0
core文件名中添加pid作为扩展名
kernel.core_uses_pid = 1
开启SYN洪水攻击保护
net.ipv4.tcp_syncookies = 1
修改消息队列长度
kernel.msgmnb = 65536
kernel.msgmax = 65536
设置最大内存共享段大小bytes
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
timewait的数量,默认180000
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 262144
限制仅仅是为了防止简单的DoS 攻击
net.ipv4.tcp_max_orphans = 3276800
未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
内核放弃建立连接之前发送SYNACK 包的数量
net.ipv4.tcp_synack_retries = 1
内核放弃建立连接之前发送SYN 包的数量
net.ipv4.tcp_syn_retries = 1
启用timewait 快速回收
net.ipv4.tcp_tw_recycle = 1
开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时
net.ipv4.tcp_keepalive_time = 30
允许系统打开的端口范围
net.ipv4.ip_local_port_range = 1024 65000
修改防火墙表大小,默认65536
#net.netfilter.nf_conntrack_max=655350
\#net.netfilter.nf_conntrack_tcp_timeout_established=1200
确保无人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
允许PING设置
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
禁止PING设置 iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
答:DNS有正向解析反向解析,递归和迭代。
**递归**:客户端先找本地hosts文件,如果有就返回没有就下一步,然后查看本地缓存,是否有本条目缓存,有则返回,然后将请求发给指向的DNS服务器,查看域名是否本地解析是则本地解析返回,否则下一步,本地DNS服务器首先找缓存有则返回否则下一步。
**迭代**:向13个根域发起DNS请求,知道找到域为止,本地DNS收到后返回给客户机
答:智能DNS就是将用户发起的查询进行判断出是哪个运营商的用户查询,然后
将请求转发给相应的运营商IP处理,减少跨运营访问的时间,提高访问速度
答:静态路由(static),动态路由(DHCP)
DHCP租约四部曲:
客户机请求IP(客户机发DHCPDISOVER广播包)
服务器响应(服务器发DHCPpffer广播包)
客户机选择IP(客户机发DHCPREQUERST广播包)
服务器确定租约(服务器发DHCPACK/DHCPNAK广播包
答:应用、表示、会话、传输、网络、数据链路、物理层
应用层:给用户提供操作界面
表示层:数据表示的意思,二进制表示,加密 压缩
会话层:确定数据是否进行网络传递
传输层:TCP传输控制协议(面向连接的),UDP用户数据报文协议(面向无连接的)
网络层:ip地址编址,路由选择,静态路由和动态路由 icmp igmp arp rarp
数据链路层:mac地址编址 mac地址寻址 差错校验
TCP/IP四层网络模型:应用、传输、网络、数据链路
TCP/IP五层网络模型:应用、传输、网络、数据链路、物理
三次握手:
第一次客户端发送syn=1,seq=x 发给服务端请求连接
第二次服务端发送syn=1,ACK=1,seq=y,ack=x+1返回给客户端可以进行连接
第三次客户端收到服务端的回应后发送ACK=1,seq=x+1,ack=y+1此时连接已经建立,此时客户端与服务器之间可以传输数据
四次挥手
第一次:客户端发送FIN=1,seq=u,请求与服务端断开连接
第二次:服务端发送ack=u+1,ACK=1,seq=V返给客户端确认可以断开连接
第三次:在服务端没有要发送的数据时向客户端发送FIN = 1, ACK = 1, seq = w, ack= u+1与客户端断开连接,
第四次:客户端收到断开连接请求后在次向服务端发出ACK=1,seq=u+1,ack=w+再次确认断开连接
六、 TCP和UDP的区别
答:TCP是传输控制协议,有三次握手四次挥手机制,是加密的,其特点是传输稳定安全,缺点是传输速率慢,它是有连接的协议
UDP是用户数据报文协议,是无连接的,明文传输,其优点是传输速度快,缺点是不安全容易丢包丢失数据,在多媒体使用UDP协议居多
短连接:连接->传输数据->关闭连接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束后就中断连接。短连接是指SOCKET连接后发送后接收完数据后马上断开连接
长连接:连接->传输数据->保持连接->传输数据->....->关闭连接
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差
http超文本传输协议,http是面向应用层协议。客户端发给服务的为请求协议,服务端发给客户端的是响应协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
特点:简单快速、灵活HTTP允许传输任意类型的数据对象。
无连接:限制每次连接只处理一个请求,处理完客户端的请求并收到响应后,立即断开连接**
无状态:HTTP是无状态协议指的是对于事物没有记忆能力,导致每次连接传送的数据量增大。**
持B/S和C/S模式**
传输信息安全性不同:HTTP超文本传输协议,明文传输,容易被攻击窃取信息。**
https具有SSL加密传输协议,为浏览器到服务器之间的通信加密确保数据传输
连接方式不同:http连接简单是无状态的
https****是由ssl+http协议构建的可以进行加密传输身份认证的网络协议。
端口不同http80 https443、申请证书的方式不同。
http80 https443** [FTP20/21](ftp://FTP20/21) **telnet****远程登录23 ssh22(scp)**
**SMTP25****邮件 tomcat8080 oracle1521 mysql3306 DNS端口**
openstack是一个开源的云计算管理平台,由几个重要的组件结合起来完成工作。
openstack主要有两个模块:Nova和Swift,nova是虚拟服务器部署和计算模块,swift是分布式云存储模块,两个可以一起使用也可以分开使用。
整个openstack是由控制节点、网络节点、计算节点、存储节点组成的,可以复也可以进行单机部署。
Keystone**:认证管理服务,提供所有组件的认证信息令牌管理、创建和修改,使用mysql数据库存储 认证信息。
**glance**:镜像管理服务,提供了对虚机部署的时候提供镜像的管理导入和格式以及制作相应的模板。
**nova**:计算管理服务,提供了对计算节点的nova管理、使用nova-api进行通信。
**neutron**:网络管理服务,提供了网络节点的网络拓扑管理,同时提供neutron在horizon的管理界面
**horizon**:控制台服务,提供了以web形式对所有节点的所有服务的管理,把该服务成为dashboard
扩展的组件:
Cinder**:提供管理存储节点的Cinder相关、同时提供Cinder在Horizon中的管理面板
**Swift**:提供管理存储节点Swift相关、同时提供Swift在Horizon中的管理面板
**Trove**:提供管理数据库节点的Trove先关、同时提供Trove在Horizon中的管理面板
**Heat**:提供了基于模板来实现云环境中的资源的初始化,依赖关系处理,部署等基本操作,也可以 解决自动收缩、负 载均衡等高级特性。
**Centimeter**:提供对物理资源以及虚拟资源的监控,并记录这些书库,读数据进行分析,在一定条件下出发现货供应动 作控制节点通常来说只需要一个网络端口来用于通信和管理各个节点。
控制节点**:负责对其余节点的控制,包括虚机创建、迁移、网络分配、存储分配等
其中的服务包括:**Keystone****、****glance****、****nova****、****neutron****、****horizon****。**
**计算节点**:负责虚拟机的运行,他的服务有三个Nova、Neutron、Telemter三个服务。
nova:提供虚拟机的创建】运行、迁移、快照等围绕虚拟机的服务、并提供API与控制 节点对接由控 制节点下发任务
neutron:提供计算节点与网络节点之间的通信
拓展服务:telmeter提供计算节点监控代理,将虚拟机的情况反馈到控制节点,是 centimeter的代理 服务。
**网络节点**:是负责外部与内部网络之间的通信。
**Neutron**:负责管理私有网络与公有网络的通信,以及管理虚拟机网络之间通 信/拓扑、管理虚拟机之 上的防火墙等等。
网络节点包含三个网络端口
端口1:用于与控制节点进行通信
端口2:用于除了控制节点之外的计算/存储节点之间的通信
端口3:用于外部的虚拟机与相应的网络之间通信
存储节点:负责对虚拟机的额外存储管理**
***\*Cinder\****:块存储服务,提供相应的块才能出,简单来说,就是虚拟出一块存盘,可以挂载到相应的虚拟机之上,不收文件系统的影响,对虚拟机来说,这个操作像是加了一块硬盘,可以完成对磁盘的任何操作,包括挂载、卸载、格式化,转换文件系统等等操作,大多应用于虚拟机空间不足的情况下的空间扩容等。
1、nova组件的功能和服务:生命周期管理、计算资源管理、向外提供rest风格的api
Nova-api:位于表示层、用于接受外部请求
rabbitMQ:消息队列服务
nova-comoute:运算工作站负责虚拟机的创建和分配
nova-network:网络控制器
nova-volume:卷管理
nova-scheduler:调度如何选择哪个主机创建VM
2、glance的功能和服务
glance-api:主要负责接收相应镜像管理命令的Resrful请求,分析消息请求并分发所带的命令比如新增 删除更新等,默认绑定端口是9292
**glance-registry**:主要负责接收响应镜像元数据命令的Restful请求,分析消息请求并分发其所带的命令,比如获取元数据更新元数据等。more绑定的端口是9191
3、 keystone的功能和服务。
keystone采用两种授权方式,一种是基于用户名和密码,另一种是基于令牌(token)
除此之外keystone还提供三种服务
令牌服务:含有授权用户的授权信息
目录服务:含有用户合法操作的可用服务列表
策略服务:利用keystone具体指定用户或群组某些访问权限
4、 Neutron服务组件
neutron-server:接收和路由API 请求到OpenStack中的网络plug-in
5、 horizon相当于一个仪表盘,以web的方式展现。
6、 cinder是openstack Block Storage服务,用于为nova虚拟机,lronic裸机主机,容器等提供卷
7、 Swift是openstack提供的一种分布式持续虚拟对象存储它类似于的s3简单存储服务。
1.登录界面或命令行通过RESTful API向keystone获取认证信息。
2.keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
3.界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
4.nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
5.keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
6.通过认证后nova-api和数据库通讯。
7.初始化新建虚拟机的数据库记录。
8.nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
9.nova-scheduler进程侦听消息队列,获取nova-api的请求。
10.nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。
11.对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
12.nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。
13.nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
14.nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。(Flavor)
15.nova-conductor从消息队队列中拿到nova-compute请求消息。
16.nova-conductor根据消息查询虚拟机对应的信息。
17.nova-conductor从数据库中获得虚拟机对应信息。
18.nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
19.nova-compute从对应的消息队列中获取虚拟机信息消息。
20.nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
21.glance-api向keystone认证token是否有效,并返回验证结果。
22.token验证通过,nova-compute获得虚拟机镜像信息(URL)。
23.nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
24.neutron-server向keystone认证token是否有效,并返回验证结果。
25.token验证通过,nova-compute获得虚拟机网络信息。
26.nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
27.cinder-api向keystone认证token是否有效,并返回验证结果。
28.token验证通过,nova-compute获得虚拟机持久化存储信息。
29.nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。
答:k8s集群由两部分组成master节点和node节点。
API Server:提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server 查询或修改数据,只有API Server才直接和etcd进行交互。是K8S里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进程。
Controller manager:作为 k8s 集群的管理控制中心,负责集群内 Node、Namespace、Service、Token、Replication 等资源对象的管理,使集群内的资源对象维持在预期的工作状态。
Scheduler:负责对集群内部的资源进行调度,相当于“调度室”。
Scheduler负责节点资源管理,接收来自kube-apiserver创建Pods的任务,收到任务后它会检索出所有符合该Pod要求的Node节点(通过预选策略和优选策略),开始执行Pod调度逻辑。调度成功后将Pod绑定到目标节点上(node)。
Etcd:K8S里的所有资源对象以及状态的数据都被保存在etcd中。
K8s中没有用到数据库,它把关键数据都存放在etcd中,这使k8s的整体结构变得非常简单。在k8s中,数据是随时发生变化的,比如说用户提交了新任务、增加了新的Node、Node宕机了、容器死掉了等等,都会触发状态数据的变更。状态数据变更之后呢,Master上的kube-scheduler和kube-controller-manager,就会重新安排工作,它们的工作安排结果也是数据。这些变化,都需要及时地通知给每一个组件。etcd有一个特别好用的特性,可以调用它的api监听其中的数据,一旦数据发生变化了,就会收到通知。有了这个特性之后,k8s中的每个组件只需要监听etcd中数据,就可以知道自己应该做什么。kube-scheduler和kube-controller-manager呢,也只需要把最新的工作安排写入到etcd中就可以了不用自己费心去逐个通知了
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上
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
k8s是一个开源的容器集群管理系统**,可以实现容器集群的自动化部署、自动扩缩容、 维护等功能。
**Docker是一个开源的应用容器引擎**,开发者可以打包他们的应用及依赖到一个可移植 的容器中,发布到流行的Linux机器上,也可实现虚拟化。
1. 使用kubeadmin通过离线镜像的方式,
2. 通过厂商集成的方式如:rancher。
3. 直接使用类似阿里云这样的公有云平台k8s 。只要有钱,一键搞定
4. 通过yum官方仓库安装,需要启用extras仓库。
不过里面版本都比较老,目前最新的也只是1.5.2版本,对于想学新的东西,比如k8s角色管理、helm等来说不太方便,因此也不建议使用。
5. 通过二进制包的形式进行安装。
使用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组件
自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。
弹性伸缩: 通过监控容器的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集群安装
修改IP地址主机和host解析
Master节点安装etcd
Master节点安装kubernetes
Node节点安装kubernetes
所有节点配置flannel网络
配置master为镜像仓库
答:Docker 是一个开源的应用容器引擎,基于 [Go 语言](https://www.runoob.com/go/go-tutorial.html) 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
镜像、仓库、容器
容器的三要素:镜像:封装的运行环境 仓库:存储镜像 hub.docker.com 容器:正在运行的运行环境或者是曾经运行过的运行环境
镜像的分层:Docker 的镜像通过联合文件系统 将各层文件系统叠加在一起
docker语法 yaml语法 和image语法
bridge**:桥接模式:当Docker服务启动时,会在主机上创建一个名为docker0的虚拟网桥,并选择一个和宿主机不同的IP地址和子网分配给docker0网桥
**host**:主机模式:该模式下容器是不会拥有自己的ip地址,而是使用宿主机的ip地址和端口。这种模式的好处就是网络性能比桥接模式的好。缺点就是会占用宿主机的端口,网络的隔离性不太好
**none**:无网络模式:none模式没有IP地址,无法连接外网,等于就是断网的状态,作用就是用于测试,生产环境一般不会用到这种
常见的隔离方式:网络化配置 隔离机制:写时复制 cgroup机制
已有的分层只能读不能修改 上层镜像优先级大于底层镜像
限制参数 默认情况下,如果不对容器做任何限制,容器能够占用当前系统中的所有 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 将所管理的容器分为三层,分别是工程(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 信号来停止指定服务的容器
数据卷是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器。
特性: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不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷可能会占据很多空间,所以要及时删除
Kill参数:SIGHUP启动被终止的程序,可让该进程重新读取自己的配置文件,类似于重新启动
SIGINT相当于用键盘输入ctrl+c来中断一个程序的进行
SIGKLL强行中断一个程序的进行,如果程序进行到一半,尚未完成的部分可能会出现半产品情况。不完全
SIGTERM以正常的方式来终止该程序。由于是正常的终止,所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时,输入这个 signal 也是没有用的。
SIGSTOP相当于键盘输入ctrl+z来暂停一个程序的进行
信号:信号是进程间通信的形式、一个信号就是内核发送给进程的一个信息、
当一个信号被发送给一个进程后,进程会立即中断当前的执行流并开始执行信号
的处理程序、如果没有为这个信号指定处理程序,就执行默认的处理程序。
比如为了能让程序优雅的退出(接到退出的请求后能够对资源进行清理)一般程
序都会处理 SIGTERM 信号、与 SIGTERM 信号不同,SIGKILL 信号会粗暴的结
束一个进程。
Namespace:隔离技术的第一层,确保 Docker 容器内的进程看不到也影响不到 Docker 外部的进程。
Control Groups:LXC 技术的关键组件,用于进行运行时的资源限制
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 容器运行时的实现,它是一个命令行工具,可以直接用来创建和运行容器。
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参数
NameSpace 名称空间 chroot给容器提供伪根机制 cgroup进程级别的资源限制
UFS联合文件系统,提供镜像读写层挂载点之间的关联
Iptables SNAT进 DNAT出 网桥软件级别的交换机 LXC linux容器技术容器级别的隔离机制
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 run -p 80:80
docker run -itd -p 8080:8080 dockercentos /bin/bash
docker stop $(docker ps -a -q) 停掉所有的容器
docker rm $(docker ps -aq) 删除所有的容器
Vmwore:在宿主机器操作系统的基础上创建的从操作系统,需要几个相互隔离的应用,就需要启动几个虚拟机,会消耗大量CPU和内存。
Docker:docker守护进程取代了VMware中的从操作系统。它是运行在操作系统上的后台进程,用于管理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显示所有容器信息
1、 NFS:它允许网络中的计算机之间通过 TCP/IP 网络共享资源 它就是是可以透过网络,让不同的主机、不同的操作系统可以共享存储
原理:NFS 在文件传送或信息传送过程中依赖于 RPC 协议
开启流程:启动RPC服务 启动NFS服务向RPC注册 客户端请求NFS服务 RPC把客户端和ip地址发给客户端 客户端与服务器端连接
分布式文件系统:将一个文件拆分多份,把每一份放在不同的服务器进行存储 如果有一组文件,把组内的每一个文件单独放在不同的服务器进行存储
Master 存储数据的元数据信息 从内存中索引 持久化在本地磁盘
Metalogger 跟 Master 建立连接,实时同步元数据信息
ChunkServer 存储真实数据的部分
默认文件冗余值:2**
1、Master 会尽可能使文件的冗余数目达到期望值
2、如果 chunkserver 数目少于期望值,拿会根据当前主机的最大数进行设置,并且继续满足期望
3、如果副本服务器死亡,Master 会重新挑选新的 Chunserver 进行补充
MFS****适用场景:大规模高并发的线上数据存储及访问(小文件,大文件都适合)**
MFS特性:高可靠性:每一份数据可以设置多个备份(多分数据),并可以存储在不同的主机上
高可扩展性:可以很轻松的通过增加主机的磁盘容量或增加主机数量来动态扩展整个文件系统的存储量
高可容错性:我们可以通过对mfs进行系统设置,实现当数据文件被删除后的一段时间内,依旧存放于主机的回收站中,以备误删除恢复数据
高数据一致性:即使文件被写入、访问时,我们依然可以轻松完成对文件的一致性快照
正向代理 、反向代理、透明代理
如果定义了 acl 但是没有对 acl 做 http access 的设置,默认拒绝
如果定义了 acl 但是没有对 acl 做 http access 的设置 并且 http access deny all 被关闭,那么这个 acl 匹配会根据最后一条的 http access 进行反向操作
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可以监控服务器、路由器、交换机、OS、网络、应用程序、故障监控
Zabbix架构组件:zabbix-server Zabbix-agent Zabbix-web Zabbix-proxy
Zabbix自动发现是基于icmp协议实现的
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 将通过一种或多种方式报警;
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 start ,docker run,docker ps;等,日志查看:docker logs
答:iostat命令,sar命令
答:iperf,sar等
答:因为vim占用内存高,推荐用less
答:nova neutron,cinder,等。nova需要能说出来是管理虚拟化计算的,neutron需要能说出来搞虚拟网络控制的,cinder需要能说出来是搞存储的。
系统版本: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(逻辑卷)创建逻辑卷相关命令。
答:30 3 * * * /usr/bin/rm -rf /tmp/
答:mysql -h 数据库地址 -P 端口号 -u 用户名 -p密码
答:delete from 表名 where 条件
答:完整说出 /etc/sysconfig/network-scripts/ifcfg-eth0
压缩gz包:tar -czvf test.tar.gz test (v可省略,下同)
解压gz包: tar -cxvf test.tar.gz
压缩zip包:zip test.zip test
解压zip包:unzip test.zip
答:把100个不同ip写入ip.txt文件里(文件名不限制),每个ip一行,然后执行下面命令
for ip in cat ip.txt
; do ping $ip >> ping.txt ; done (for后面的ip变量名称不限制)
主动模式是agent主动采集,返回给server。不需要server进行分析,减轻server的眼里。server向agent拉取数据
答:luna,coco,jumpserver等
代替server收集性能数据,数据汇总给server;需要的
返回值,文件名,所有参数列表,参数列表。区别是输出的括号
master和worker。master是信号管理worker。worker是并发量
答:持续集成,持续交付。用于代码部署,上传到gitlib仓库,部署到服务器上
答:docker commit 命令
用一个正则,传递多个内容,通过管道符分割
namespace:Linux命名空间,实现进程间信息的独立与隔离需要在操作系统内核层面进行实现的
Mount Namespaces:挂载命名空间,用于隔离挂载目录
UTS Namespaces:UTS命名空间,用于隔离主机及网络域等信息
IPC Namespaces:用于隔离进程之间的调用,也就是隔离进程之间的通信
PID Namespaces:进程命名空间,用于隔离进程的运行信息
Network Namespaces:网络命名空间,用于隔离网络配置和访问
cgroups(Control groups)实现了对资源的配额和度量
资源限制(Resource Limitation)
优先级分配(Prioritization
资源统计(Accounting)
进程控制(Control)
答:/var/log/dmesg
PMItool是一个用于管理和配置,支持智能平台管理接口(IPMI)1.5版和2.0版规范的设备的实用程序。 IPMI是一个开放的标准,监控,记录,回收,库存和硬件实现独立于主CPU,BIOS,以及操作系统的控制权。起到监控作用。
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
第一种inner join:用inner join连接两张表,结果返回两边完全匹配的记录,也就是最多返回3条记录
第二种left join:用left join连接两张表,结果以左边的表为主,也就是返回左表所有的行,也就是5条记录
第三种right join: 以右表为主,结果3条记录
第四种full join:只要有一个表存在匹配,就返回行,也就是最多返回8条记录(两表条件完全不匹配时)
触发器是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或 DELETE。触发器可以查 询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过 指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它
哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从 而监控运行的多个Redis实例
作用:通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器
当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机
故障切换(failover)的过程:假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,但是哨兵1主观的认为主服务器不可用,这个现象成为主观下线,当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线
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、如果指定成员存在于有序集合中,那么移除这个成员
prefork:一个管理进程 多个工作进程 每个工作进程维持一个线程每个线程维持一个连接
worker:一个管理进程 多个工作进程 每个工作进程维持多个线程每个线程维持一个连接
403(禁止)服务器拒绝请求。可能是您的服务器或主机拒绝Googlebot 访问
404(未找到)服务器找不到请求的网页。 例如,如果请求服务器上不存在的网页,服务器通常会返回此代码
502(错误网关)服务器充当网关或代理,从上游服务器收到无效响应
504(网关超时)服务器充当网关或代理,但没有及时从上游服务器收到请求
503(服务不可用)服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态
400(错误请求)服务器不理解请求的语法
401(未授权)请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应
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拿取数据返回
反向代理的作用真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已
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;
}
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’
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加密颁发证书
prefork:一个管理进程 多个工作进程 每个工作进程维持一个线程 每个线程维持一个连接
worker:一个管理进程 多个工作进程 每个工作进程维持多个线程 每个线程维持一个连接
首先使用top命令查看服务器负载情况高不高、然后查看线程httpd的数量看看是不是到达了连接的最大值 看看是不是人多导致的。 也可以加内存硬件方面
netstat -ant | grep $ip:80 | wc -l
可以更改apache最大连接数 更改主配置文件
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 1500
MaxClients 1000
MaxRequestsPerChild
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负载均衡集群:三种模式
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 报文并加以分析
创建用户:create user 指定的用户名 @ ‘连接用户的方式’ identified by ‘密码’
创建数据库:create datebase 要创建的数据库名
创建数据表:create table 表名 (id int,name char(30));
插入数据:insert into 表名 (id,name,age)values (1,‘要加的数据’,23)
删除用户:drop user 指定的用户名@‘%’;
删除数据库:drop databese 数据库名;
删除数据表:drop table 表名;
删除数据:delete from 表名 where 要删除的内容
delete from 表名 age between 23 and 25 删除23-25之间的
修改数据表中的数据: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 删除
查看所有数据库:show databases;
查看指定库内所有数据表:show tables;
查看指定数据表的字段结构:describe 表名
查看所有Mysql用户密码登录方式:select user,password,host from mysql.user;
授予用户全部权限grant all on 库.表 to 用户@‘%’ 远程方式登录 授权对指定库所有权限
给存在的用户授权 创建用户并授权:grant all on 库.表 to 用户@‘@’identfied by ‘密码’
取消用户授权删除库表 表里数据的权限:revoke drop,delete on 库.表 from 用户@‘%’;
查看指定用户的授权:show grants for 用户@‘%’;
service mysqld start service mysqld stop
/etc/init.d/mysqld start /etc/init.d/mysqld stop
mysqld_safe & 源码包 mysqladmin -uroot -p123 shotdown
set password=password(“123456”); 修改普通用户密码
set password=password(“123456”);修改管理员密码
update mysql.user set password=password(“123”) where user=‘root’; 登录 mysql 使用命令修改密码
查看指定用户的授权 show grants for 用户@‘%’;
“show variables like ‘%max_connections%’” 查看
“MySQL> set global max_connections=1000” 修改最大连接数
开启主服务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:数据控制语言
一般查询日志 二进制日志 慢查询日志
两者最核心的区别在于:Apache是同步多进程模型,一个连接对应一个进程, 而Nginx是异步的,多个连接(万级别)可以对应一个进程。
Apache:同步阻塞型应用 nginx:异步阻塞型应用
Nginx静态处理性能要比apache好,配置文件简单,模块多样化,他本身也是一个反 向代理服务器和负载调度服务器属于是七层负载。
apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,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 负载;
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的百分比
例如容器内部的端口是8080,可以映射到宿主机8080或者8081,通过命令即可实现
docker run -itd -p 8080:8080 dockercentos /bin/bash
total: 内存总数
used: 已经使用内存数
free: 完全空闲内存
shared: 多个进程共享的内存
buffers: 用于块设备数据缓冲,记录文件系统metadata(目录,权限,属性等)
cached: 用于文件内容的缓冲
available:真正剩余的可被程序应用的内存数
LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。
ipvs:一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器
(1) 首先,客户端向调度器(Director Server)发起一个请求,调度器将这个请求发送至内核
(2) PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链。
(3)当请求达到INPUT链上,调度器判断报文中的目标端口来确定这个访问是不是要访问集群服务(因为还有可能只是ssh想单纯的远程登录主机这个主机),如果是访问的集群服务,那么就会强制修改这个包的目标IP
(4) POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器
看实际情况
百度一下,你就知道
$$ 当前shell的进程pid
$! 上一个后台进程的pid
$? 上一个命令的返回值
$* 代表所有的参数位置,而且视为一个字符串
$@ 代表所有的参数位置,但是代表各位置参数组成的串行
$# 参数的个数
$0 shell本身的文件名
k8s****是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能
Docker****是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化
长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持(不发生RST包和四次挥手)。
连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接(一个TCP连接通道多个读写通信);
短连接
短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接(管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段);
连接→数据传输→关闭连接
这就要求长连接在没有数据通信时,定时发送数据包(心跳),以维持连接状态;
sed '/#/'d
答: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上
部署流程:K8S集群安装
修改IP地址主机和host解析
Master节点安装etcd
Master节点安装kubernetes
Node节点安装kubernetes
所有节点配置flannel网络
配置master为镜像仓库
答:prometheus的组件和功能就可以。
答:看进程、访问量、cpu、内存、数据目录、HTTP动态返回码、日志。
所谓bond,就是把多个物理网卡绑定成一个逻辑上的网卡,使用同一个IP工作,在增加带宽的同时也可以提高冗余性,一般使用较多的就是来提高冗余,分别和不同交换机相连,提高可靠性,但有时服务器带宽不够了也可以用作增加带宽
网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6。 常用的有三种:
mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。
mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。
重点:所谓bond,就是把多个物理网卡绑定成一个逻辑上的网卡
好处:增加带宽,还可以实现主备功能
路由器是不同的局域网之间通信,可以动态获取也可以静态配置。
交换机是同一物理局域网之间通信。