赞
踩
:::success
协调世界时,又称世界标准时间或世界协调时间,简称UTC(从英文“Coordinated Universal Time”/法文“Temps
Universel Coordonné”而来),是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。
:::
:::success
格林尼治平时(又称格林尼治平均时间或格林尼治标准时间,旧译格林威治标准时间;英语:Greenwich Mean
Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达16分钟。
由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间已经不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC)。
:::
:::success
北京时间,China Standard Time,中国标准时间。在时区划分上,属东八区,比协调世界时早8小时,记为UTC+8。
不过这个CST这个缩写比较纠结的是它可以同时代表四个不同的时间: Central Standard Time (USA) UT-6:00
Central Standard Time (Australia) UT+9:30 China Standard Time UT+8:00
Cuba Standard Time UT-4:00
Java Date使用UTC时间,如 Tue Jan 05 14:28:41 CST 2016 表示China Standard Time UT+8:00 。
:::
:::success
这个命令是systemd的journalctl工具的一部分,用于查询和查看系统日志。
-f选项表示“follow”,它会实时地显示新添加到日志的条目。-u选项后面跟着的是服务的名称。
journalctl -fu 服务名称
:::
:::success
Minio是一个高性能的分布式对象存储系统,用于存储大容量非结构化的数据,如图片、视频、日志文件等。它实现了大部分亚马逊S3云存储服务接口,可以看做是S3的开源版本。Minio的特色在于其简单、轻量级和对开发者的友好性。
NFS是一种分布式文件系统协议,用于在本地操作系统和远程文件系统之间建立桥梁,实现跨平台文件共享。NFS允许用户像访问本地文件一样访问远程文件,无需关心文件的具体存储位置。这使得NFS成为在企业环境中实现文件共享和协作的理想选择。
FTP则是一种基于客户端-服务器的文件传输协议,用于在计算机网络上传输文件。FTP允许用户在客户端和服务器之间建立连接,并通过这个连接上传或下载文件。FTP协议的优点在于其成熟、稳定,且广泛应用于各种操作系统平台。然而,FTP协议的安全性较低,数据传输时通常不加密,可能会被非法获取。
综上所述,Minio主要用于存储大容量非结构化数据,NFS用于实现跨平台文件共享和协作,而FTP则用于在客户端和服务器之间传输文件。这些解决方案各有其优势和适用场景,可以根据具体需求选择合适的方案。
:::
:::success
对于物理服务器的配置,我了解到我们公司主要使用的是戴尔R750的服务器。CPU数量我们是2个英特尔至强银牌4210处理器,每个处理器具有10个核心,内存我们会根据实际需求选择合适的容量,一般为64GB或128G不等。磁盘方面的话,我们主要是根据实际需求选择合适的大容量磁盘,一般为2个1TB SAS硬盘,磁盘阵列的话使用的是RAID1,以提高数据可靠性。
此外,我们还会考虑服务器的扩展性、稳定性和品牌等方面的因素。我们会选择一些知名品牌的服务器,并确保能够获得良好的售后服务和技术支持。
:::
:::success
给普通用户提权
常见的创建用户,创建文件目录等
以及进行磁盘的分区和添加磁盘等操作
:::
:::success
1. 文件系统的区别: centos6: ext4 centos7: xfs
xfs系统格式在处理大文件时比较出色,高并发方面也比ext4高
ext4在恢复速度上比较快其次就是处理小文件时比较出色
2. 防火墙不一样: 6是iptables 7 是filewalld
3. 内核版本不一致: 6是2.6 7是3.10
:::
:::success
1、 禁用不必要的系统服务和进程,减少资源占用
2、 选择轻量级的应用程序和工具,减少系统负担
3、 定期清理系统垃圾和临时文件,释放磁盘空间
4、 选择合适的文件系统,如ext4,提高文件访问速度和系统稳定
5、 使用系统监控工具,及时发现系统性能问题进行处理
:::
:::success
:::success
:::
:::info
1.生产商不同
CentOS来自于Red Hat Enterprise Linux,Ubuntu基于Debian发行版和GNOME桌面环境
2.安装软件命令不同
centos使用的是yum命令,而ubuntu中使用的是apt-get命令
Ubuntu 使用 apt 来更新,CentOS 使用 yum;
Centous 更加稳定 Ubuntu升级包可能会造成系统不稳定和不安全。
CentOS使用.rmp包,以及使用yum进行软件管理;Ubuntu使用.deb包,以及apt-get进行软件管理。
:::
:::success
虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供web服务,这样就可以实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响。
:::
:::success
**文件句柄数(File Handle)**是操作系统中用于标识文件(包括设备、管道、套接字等)的一种标识符。在Linux系统中,每个进程都拥有一定数量的文件句柄。这些文件句柄可以指向打开的文件并通过文件句柄对其进行读写操作
:::
CPU利用率和CPU负载是两个不同的概念,它们有以下区别:
- 定义:CPU利用率是指CPU在单位时间内完成的任务数,而CPU负载是指正在使用和等待使用CPU的平均任务数。
- 反映内容:CPU利用率反映的是CPU的繁忙程度,而CPU负载反映的是系统负载状况。
- 影响因素:CPU利用率受程序运行状况影响,而CPU负载受正在运行或等待处理的任务数影响。
综上,虽然CPU利用率和CPU负载都是描述CPU运行状态的指标,但它们在定义、反映内容和影响因素上存在差异。
:::success
innode号也一样
软链接的主要用途包括:
硬链接的主要用途包括:
:::success
MD5sum +包名
:::
:::success
Ip route
:::
:::success
Uptime
:::
:::success
进入top摁下shift+m
:::
:::success
fdisk -l
:::
:::success
df -Th
:::
:::success
Uname -a
:::
:::success
**Timedatectl ** 外网时间对齐:ntpdate ntp.aliyum.com
:::
:::success
cat /sys/class/net/eth0/address
ifconfig命令,可以看到网络接口卡的信息,其中包括MAC地址
ip addr命令,也可以在输出的网络接口卡信息中找到MAC地址,通常会跟在ether后面
dmesg | grep eth0命令,也可以在输出信息中找到MAC地址。这个命令通常用于诊断设备故障,但也可以用来查看MAC地址。
cat /etc/sysconfig/network-scripts/ifcfg-eth0命令,就可以在输出中找到HWADDR字段,后面跟的就是MAC地址
:::
:::success
ulimit -n
临时修改: ulimit -SHn 加参数
永久生效: vim /etc/security/limits.conf
:::
:::success
先确定基本分区—把那些分区做成物理卷(pv也就是做记号)—加入卷组(vg)是建立在pv上的—做逻辑卷(lv)是从卷组里拿出空间,起了个名字,建立在vg上。
:::
:::success
在/etc/rc.d/rc.local写入配置文件—添加执行权限(+x)–reboot(重启)
:::
:::success
先创建一个挂载目录(mkdir /mnt/disk)— 给权限+挂载(mount -o rw /dev/sdb1 /mnt/disk1)
:::
:::success
Stat /etc/hosts(查看inode号) 删除不用的文件或者目录,调整inode分配策略,格式化文件系统,扩大文件系统。
:::
:::success
umount /mnt/disks/
:::
Swap是一种虚拟内存技术,用于将内存中暂时不需要的数据移到磁盘空间中,以释放内存空间供其他程序使用。当物理内存不足时,Swap可以充当扩展内存的角色,避免系统因内存不足而崩溃。
:::success
1、raid0:数据条带卷,最少需要两块磁盘,每块磁盘写一部分数据 磁盘利用率100%,读写速度快
2、raid1:镜像raid,一般需要两块磁盘,每块磁盘存放一样的数据 读的速度快 写速度慢,磁盘利用率是50%
3、raid5:最少需要3块磁盘,将数据分开存放到两块磁盘上,另一快存放校验码,当一块数据损坏时 校验码可以恢复丢失的数据 磁盘利用率大于70%
4、raid6:最少需要4块盘,两块存放校验码;磁盘利用率60%
5、raid10:先镜像再条带(混合raid)也可以先条带后镜像最少需要4块盘,任何两块盘发生故障数据都不会丢失
:::
:::success
D 状态进程(TASK_UNINTERRUPTIBLE),处于不可中断的睡眠状态,指进程不响应异步信号。
绝大多数情况下,进程处在睡眠状态时,总是应该能够响应异步信号的。而D状态存在的意义就在于,内核的某些处理流程是不能被打断,比如进程调用read系统调用对某个设备文件进行读操作,一般需要使用D状态对进程进行保护,以避免进程与设备交互的过程被打断,造成设备陷入不可控的状态。这种情况下的D状态总是非常短暂的,通过ps命令基本上不可能捕捉到。
但是我捉到了,在执行md5sum命令时经常捉到,D状态往往是由于 I/O 资源得不到满足,而引发等待~
这是个关键点,既然IO得不到满足就查一下IO,计算md5也就从磁盘上读一些文件,所以怀疑问题出现在磁盘的读写上,进而想测一些磁盘的读写速度,这就用到了今天想说的 dd 命令。
:::
dd if=/tmp/testfile of=/dev/null bs=1M
if=/tmp/testfile:从/tmp/testfile文件读取数据。 (if表示input file)
of=/dev/null:将数据丢弃,以便只测试读取速度而不保存数据。 (of表示output file)
bs=1M:设置块大小为1MB。
dd if=/dev/zero of=/tmp/testfile bs=1M count=1000 conv=fdatasync
if=/dev/zero:从/dev/zero设备读取数据(无限的零数据流) 。 (if表示input file )
of=/tmp/testfile:将数据写入到/tmp/testfile文件中。 (of表示output file)
bs=1M:设置块大小为1MB。
count=1000:写入1000个1MB大小的块,总共1GB的数据。
conv=fdatasync:在每次写入后,等待数据同步到磁盘。
dd if=/dev/zero of=/tmp/testfile bs=4k count=100k oflag=direct 。
if=/dev/zero:从/dev/zero设备读取数据(无限的零数据流)。
of=/tmp/testfile:将数据写入到/tmp/testfile文件中。
bs=4k:设置块大小为4KB。
count=100k:写入100k个4KB大小的块,总共400MB的数据。
oflag=direct:绕过文件系统缓存,直接进行I/O操作。
:::success
总结
:::info
磁盘阵列(RAID,Redundant Arrays of Independent Disks)是一种数据存储技术,通过把多个独立的物理磁盘组合成一个逻辑上的磁盘阵列,以提高数据可靠性和数据传输性能。以下是进行磁盘阵列配置的一般步骤:
需要注意的是,具体的步骤和参数可能会因不同的控制器和操作系统而有所不同。在进行磁盘阵列配置时,建议参考控制器的官方文档和操作系统的相关指南,以确保正确配置和操作。
:::
:::success
进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。(进程是资源分配的最小单位)
**线程:**同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)
总的来说,进程是操作系统中分配资源的基本单位,而线程是进程内的执行单元,多个线程共享同一个进程的资源。进程之间的切换开销比较大,而线程之间的切换开销比较小。同时,线程之间可以更方便地进行通信和共享数据。
:::
:::success
广播风暴是局域网中一种常见的网络故障,它会对网络性能产生严重影响。以下是广播风暴产生的原因及解决方法:
广播风暴产生的原因:
解决广播风暴的方法:
通过以上方法,可以有效地预防和解决局域网中的广播风暴问题,提高网络性能和稳定性。
:::
:::success
应用层:针对应用约定的标准 HTTP(超文本传输协议) Telnet(远程协议)
表示层:约束数据格式,负责格式转化,加密。解密。
会话层:建立、维护、管理(解除)会话。数据的传输通道。
传输层:约定数据采用何种方式进行传递
网络层:提供逻辑地址(IP地址,用于在网络中标识每一台设备,作用于网络间的通信,提供路由和选路)
数据链路层:提供MAC(物理)地址,每个MAC地址写在网卡上
物理层:约定接口类型,传输速
:::
:::success
①DNS解析
②建立tcp连接
③发送请求
④服务器处理请求并返回报文
⑤浏览器解析渲染页面
:::
:::success
客户端连接到Web服务器,发送HTTP请求,服务器接受请求并返回HTTP响应,释放TCP连接,客户端浏览器解析HTML内容
http是无连接、无状态,每次连接只处理一个请求,对事务没有记忆能力,又是媒体独立的,只有客户端和服务器知道如何处理数据内容,可以传输任何类型的数据
:::
:::success
窃听风险:黑客可以获知通信内容。
篡改风险:黑客可以修改通信内容。
冒充风险:黑客可以冒充他人身份参与通信。
:::
:::success
HTTP和HTTPS的主要区别体现在安全性、连接方式、端口号、SSL证书以及性能影响等方面。
综上,HTTP和HTTPS之间的主要区别在于安全性、连接方式、端口号、SSL证书以及性能影响等方面。在传输机密数据或者需要保护隐私的数据时,建议使用HTTPS协议;而在不需要保护数据安全性的情况下,使用HTTP协议则更为简单和高效。
:::
:::success
DDOS攻击即分布式拒绝服务攻击,它是一种利用大量合法的分布式服务请求来攻击目标,使得目标服务器过载并拒绝合法请求的攻击方式。为了防止DDOS攻击,可以采取以下措施:
此外,定期进行安全审计和漏洞扫描也是防止DDOS攻击的重要措施。同时,加强安全意识和培训员工也是防止DDOS攻击的重要手段之一。如果遭受DDOS攻击,应立即采取相应的应对措施,如暂时关闭不必要的服务或资源,向相关部门报告并寻求帮助等。
:::
:::success
Telnet和SSH都是远程登录协议,但它们在安全性、传输方式和功能方面存在显著差异。
综上,由于SSH具有更强的安全性,更多的功能和更灵活的版本选择,因此在实际应用中更广泛使用。而Telnet由于使用简便,在一些特定场景仍有使用。
:::
:::success
TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议(IP)中两种主要的传输协议,它们有以下区别和特点:
TCP:
UDP:
总的来说,TCP和UDP各有其特点和使用场景。TCP主要适用于需要可靠、有序和错误校验的数据传输,如网页浏览、电子邮件等应用;而UDP则适用于实时性要求较高、错误容忍度较高的场景,如在线游戏、VoIP(语音通话)等应用。
:::
:::success
SSL协议主要提供的服务包括:
SSL协议的工作流程包括服务器认证阶段和用户认证阶段。在服务器认证阶段,客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接。服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息。客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器。服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。在用户认证阶段,经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
SSL协议是互联网安全协议的基石之一,广泛应用于保障数据传输的安全性。然而,随着互联网安全威胁的不断演变,SSL协议的安全漏洞已经被发现并被广泛讨论,因此目前已经有了更加安全的协议替代品,如TLS协议。
:::
:::success
远程共享存储、是在linux内核中实现
:::
:::success
因为nfs功能很多,使用的端口也不同,nfs不能固定端口,所以需要rpc来记录nfs的端口,这样可以通过rpc实现服务端和客户端的rpc来沟通
:::
:::success
nfs开启后,会随机使用一些端口,然后就会去向rpc去注册这些端口,并被rpc记录下来,开启111端口,等待客户端rpc请求,如果有请求,服务端的rpc就会将记录的nfs端口信息告诉客户端
:::
:::success
已经做好格式化了,可以直接用
nfs文件系统仅支持基于ip的用户访问控制
nfs的客户端主要是linux
nfs可以提供文件系统的共享
nfs端口一直在变,需要安装rpc来记录端口信息
:::
:::success
ftp主动模式:客户端开启一个端口在1024到65535之间,向服务端的21端口建立连接,客户端同时开启一个N+1端口,告诉服务端,我监听的是N+1端口,服务端接到请求之后,用自己的20端口数据传输到客户端的N+1端口。
ftp被动模式:客户端同时开启两个端口都在1024到65535之间,客户端的一个端口跟服务端的21端口建立连接,并请求服务端再开一个随机端口。服务端接到请求之后,开启一个随机端口,并告诉客户端我开启的端口号是多少,客户端用另一个端口与服务端的随机端口进行传输数据。
:::
:::success
ftp是文件传输协议,可以实现客户端和服务端共享文件,上传和下载文件,ftp通过tcp协议生成一个虚拟连接,用户可以通过客户端向ftp服务端上传,下载,删除文件,ftp服务端可以同时共享给多人使用
:::
:::success
提供文件共享服务,实现上传下载
21号端口建立tcp连接,20 号端口传输数据
:::
:::success
Vsftp,/etc/vsftpd/vsftpd.conf
在unix/linux中最主流的ftp服务,优点是小巧轻快,安全易用,稳定高效,满足企业跨部门,多用户的使用(1000用户)。
:::
:::success
● 文件系统类型 FTP是一种基于客户端-服务器的协议,用于文件传输。**NFS则是一种分布式文件系统协议,**作为本地操作系统和远程文件系统之间的桥梁,可以实现跨平台文件共享。
● 传输速度和效率 由于FTP是基于客户端-服务器的协议,所以需要进行连接的建立和关闭,因此相对于NFS,FTP传输的速度较慢,效率也较低。而NFS则是通过一些标准和规定管理远程文件系统的,直接访问远程文件系统,传输速度和效率更高。
:::
:::success
MySQL的主从复制(Master-Slave Replication)是一种数据同步机制,其中一个MySQL服务器(称为主服务器或Master)处理所有的写操作,并将其数据更改复制到一个或多个MySQL服务器(称为从服务器或Slave)。这种配置可以提高数据冗余、故障转移和读取性能。
以下是MySQL主从复制的常见模式:
在选择适合的主从复制模式时,你需要考虑你的应用需求、性能要求、故障转移策略等因素。例如,如果你需要确保数据的一致性并愿意牺牲一些性能,那么半同步复制可能是一个好选择。如果你需要高可用性并希望每个节点都能处理读写操作,那么组复制可能更适合你。
:::
:::success
**关系型数据库:**使用表结构,格式一致便于维护。因为sql语句通用可以复杂查询所以使用起来比较方便。支持事务安全性较高能保证数据的完整性和一致性。但是当遇到海量数据的时候读写效率将会大大降低,由于表结构固定所以灵活度不高。
**非关系型数据库:**存储格式有很多种比如说key-value形式、文档形式、图片形式等格式比较灵活。因为可以使用硬盘或者随机存储器作为载体所以读写速度快。而且有较高的扩展性和灵活度。但是没有sql支持,没有事务处理不能保证数据的一致致。
:::
:::success
原子性:事务中的所有操作要么全部成功,要么全部失败回滚。这意味着事务的操作如果成功就全部应用到数据库中,如果失败则不会对数据库有任何影响
一致性:事务必须确保数据库从一个一致性状态变换至另一个一致性状态。无论事务执行前后的数据如何变化,事务结束后,数据库应该保持原有的完整性和一致性。
隔离性:事务执行的时候不会被别的事务影响。
持久性:一旦事务被提交,对数据库的更改就是永久性的。即使在数据库系统 遇到故障的情况下,这些更改也不会丢失。这意味着事务提交后其所做的更改不会因为系统的暂时问题而被撤销或损坏。
:::
innodb | 支持事务提交和回滚、崩溃修复和并发控制。如果对事务的完整性要求比较高和并发控制的话可以选择innodb |
---|---|
myisam | 有较高的查询,插入速度,但是不支持事务。插入速度快,空间和内存使用比较低。 |
memory | 将表存储在内存中,读写速度极快,但是安全性很低。 |
:::success
整型,浮点型,字符串型,日期时间型,枚举型,集合型。
:::
:::success
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录,不可以为空 UNIQUE + NOT NULL
FOREIGN KEY (FK) 标识该字段为该表的外键,实现表与表之间的关联
NULL 标识是否允许为空,默认为NULL。
NOT NULL 标识该字段不能为空,可以修改。
UNIQUE KEY (UK) 标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值
UNSIGNED 无符号,正数
:::
:::success
常用于查询条件的字段比较适合作为索引,唯一性太差,更新太过于频繁的字段不适合作为索引。
:::
:::success
1.硬件问题。比如网速太慢,内存不足,i/o吞吐量小,磁盘空间满了等。
2.没有创建索引或者索引失效了。
3.数据量太多了(建议分库分表,读写分离)
4.服务器调优及各个参数设置
:::
物理备份 | 逻辑备份 | |
---|---|---|
备份方式 | 备份数据库物理文件 | 只备份数据库建表,建库,插入数据的SQL语句 |
优点 | 恢复起来速度比较快 | 备份文件比较小,只备份表中的数据和表结构 |
缺点 | 备份文件大,表空间,数据,结构,索引等都备份了 | 恢复起来比较慢,需要重新建立索引和表结构插入数据等。 |
完整备份 | 每次对数据进行完整的备份,即对整个数据库备份、数据库结构和文件结构的备份 |
---|---|
增量备份 | 每次备份上一次备份到现在产生的新数据,只有在上次完备或者增备后被修改的数据进行备份。 |
差异备份 | 备份自从第一次完整备份之后被修改的所有数据,每次备份都基于第一次完整备份进行备份 |
:::success
1.做数据的热备,作为后备数据库,在主数据库故障之后可以迅速的切换到从库继续工作,避免造成数据丢失。
2.提高读写性能,主从复制可以实现读写分离,从而提高数据的读写性能和吞吐量。
3.负载均衡,可以结合读写分离,主从复制可以在主节点提供写服务的同时,由从节点提供读服务,分担服务器负载,提高服务器的并发量。
:::
:::success
需要主库开启binlog日志
当主库上的数据更改时会把数据更改操作记录到本地的binlog日志中。从库的i/o线程读取主库的binlog日志并写入到自己的relay日志中。最后从库的sql线程会在自己的数据库上执行relaylog中的事件,达到主从同步的效果
:::
:::success
1.网络延迟;因为主从复制是基于binlog的复制,通过网络传送binlog文件,所以网络延迟是引起数据不一致的原因
2.主从服务器负载不一致:当任何一台服务器负载过高都会导致其中一台的线程分配的资源不足导致数据部不一致
3.数据库版本差异过大。
:::
:::success
主要通过将读操作和写操作分别分配在不同的服务器上分摊服务器压力,提高系统的处理效率。
:::
:::success
安全方面:可以修改默认端口号,禁止root用户远程登录,对用户降权,以普通用户运行mysql。
性能方面:升级硬件比如说内存、磁盘。设置索引,优化sql语句等。
架构方面:部署读写分离,高可用。
参数优化:innodb的buffer参数调大,连接数调大、缓存的参数优化。
:::
:::success
在查询数据内容时,尽量避免使用select * ,输入详细的字段查询
选择合适的数据类型,减少存储空间的使用
设置合适的索引,可以快速查询操作,减少数据库的扫描和查找时间
:::
:::success
sql语句差异MySQL5.7可以直接用grant创建用户 8.0 需要先创建用户在用grant赋权
1、账户与安全方面不一样,5.7版本可以使用grant all直接创建用户并给授权,而在8.0则是分开了,需要先创建用户,在授权
2、改进了性能,8.0对查询优化和执行引擎进行了改进,引入了新的InnoDB事务日志格式,提高了性能和可伸缩性
3、新的数据类型、8.0还引入了包括Geospatial数据类型和Invisible字段。
:::
:::success
需要一次执行多条语句的时候,要么全部成功,要么全部失败
:::
:::success
读未提交、读已提交、可重复读、串行化
:::
:::success
事务a修改了数据但是还没提交,事务b引用了事务a的数据,但是事务a的数据由于某些原因回滚了,那么事务b读取的数据就是脏数据
解决办法:将隔离级别改成读已提交
:::
:::success
一个事务读取某些行后,另一个事务插入新行的情况。在这种情况下,第一个事务再次读取同样的范围时,会“看到”这些新插入的行,就好像它们一直都在那里一样。
:::
:::success
首先最大的区别就是mysql是开源的 oracle是收费的 oracle是大型数据库而mysql是中小型数据库
:::
:::success
使用表结构,格式一直便于维护。因为sql语句通用可以复杂查询所以使用起来比较方便。支持事务安全性较高能保证数据的完整性和一致性
:::
:::success
由于mysql是关系型数据库所以当遇到海量数据的时候读写效率将会大大降低,而且表结构固定所以灵活度不高。
:::
:::success
单表 三万
:::
:::success
** 提高性能** 分摊服务器压力 提高机器的系统处理效率
** 提高并发性** 通过读写分离将读操作和写操作分别在不同的服务器上执行从而提高并发性
** 降低主服务器的负载**
数据备份和灾难恢复
:::
主从复制延迟较大的原因主要有以下几种:
- 硬件配置差异:主库和从库的硬件配置不一致,特别是当从库的硬件性能较差时,会导致复制延迟。
- 网络问题:网络延迟或网络带宽问题可能导致主从复制延迟。例如,跨公网主从复制容易产生网络延迟。
- 主库并发事务量大:如果主库的事务并发量太大,来不及传送到从库,也会导致复制延迟。
- 大事务执行:如果主库的一个事务执行时间较长,例如执行了10分钟,那么从库在接收到binlog后也需要等待10分钟再执行,从而导致了复制延迟。
- 从库查询压力大:如果从库的查询压力过大,消耗了大量的CPU资源,也会影响同步的速度。
- 主库写binlog方式:主库的写binlog是顺序IO,而从库读取binlog也是顺序IO,这可能会影响复制速度。
- 慢SQL语句:如果从库执行了大量的慢SQL语句,那么复制的速度也会受到影响。
- 主从复制的设计问题:例如,主从复制单线程,如果主库写并发太大,那么会导致复制延迟。
- 从库数量过多:如果主库有太多的从库,那么可能会导致复制延迟。
要解决这些问题,你可以考虑以下几个方面:
- 优化硬件配置:尽可能使主库和从库的硬件配置保持一致或接近一致。
- 优化网络环境:优化网络环境,减少网络延迟和增加网络带宽。
- 优化主库并发事务:通过优化事务设计、减少事务的复杂度等方式来减少并发事务的数量。
- 分批传输大事务:将大事务分成多个小事务,分批传输到从库,以减少单次传输的数据量。
- 优化从库查询:通过优化查询语句、建立合适的索引等方式来减少从库的查询压力。
- 使用GTID和并行复制:使用GTID进行复制,并通过并行复制来提高复制速度。
- 优化慢查询:找出并优化慢查询语句,以减少其执行时间。
- 调整主从复制参数:调整复制相关参数,如增加线程数、调整数据传输的缓冲区大小等。
- 减少从库数量:尽量减少主库管理的从库数量,以提高复制效率。
导致SQL执行慢的原因有多种,主要包括以下几点:
- 硬件问题:如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等。
- 没有索引或者索引失效:当对某个字段进行运算、函数操作时,可能导致无法使用索引,从而影响查询速度。
- 数据过多:如果数据量过大,查询时需要扫描的数据行数就会增加,可能导致查询变慢。
- 服务器调优及各个参数设置问题:例如,数据库的配置参数设置不当,可能会影响到查询性能。
- 数据库本身压力较大:如果数据库本身的性能压力就比较大,资源比较紧张,CPU占用率或者IO利用率很高,也会导致所有的语句执行起来都比较慢。
- 表锁冲突和行锁冲突:当一个简单的查询长时间未返回结果时,可能是表被锁住了。这通常通过查看sql语句的状态来发现。
- 索引未命中:如果字段上没有索引,那么就只能走主键id顺序扫描,一直扫描到第n行才能停下来。给表数据加索引可以快速提升查询性能。
- 多表join查询:即使每张表的索引都可以起到作用,但由于数据量过多,扫描的行数仍然是巨大的,这会使查询速度受到影响。一般来说,超过3个表的join就应该尽量避免。
:::success
1、MySQL开源,可以免费使用;而Oracle收费,不开源
2、Oracle功能强大的企业级数据库系统,支持复杂的事务和大规模数据处理;而MySQL通常用于中小型应用和网站,对于大规模企业级应用的复杂查询和事务处理相对较弱
3、MySQL支持多种存储引擎,包括InnoDB、MyISAM等,每种存储引擎有不同的特性和适用场景;而Oracle数据库使用统一的存储引擎,有丰富的功能和性能优化选项
4、由于MySQL是开源的,因此使用成本相对较低,技术支持有限;而Oracle数据库的使用成本较高,但有完善的技术支持和服务。
:::
:::warning
**select模式:**使用select系统调用来监视多个文件描述符的状态变化,一旦文件描述符就绪,select就会返回,然后程序可以对就绪的文件描述符进行操作。
poll模式:与select类似,也是用来监视多个文件描述符的状态变化,不同的是,poll没有描述符数量限制,且效率更高。
**epoll模式:**LInux特有的I/O多路复用机制,使用epoll系统调用来监视多个文件描述符的状态变化,效率更高,且没有描述符数量限制。
:::
:::warning
HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
Web服务器有:Nginx,Apache服务器,IIS服务器(Internet Information Services)等。
:::
:::warning
状态码 | 状态码英文名称 | 中文描述 |
---|---|---|
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | OK | 请求成功。一般用于GET与POST请求 |
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 | Reset Content | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | Partial Content | 部分内容。服务器成功处理了部分GET请求 |
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | See Other | 查看其它地址。与301类似。使用GET和POST请求查看 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 | Use Proxy | 使用代理。所请求的资源必须通过代理访问 |
306 | Unused | 已经被废弃的HTTP状态码 |
307 | Temporary Redirect | 临时重定向。与302类似。使用GET请求重定向 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
402 | Payment Required | 保留,将来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
406 | Not Acceptable | 服务器无法根据客户端请求的内容特性完成请求 |
407 | Proxy Authentication Required | 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 | Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
409 | Conflict | 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突 |
410 | Gone | 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
411 | Length Required | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 | Precondition Failed | 客户端请求信息的先决条件错误 |
413 | Request Entity Too Large | 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 | Request-URI Too Large | 请求的URI过长(URI通常为网址),服务器无法处理 |
415 | Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
416 | Requested range not satisfiable | 客户端请求的范围无效 |
417 | Expectation Failed | 服务器无法满足Expect的请求头信息 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |
:::warning
TCP:
面向连接:TCP协议在传输数据之前需要先建立连接,并在传输完成后进行相应的关闭操作。这种面向连接的特性使得TCP能够保证数据传输的可靠性和顺序性。
可靠传输:TCP通过校验和、重传控制、序号标识、滑动窗口和确认应答等机制实现可靠传输,确保数据无差错、不丢失、不重复,并且按序到达。
全双工通信:TCP提供全双工通信模式,允许数据在双向间同时传输,但需要由发送方和接收方通过三次握手建立连接和四次挥手关闭连接。
数据流量控制和拥塞控制:TCP具有数据流量控制和拥塞控制机制,能够避免网络拥堵,提高网络通信效率。
数据封装与解封装:TCP将应用程序的数据进行封装,并逐层进行传输,到达目的地后再进行解封装,还原成应用程序的数据。
UDP:
**无连接:**UDP协议不需要在传输数据前建立连接,而是直接发送数据报文。因此,UDP协议具有较好的实时性和效率。
尽最大努力交付:UDP协议尽最大努力将数据报文交付给目标地址,但不保证可靠交付。因此,UDP适用于对实时性和效率要求较高的应用,如音频、视频通信等。
面向报文:UDP将应用程序的数据封装成数据报文,每个数据报文独立发送,以最大程度地减少数据丢失或重复的可能性。
简单和高效:UDP协议相对于TCP协议更为简单和高效,因为其不需要建立连接和进行流量控制等操作。此外,UDP首部开销小,只有8个字节。
:::
:::success
反向代理:隐藏真实的服务器,客户端不知道真正提供服务的是谁,服务端的响应信息由代理服务器转发给客户端。反向代理代理的是服务端
正向代理:隐藏真实的客户端,服务器不知道真实的客户端是谁,客户端的请求信息由代理服务器转发给服务端。正向代理代理的是客户端。
:::
:::success
apache是基于多进程模型的web服务器,使用传统的多线程多进程方式来处理客户请求,每个请求有独立的进程或线程处理可以同时处理多个请求,消耗系统资源也多
:::
:::success
进程模式,进程去处理请求,容易消耗内存,某个进程出现问题不会影响其他请求,对稳定性有要求是使用
线程模式,使用多个子进程,每个子进程有多个线程,用线程去处理请求,消耗内存小,但稳定性不好,在访问量大的时候使用
:::
:::success
1、nginx是http和反向代理服务器,apache是基于多进程模型的web服务器
2、 nginx在处理高并发大量连接的情况表现出色,能高效的处理并发请求,apache在处理静态内容效果良好,在处理高并发大连接情况下,性能会受影响
3、apache每个请求都要独立的进程和线程处理,占用内存较多,而nginx采用的异步和事件驱动机制所以可以在占用较少的内存处理更多的并发连接
:::
:::success
Nginx的IO多路复用是一种机制,用于在单个线程中管理多个IO流,以提高服务器的并发处理能力和吞吐量。通过使用IO多路复用技术,Nginx可以在单个工作进程中处理数千个并发连接,而不会耗尽系统资源。
Nginx的IO多路复用基于事件驱动模型,使用epoll作为后端实现。epoll是Linux系统下的一种IO多路复用机制,它允许程序同时监听多个文件描述符,并在其中一个或多个文件描述符可读、可写或发生异常时返回。
在Nginx中,每个请求连接都会被封装成一个请求对象,并关联到一个socket描述符上。通过使用IO多路复用技术,Nginx可以在一个工作进程中同时处理多个请求对象,而不需要为每个请求创建一个新的线程或进程。
Nginx的IO多路复用机制具有以下优点:
总之,Nginx的IO多路复用技术是一种高效、稳定、可扩展的机制,用于提高服务器的并发处理能力和吞吐量。
:::
:::success
nginx是一款轻量级的web服务器和反向代理服务器,同时也是一款负载均衡软件,支持七层负载和四层负载。可以做动静分离,nginx功能非常多,比如说地址重写,回话保持,防盗链,访问流量控制等。
:::
:::success
作为web服务器,相比apache,nginx占用更少的资源,支持更多的并发连接。nginx处理请求是异步非阻塞的,而apache杂事阻塞型的,在高并发的情下nginx能保持低资源低消耗高性能。
●提高访问速度:反向代理服务器可以缓存目标主机返回的数据,当下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,避免了重复获取资源的时间,从而提高了访问速度。
●保护Web服务器:反向代理服务器可以保护Web服务器免受已知漏洞的影响,因为请求不会直接到达Web服务器。
●负载均衡:反向代理服务器可以充当负载均衡器,解决网站同时处理大量请求的问题,使Web服务器能够更好地处理请求,并提高系统的性能。
Nginx 需要配置文件里面定义,如果后端地址比较多,需要用upstream 模块定义后端服务器地址池,然后再server模块中,定义location模块,用Proxy_pass 转发到此地址池。这样的效果,其实还起到了七层负载均衡的作用。其实还起到了反向代理的作用。
:::
:::success
web服务器,代理服务器,负载均衡服务器
:::
:::success
虚拟主机、反向代理、地址重写、会话保持、流量控制、防盗链
:::
:::success
性能:work进程数量和cpu内核数保持一致
调大最大连接数
增大文件句柄数量
GZIP压缩功能可以考虑打开
安全:隐藏nginx版本号
:::
etc/sys
:::success
**gzip_comp_level ** 设置gzip压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大
gzip_min_length 当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩gzip_types 设置需要压缩的MIME类型,非设置值不进行压缩
:::
:::success
在http块里增加 server_tokens off
:::
:::success
1、开启gzip压缩功能
2、设置允许压缩页面的最小字节数
3、设置压缩缓冲区大小
4、设置压缩版本
5、设置压缩比率(最小为1,最大为9,越小传输越慢)
:::
:::success
当您访问百度网站时你的浏览器上就会显示“http://www.baidu.com”,那么这个就是百度网站的URL了。
四层负载均衡 | 七层负载均衡 | |
---|---|---|
基于 | 基于IP+Port的 主要基于传输层的信息 | 基于虚拟的URL或主机IP等 基于应用层进行工作 |
类似于 | 路由器 | 代理服务器 |
复杂度 | 低 | 高 |
性能 | 高;无需解析内容 | 中;需要算法识别 URL,Cookie 和 HTTP head 等信息 |
安全性 | 低 | 高 |
额外功能 | 无 | 会话保持,图片压缩,等 |
:::warning
总结:从上面的对比看来四层负载与七层负载最大的区别就是效率与功能的区别。四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,而七层负载均衡的优势则体现在功能多,控制灵活强大。在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑。
:::
:::success
为了在不中断服务的前提下,对服务器上的应用程序进行更新或迁移。
:::
:::success
(1)在不停掉老进程的情况下,启动新进程。
(2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。
(3)新进程接受新请求。
(4)老进程处理完所有请求,关闭所有连接后,停止。
:::
:::success
主进程支持的信号
工作进程支持的信号
:::success
Nginx中一个非常实用的功能我们可以用来限制用户在给定时间内HTTP请求的数量。这可以用于安全目的,例如减慢暴力破解的速率,以及保护上游服务器不被过多的用户请求压垮。
:::
:::success
程序会发起一个操作,然后继续执行其他任务,而不是等待该操作完成。当操作完成时,程序会收到通知,然后可以获取结果并进行后续处理。这种方式可以提高程序的效率和响应性,因为它可以同时处理多个任务,而不是依次执行。
:::
:::success
将同一客户端的请求总是发往同一个后端服务器。
:::
:::success
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
:::
:::success
总之,Tomcat优化需要从多个方面进行综合考虑和调整,包括内存、线程、连接、缓存、压缩、静态资源和监控等方面。通过合理的优化配置和调整参数,可以提高Tomcat的性能和并发处理能力,提升网站的响应速度和用户体验。
:::
:::success
NAT:网络地址转换模式,进站/出站的数据流量经过分发器/负载均衡器(IP负载均衡,他修改的是IP地址) --利用三层功能
DR:直接路由模式,只有进站的数据流量经过分发器/负载均衡器(数据链路层负载均衡,因为他修改的是目的mac地址)–利用二层功能mac地址
TUN:隧道模式,只有进站的数据流量经过分发器/负载均衡器
full-nat::双向转换,通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发
:::
:::success
1、优势
高并发连接、稳定性强、成本低廉、配置简单、支持多种算法(分配方式)、支持多种工作模式、应用范围广
2、不足
工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。
:::
:::success
LVS:专业的负载均衡软件,但是只支持四层负载均衡。负载能力强、并发量大、配置非常简单、工作稳定、无流量传输占用cpu资源小,速度快能支持所有应用,是一个基于Linux内核的负载均衡软件。
Nginx**:**工作在第七层,支持四层负载和七层负载。可以针对HTTP应用本身做分流策略、对网络的依赖小、安装配置比较简单,测试起来也很方便、负载均衡和稳定度比不上LVS,Nginx还具有高可用性和可扩展性,能够处理大量的并发请求,适用于各种规模的应用。
:::
常见的负载均衡软件包括LVS、Nginx和HAProxy。
- LVS:基于4层网络协议,几乎无流量产生,内存**、CPU占用资源低,应用范围广,**不仅对Web服务做负载均衡,而且可结合其他应用做负载,如LVS+MySQL负载均衡。配置简单,可配置东西较少,无流量,LVS只分发请求,而流量并不从它本身出去,保证了均衡器IO的性能不会收到大流量的影响。有个虚IP概念。
- Nginx:基于7层网络协议,对Http应用做分流策略,如配置域名。高负载、稳定。支持上万高并发。负载能力小于LVS。安装配置简单,支持的正则比Haproxy丰富。且对网络稳定性的依赖非常小。可通过端口检测到服务器内部的故障,如根据服务器处理网页返回的状态码、超时等,把返回错误的请求重新提交到另一个节点。作Web服务器,反向代理\负载均衡。
- HAProxy:支持虚拟主机,可工作在4层、7层。负载均衡效率上来讲Haproxy比Nginx更出色,在并发处理上也是优于Nginx。能够补充Nginx的一些缺点,如支持Session的保持,Cookie的引导。同时支持通过获取指定的url来检测后端服务器的状态。支持负载均衡策略较多。如roundrobin简单轮询、leastconn最少服务器连接数、static-rr权重轮询、uri哈希、sourceIP哈希、url_param请求的URL参数等。
以上是常见的负载均衡软件及其特点,这些软件各有优缺点,请根据实际需求选择合适的软件。
:::success
A、**轮询(默认**)
:每个请求按时间顺序逐一分配到不同的后端服务器;
B、**ip_hash
:使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,有助于保持会话的一致性;
C、**url_hash**
:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候效率;
D、fair
:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx
本身是不支持 fair
的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;<br />E **
加权轮询**:根据配置的权重的大小而分发给不同服务器不同数量的请求。<br />F **
热备`:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务
:::
:::success
dr
nat
tun
:::
:::success
Keepalived的工作原理主要基于VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)来实现集群的高可用性。VRRP是一种实现路由器高可用的协议,通过将多台提供相同功能的路由器组成一个路由器组,其中一台作为master,其他作为backup。Master会定期发送VRRP报文,如果backup在一定时间内没有收到报文,就认为master出现故障,然后根据VRRP的优先级选举一个backup成为新的master。
在Keepalived中,VRRP模块负责实现VRRP协议,用于故障隔离和负载均衡器间的失败切换。此外,Keepalived还支持Layer3、Layer4和Layer5的检查机制,通过定期向服务器发送ICMP或TCP数据包,检测服务器的状态。如果服务器出现故障,Keepalived会将其从集群系统中剔除,以保证集群的高可用性。
因此,Keepalived的工作原理主要是通过VRRP协议和多层检查机制来实现集群的高可用性,防止单点故障的发生。
:::
:::warning
调度算法用于决定LVS如何选择后端的RealServer
1. 轮循调度(Round Robin)(简称rr)
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2. 加权轮循(Weighted Round Robin)(简称wrr)
调度器通过“加权轮循”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3. 最少链接(Least Connections)(LC)
调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用 “最小连接” 调度算法可以较好地均衡负载。
4.加权最少链接(Weighted Least Connections)(WLC)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
LVS的默认调度算法。
5. 基于局部性的最少链接(Locality-Based Least Connections)(LBLC)
“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
6. 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)(LBLCR)“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
7. 目标地址散列(Destination Hashing)(DH)“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
8. 源地址散列(Source Hashing)(SH)“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
9. 最短的期望的延迟(Shortest Expected Delay Scheduling SED)(SED)基于wlc算法。这个必须举例来说了
ABC三台机器分别权重123 ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
A(1+1)/1
B(1+2)/2
C(1+3)/3
根据运算结果,把连接交给C。
10.最少队列调度(Never Queue Scheduling NQ)(NQ)
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算
:::
:::success
ansible是自动化运维工具,基于Python开发,分布式,无需客户端,轻量级,实现了批量系统配置、批量程序部署、批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
:::
:::success
ansible是自动化运维工具,基于python开发,分布式,轻量级实现批量系统配置、批量程序部署、批量运行命令。
:::
:::success
ansible是基于模块和ssh工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提提
:::
:::success
Ansible特性
1)、no agents:不需要在被管控主机上安装任何客户端,更新时,只需在操作机上进行一次更新即可(不用安装客户端。分布式的)
2)、no server:无服务器端,使用时直接运行命令即可
3)、modules in any languages:基于模块工作,可使用任意语言开发模块
4)、yaml,not code:使用yaml语言定制剧本playbook
5)、ssh by default:基于SSH工作
6)、strong multi-tier solution:可实现多级指挥
:::
:::success
yum、ping、shell、copy、service等模块
:::
:::success
使用角色部署过nginx
:::
:::success
CDN即内容分发网络,它是一种基于互联网的服务,提高用户访问的响应速度和成功率:加快网站访问,为了实现跨运营商,跨地域的全网覆盖,为了保障网络完全(阿里云腾讯云都有cdn加速服务)
:::
:::success
关系型数据库:使用表结构,格式一直便于维护。因为sql语句通用可以复杂查询所以使用起来比较方便。支持事务安全性较高能保证数据的完整性和一致性。但是当遇到海量数据的时候读写效率将会大大降低,由于表结构固定所以灵活度不高。
非关系型数据库:存储格式有很多种比如说key-value形式、文档形式、图片形式等格式比较灵活。因为可以使用硬盘或者随机存储器作为载体所以读写速度快。而且有较高的扩展性和灵活度。但是没有sql支持,出了redis外没有事务处理不能保证数据的一致性和完整性
:::
:::success
(1) 速度快,因为数据存在内存中。
(2) 支持丰富数据类型,支持string,list,set,hash等
(3) 支持事务,操作都是原子性,就是对数据的更改要么全部执行,要么全部不执行
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
:::
:::success
** RDB相当于把数据拍了个快照,但是可能因为在拍快照的时候,有新的数据生成,导致数据不够完整。AOF的完整性会高一点,因为AOF记录的数据的的写指令,再重启之后,只需要将这些指令从新执行一遍,就能够恢复数据。我们一般使用的是RDB方式,AOF视情况开启,一般只会选择一种,因为开启两种的话,可能会对redis造成一定的压力。只用RDB的话虽然数据完整性不高,但是影响也不大,因为数据库中还有一份,只需要同步到redis就行。**
RDB(Redis DataBase):是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;
特点:
1.周期性
2.不影响数据写入 #RDB会启动子进程,备份所有数据。当前进程,继续提供数据的读写。当备份完成,才替换老的备份文件。
3.高效 #一次性还原所有数据
4.完整性较差 #故障点到上一次备份,之间的数据无法恢复。
**AOF(Append Only File)**则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
特点:
1.实时性
2.完整性较好
3.体积大 #记录数据的指令,删除数据的指令都会被记录下来。
:::
:::success
**缓存穿透:**请求根本不存在的资源,恶意或频繁请求一个不存于缓存的数据,导致请求直接访问后端数据库,导致压力过大,从而卡死或宕机。
** 解决方法:**对空值进行缓存,对redis进行实时监控,使用布隆过滤器(用户访问的时候判断该资源是否存在,不存在则直接拒绝访问),使用接口校检(类似于用户权限的拦截)
** 缓存雪崩:**redis中大量的key集体过期,使大量缓存失效或过期同时发生,从而导致所有请求都去访问后端数据库DB,导致数据库CPU和内存负载过高,甚至宕机。
** 解决方法:**合理设置缓存的过期时间,通过分散缓存的过期时间,避免同时发生大量缓存失效。使用多级架构,设置缓存标记,使用锁或者队列的方式。
** 缓存击穿:**redis中的某个热点key过期,但是此时有大量的用户访问该过期key
**解决方法:**提前对热点数据进行设置,监控数据,适时调整,使用锁机制。
:::
:::success
:::success
(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
(2) redis可以持久化其数据
:::
:::success
(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
(4) 尽量避免在压力很大的主库上增加从库
(5) 主从复制不要用树状结构,用单向链表结构更为稳定,即:Master(写) <- Slave1(读) <- Slave2(读) <- Slave3(读)…
这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。
redis集群的工作原理
主多从+哨兵模式
:::
:::success
mysql数据库是关系型数据库,使用表结构易于维护,支持事务处理能保证数据的完整性和一致性,支持sql语句,可以复杂查询,使用方便。但是因为表结构固定而不够灵活。一旦遇到海量数据读写性能效率将会大大折扣。
redis是非关系型数据库,存储格式灵活支持多种文件格式,比如key-values,文档形式,图片形式等,因为数据都是写在内存上的所以读写速度比较快但是同时也不太安全,一旦服务器出现故障数据就会丢失。值得一提的是Redis作为非关系型数据库它支持事务处理。
:::
:::success
首先是高可用性Redis Cluster支持主从复制和故障转移,一旦某个主节点故障那么对应的从节点会自动切换成主节点,当出现故障的主节点修复之后将会切换为从节点。其次就是高性能 Redis cluster采用数据分片技术,将数据分散存储在集群中的所有节点来提高系统的性能。然后就是扩展性高,Redis cluster支持动态扩展,可以随时添加新的节点。最后就是管理方便,可以方便的进行对节点的删除、增加、数据迁移等操作。
:::
:::success
Git:分布式,更安全,每一次克隆都是一次完整的备份,客户端服务端都可以充当服务端
Svn:集中式,备份的都是最新的代码,必有一个服务端
Git clone 传输所有的历史代码 git pull 传输本地仓库有改变的
:::
:::info
GitHub、GitLab 不同点:
1、GitHub如果使用私有仓库,是需要付费的,GitLab可以在上面搭建私人的免费仓库。
2、GitLab让开发团队对他们的代码仓库拥有更多的控制,相对于GitHub,它有不少的特色:
(1)允许免费设置仓库权限
(2)允许用户选择分享一个project的部分代码
(3)允许用户设置project的获取权限,进一步提升安全性
(4)可以设置获取到团队整体的改进进度
(5)通过innersourcing让不在权限范围内的人访问不到该资源
:::
:::success
配置Runner:首先,你需要在GitLab上配置Runner。Runner是执行CI/CD作业的关键组件,它负责在指定的机器或容器上执行作业。你需要设置Runner的URL、token以及执行器等关键参数。
:::
:::success
定义.gitlab-ci.yml文件:在项目的根目录下创建或编辑.gitlab-ci.yml文件,这是GitLab CI/CD的配置文件。在这个文件中,你可以定义各种阶段(stage)、作业(job)以及它们之间的关系。每个作业都包含了一组指令,这些指令描述了Runner应如何执行特定的任务。
:::
:::success
提交代码并触发CI/CD:当你提交代码到GitLab仓库时,GitLab会根据.gitlab-ci.yml文件的配置自动触发CI/CD管道。这个管道会按照你在配置文件中定义的阶段和作业顺序执行。
:::
:::success
Runner执行作业:Runner会按照配置,从GitLab拉取代码,并在指定的环境(如Docker容器或物理机)中执行作业。作业的执行结果会实时反馈到GitLab的界面中,你可以看到每个作业的执行状态、输出日志等信息。
:::
:::success
测试与部署:在CI/CD过程中,通常会包含自动化测试和部署的步骤。例如,你可以定义一个作业来运行单元测试或集成测试,确保代码的质量。另一个作业则可能负责将代码部署到生产环境。
:::
:::success
查看报告与结果:CI/CD执行完成后,你可以在GitLab的界面中查看详细的报告和结果。这包括每个作业的执行状态、测试结果、构建产物等信息。
:::
:::success
通过以上步骤,GitLab-Runner可以帮助你实现自动化的代码测试、构建和部署,提高开发效率和质量。
:::
:::success
已经提交了不合适的修改到版本库时,想要撤销本次提交,使用版本回退,不过前提是没有推送到远程库。
:::
:::success
Jenkins是一种开源的持续集成工具,用于自动化各种构建、测试和部署任务。下面是Jenkins的构建流程以及构建前需要注意的细节配置:
Jenkins构建流程:
构建前需要注意的细节配置:
以上是Jenkins的构建流程以及构建前需要注意的细节配置。在实际使用中,还需要根据具体项目需求进行调整和优化。
:::
:::success
Jenkins是一个开**源的持续集成(CI)和持续交付(CD)工具,主要用于自动化构建、测试和部署软件项目。**以下是Jenkins的主要功能和用途:
总之,Jenkins通过自动化和持续集成的方式,可以提高开发团队的协作效率,减少手动操作和人为错误,实现快速、高效的软件交付。
:::
:::success
从git仓库拉取代码(需要git插件,jenkins服务器下载git,并将jenkins的公钥配置到代码仓库的ssh密钥,jenkinsweb界面配置自己的私钥),通过maven编译打包(可以达成war包或jar包,需要jdk和maven的环境和插件),将打包好的包发送到web服务器的网站发布目录(需要将jenkins的公钥发送到web服务器对应的用户家目录)
:::
:::success
jenkins可以进行参数化构建,版本回退(可以基于修订号以及标签、分支进行版本回退或构建)。也可以实现自动发布,定时发布,需要在jenkins和gitlab仓库配置gitlab webhook插件。
:::
:::success
我们一般编译打包的,用clean、package,但是还有其他参数,这个没有太去查过,不过应该不难,可以打成war包,发布到tomcat的默认发布目录中,或者打成jar包,直接使用命令 java -jar jar包名称 运行,一般微服务会打成jar包
:::
:::success
一种是标签的形式,一种是提交的形式
做之前需要先在jenkins机器上装一个插件 Git Parameter 这个插件,
然后再配置页面选择添加参数
自己给参数起个名字,最好见名知义,然后提交的把指定分支内的内容改成参数,需要用${}包裹着,最好还是选择倒序排列方式
:::
:::success
:::
:::success
:::
:::success
一般来说,对于一个较小的项目,构建时间可能在几秒钟到几分钟之间;而对于一个较大的项目,构建时间可能会更长,可能需要十几分钟到几个小时不等。
为了加快构建速度,可以考虑以下方法:
综上所述,Jenkins构建一次项目的时间取决于多个因素,但通过优化配置、增加硬件资源和采用分布式构建等方法,可以加快构建速度。
:::
:::success
Jenkins可以同时运行多个项目,具体数量取决于硬件资源、项目复杂度、并行构建策略等因素。一般来说,Jenkins上可以同时运行数十个甚至上百个项目,但具体数量应根据实际情况而定。
为了合理地管理项目数量业务领域、技术领域或其他维度进行划分,避免项目之间的冲突和资源浪费。
综上所述,Jenkins上可以同时运行多个项目,但应合理管理项目数量,确保资源的有效利用和项目的顺利进行。
:::
:::success
优点:开源、无软件成本、server端对设备性能要求低、支持的设备多,自带多种监控模板、能实现自动化监控、开放式接口,扩展性强。
缺点:需在被监控主机上安装agent, 所有数据都存在数据库里,产生的数据量很大,瓶颈主要在数据库。UI图形展示(grafana)
:::success
:::
:::success
1.创建主机群组
2.创建主机加入主机组
3.添加模板
4.模板关联主机
5.创建监控项
6.创建触发器
7.配置告警动作
8.创建图形
:::
:::success
**被动模式:**server端向agent端请求获取监控项配置的相关数据,agent端响应,并将数据发送给server端 ,监控对象上报故障
**优点:**占用网络资源少,占用存储资源少
**缺点:**及时性差
**主动模式:**agent端主动向server请求与自己相关监控配置,主动将server配置的监控项的相关数据发送给server端 ,定时查看业务状态
优点:及时性好
**缺点:**占用资源=-098
:::
:::success
zabbix监控redis集群的状态,监控mysql主从的状态,mysql查询吞吐量(show global status like “questions”;)、连接情况( show status like ‘%connect%’;)、缓冲池情况(show variables like ‘innodb_buffer_pool%’)
nginx的状态,cpu利用率,cpu负载、磁盘使用情况
:::
:::success
zabbix_get -s 192.168.153.178 -k system.cpu.load[all,avg5] -p 10050 点对点命令 分布式
rpm -qa | grep “zabbix” 查看版本
:::
:::success
Zabbix是一款开源的网络监控和管理系统,用于实时监测各种网络参数、服务器状态和网络服务。它可以帮助管理员及时发现并解决网络和服务器方面的问题,提高系统的稳定性和可靠性。
:::
:::success
保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
:::
:::success
:::
:::success
:::
:::success
先创建监控脚本,测试一下能否获取到我们想获取的值,然后在zabbix_agentd.conf.d目录下创建以.conf结尾的文件,在文件中写入UserParameter=,,key就是自定义监控项的名字,command是要执行的命令或者你创建的脚本的执行路径
:::
:::success
创建发现规则,扫描一个规则范围内的ip,然后创建发现主机后的action动作,我们一般都有创建好的模板,模板关联某个主机群组(有监控项、触发器、动作),发现主机后,将它添加到主机群组,实现自动化监控
:::
:::success
主要缓解server监控端的压力,当agent过多时,server需要跟多个agent进行交互,数据过多时,server承受不住那么大的压力。所以可以在server和agent之间增加proxy,proxy代替server搜集数据,然后将数据统一发送给server。
轻量级:
1.占用资源少(内存、CPU)
2.大小 小
3.对基础环境几乎没有依赖性
:::
:::success
**问题1:**主机有30多个图形,但是查看时只显示了20个图形。
**原因:**是因为zabbix的php默认值为20。
**解决:**修改zabbix前端默认配置文件 defines.inc.php中的 ZBX_MAX_GRAPHS_P ER_PAGE变量值,重启服务即可。
**问题2: **内存溢出导致zabbix_server服务关闭?
**解决:**修改/etc/zabbix/zabbix_server.conf配置文件里添加CacheSize=1024M ,重启服务
**问题3:**Zabbix给新机器添加监控,按正常操作完成后,发现主机那一栏最后的灯不亮
**解决:**检查防火墙和SELinux是否关闭,查zabbix_server日志,查zabbox是否启动,来回检查了好几遍,没发现问题,删除后重新加了两遍,还是灯不亮,后来在网上找相关的解决方法,试了发现不是自己遇到的问题,等过了一段时间发现灯正常亮了。
:::
:::success
可能是防火墙没有开放,可以看一下日志,如果没有报错的话说明请求根本就没有发送过去,可以看一下agent端的配置文件有没有问题,如果有错误日志可以看一下是拒绝访问还是那些问题。
:::
:::success
首先,需要有一个微信企业号。(一个实名认证的[微信号]一个可以使用的[手机号]一个可以登录的[邮箱号]
下载并配置微信公众平台私有接口。
配置Zabbix告警,(增加示警媒介类型,添加用户报警媒介,添加报警动作)。
:::
:::success
:::success
E-mail 邮件和企业微信和短信报警类型
企业微信:流程
1. 准备企业微信
应用:报警机器人
AgentID 1000021
Secret Fir-nxf0G2_TwO8woWXOWOPFWkaeECh3AfnfIJwubgk
企业 CorpID wwd5348195e1cdd809
部门id 1
2. api调试工具
3. Python报警监控脚本
4. 监控脚本测试:
5. zabbix 创建告警媒介,设置报警消息模板和恢复消息模板
6. zabbix 添加告警用户,创建用户组,用户群组,用户,报警媒介写上企业微信成员名
7. Zabbix 添加报警动作
8. 微信测试报警 如果测试 http服务停stop停掉
:::
:::success
Redis响应一个请求的时间
2. 平均每秒处理请求总数
3. 已使用内存
4.客户端连接数
怎么做:
先创建监控脚本,测试一下能否获取到我们想获取的值,AWK和cat都可以截取 内 容
然后在zabbix_agentd.conf.d目录下创建以.conf结尾的文件
在文件中写入UserParameter=,,
key就是自定义监控项的名字
command是要执行的命令或者你创建的脚本的执行路径
在zabbix页面端设置自定义监控项
zabbix后台用
zabbix_get -s ip key 测试获取值是否正确。
:::
:::success
iptables和firewalld在Linux防火墙配置和管理方面存在一些重要的区别。以下是两者之间的主要差异:
总结来说,iptables和firewalld在规则管理、更新方式、规则结构、默认策略、实现方式和易用性等方面存在显著差异。iptables提供了更为底层的控制,但需要更多的技术背景和经验;而firewalld则提供了更为直观和易于使用的界面,使得防火墙管理变得更加简单和方便。
:::
:::success
四表 必须是小写
raw ------------追踪数据包, ----此表用处较少,可以忽略不计。
mangle ------------给数据包打标记,做标记。
nat ------------网络地址转换即来源与目的的IP地址和port的转换。
filter ------------做过滤的,防火墙里面用的最多的表。
#表的应用顺序:raw-》mangle-》nat-》filter
五链:(必须是大写)链里面写的是规则。
PREROUTING -----------------进路由之前数据包
INPUT -----------------就是过滤进来的数据包(输入)
FORWARD -----------------转发
OUTPUT -----------------发出去的数据包
POSTROUTING -----------------路由之后数据包
#所有的访问都是按顺序:
入站:比如访问自身的web服务流量。先PREROUTING(是否改地址),再INPUT(是否允许)到达程序。
转发:经过linux网关的流量.先PREROUTING(是否改地址),然后路由。转发给FORWARD(转发或者丢弃),最后经过POSTROUTING(看看改不改地址。)
出站:源自linux自身的流量.先OUTPUT,再给POSTROUTING(是否改IP)。
#规则顺序:逐条匹配,匹配即停止。
:::
:::success
elk组件
(1)Elasticsearch:负责日志搜索和存储
●ES功能:搜集、分析、存储数据三大功能
●特点:分布式;零配置;自动发现;索引自动切片;索引副本机制
(2)Logstash:负责日志的收集、分析、和处理
(3)kibana:负责日志的可视化
配置他的ip嘛
(4)过程:
logstash安装在需要搜集日志的主机上,负责搜集日志,并发送给es集群(配置文件中input配置日志搜集的位置,filter过滤作用,output配置输出es集群的ip地址),es集群负责存储日志数据,kibana提供可视化日志分析界面
通过 Logstash 将抓取 到的数据发 ElasticSearch 集群,然后进⾏后续的数据分析活动,最后⽤ Kibana 展示结果。⽅便观察获取想要的服务的⽇志信息;
:::
遇到问题及解决方案: Logstash 无法启动,提示 bind address;
解决方法:logstash 会加载所有 conf 格式的文件,删除不必要的文件,保留一个conf文件即可注意:在Logstash配置文件里设置索引要带有时间后缀,以便删除防止日志量大,磁盘紧张;
:::success
Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮你汇总、分析和搜索重要数据日志。c/s
:::
:::success
Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。
是一个开源的数据可视化工具,用于监控和分析大规模的指标数据。它可以将各种数据源(如Prometheus、Elasticsearch、InfluxDB等)中的数据进行可视化展示,帮助用户更直观地理解数据、监控系统性能和分析趋势。Grafana提供了丰富的图表类型和灵活的配置选项,使用户可以根据自己的需求定制展示方式,同时支持报警功能,能够及时通知用户系统出现异常情况。Grafana已经成为许多公司和组织在数据监控和分析领域的首选工具之一。
:::
:::success
Kibana更适合用于日志数据的分析和搜索,而Grafana更适合用于时间序列数据的实时监控和可视化。
是两种流行的开源数据可视化工具,用于实时监控和分析数据。它们有以下一些区别:
:::success
logstash安装在需要搜集日志的主机上,负责搜集日志,并发送给es集群(配置文件中input配置日志搜集的位置,filter过滤作用,output配置输出es集群的ip地址),es集群负责存储日志数据,kibana提供可视化日志分析界面
elasticsearch提供搜集、分析、存储数据三大功能。他的特点有:分布式、零配置、自动发现、索引自动切片,索引副本机制
:::
没了,后期再联系
可以,我这边也喜欢主动去学习新的技术。
:::success
input、filter、output
logstash主要是用来进行日志的搜集、过滤、分析的工具,支持大量的数据获取方式,一般工作方式为C/S。client端安装在需要搜集日志的主机上,server端负责将受到的各节点日志进行过滤,修改并发送到elasticsearch上。
:::
:::success
logstash过滤功能用过,实用filter模块过滤日志或者数据,但是我们用的是filebeat实现过滤功能的,直接在采集的时候过滤不需要的内容,incloud_lines指定记录包含某些内容的行。exclude_lines指定过滤包含某些内容的行。TIPS:与multiline联合使用的时候,会针对合并后的记录再过滤。
:::
:::success
ES集群通过数据复制(不会存在同一台机器上,另外两台也会存储)和分片机制(所有信息分成片 小绿框),将数据分散存储在多个节点上,即使某个节点故障,数据仍可从其他节点获取,同时提供自动故障转移和健康监控功能,确保数据高可用性。
:::
:::success
数据没有搜集过,只搜集过日志信息,用来给开发优化代码。比如nginx的访问日志,其他服务的错误日志,主要搜集error和warn信息。通过filebeat的处理器进行过滤。
:::
:::success
主要区别如下:
举例:
理解各种网络模式的区别和用途,可以让我们为 Docker 容器选择恰当的网络设置。比如:
:::
:::success
**定制化基础镜像
制作mysql镜像:**容器数据持久化****制作redis镜像: **容器数据持久化
:::
:::success
docker ps命令用于列出当前正在运行的Docker容器
docker pull命令用于从Docker Registry或Docker Hub中拉取镜像。
docker images命令用于列出本地主机上的Docker镜像列表。
docker run命令用于在Docker容器中运行一个新的应用程序或服务。
docker info命令用于显示有关Docker守护程序的系统信息,包括Docker版本、操作系统类型和版本、CPU和内存使用情况、镜像和容器数量等。
docker logs命令用于查看Docker容器的日志。它可以显示容器的标准输出和标准错误输出。
docker rm 命令用于删除已经停止的容器。
docker rmi命令用于删除本地的一个或多个镜像。
docker exec命令用于在正在运行的Docker容器中执行命令。
cp
docker stats命令用于查看Docker容器的实时资源使用情况,包括CPU、内存、网络和磁盘等方面的数据,可以帮助用户监控和优化容器的性能。
docker save命令用于将Docker镜像保存成tar包文件。
docker load命令用于将本地文件系统中的Docker镜像加载到Docker引擎中。这些镜像可以是通过docker save命令保存的.tar文件,也可以是通过其他方式获得的Docker镜像文件。
docker import命令用于将本地文件或者目录打包成镜像,可以用于创建一个新的镜像或者将现有的镜像导入到Docker Registry。
docker inspect命令用于查看Docker对象的详细信息,包括容器、镜像、网络、卷和服务等。
docker cp命令用于将容器内的文件或目录复制到主机或从主机复制到容器内。
:::
docker logs --since 2021-01-01 mycontainer
:::success
Docker是一种容器化技术,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,并在不同的环境中进行部署和运行。Docker的优势包括:
总之,Docker的优势在于它提供了一种高效、可移植、隔离和易于管理的容器化技术,使得开发人员能够更轻松地构建、部署和运行应用程序。
:::
:::success
:::
:::success
:::
:::success
**master:**kube-apiserver:**Kubernetes的API服务器,负责接受和处理来自其他组件和用户的API请求,并将它们转化为Kubernetes内部操作。
**kube-controller-manager(肯戳类迈内街儿):**Kubernetes的控制器管理器,负责监控Kubernetes集群中各种资源的状态,并进行自动化的故障检测、故障恢复、自动伸缩等操作。
**kube-scheduler(思改就了):**Kubernetes的调度器,负责为新的Pod分配合适的Node,并将Pod绑定到相应的Node上。
node:
**kubelet(库伯来特):**Kubernetes的节点代理,负责管理节点上的Pod,并与其他组件协调完成Pod的创建、启动、监控和销毁等操作。
**kube-proxy:**Kubernetes的代理,负责为Service提供负载均衡和服务发现功能,并将外部网络请求路由到相应的Pod上。
**etcd:**Kubernetes的数据存储,负责存储Kubernetes集群中的所有状态数据,包括集群配置、资源对象的状态和所有Pod的运行状态等。
**coredns:**Kubernetes的DNS解析服务,为Pod提供DNS解析服务,并支持Kubernetes服务发现功能。
**ingress-controller(一隔瑞士肯戳了):**Kubernetes的入口控制器,用于管理和路由外部网络流量到集群内的服务。
Master节点
Master节点负责集群的管理,相关联的组件有ETCD数据库、Controller Manager、Scheduler、kube-apiserver。Master节点协调集群的各个活动,例如资源调度、动态伸缩、维护应用状态以及滚动更新等。
首先过滤掉不满足条件的节点,这个过程成为预选(predicate)
PodFitsResources:节点上剩余的资源是否大于 pod 请求的资源
PodFitsHost:如果 pod 指定了 NodeName,检查节点名称是否和 NodeName 匹配
PodFitsHostPorts:节点上已经使用的 port 是否和 pod 申请的 port 冲突
PodSelectorMatches:过滤掉和 pod 指定的 label 不匹配的节点
NoDiskConflict:已经 mount 的 volume 和 pod 指定的 volume 不冲突,除非它们都是只读
然后把节点按照优先级进行排序,这个过程叫优选(priority)
LeastRequestedPriority:通过计算 CPU 和 Memory 的使用率来决定权重,使用率越低权重越高。换句话说,这个优先级指标倾向于资源使用比例更低的节点
BalancedResourceAllocation:节点上 CPU 和 Memory 使用率越接近,权重越高。这个应该和上面的一起使用,不应该单独使用
ImageLocalityPriority:倾向于已经有要使用镜像的节点,镜像总大小值越大,权重越高
关于调度的亲和性(nodeAffinity)、反亲和性、污点(Taint)、容忍(Toleration)
调度亲和性等特性
Node节点
Node主要为应用程序提供运行环境,并接受Master管理,并按照Master要求进行对容器进行管理。主要组件包括kubelet、kube-proxy、CNI网络插件等。
iptables模式,kube-proxy默认模式,当前模式下,kube-proxy监听service和endpoint的变化,当service创建时,kube-proxy在iptables中追加新的规则,对于service中的每一个endpoint,会在iptables中追加一条DNAT规则,将目的地址设置为真正提供服务的pod地址;再为service追加规则,设定动作为跳转到对应的endpoint规则上
ipvs模式,ipvs在INPUT阶段也是基于netfilter的hook功能,与iptables类似。但是转发规则是通过工作在内核空间下的hash表作为存储的数据结构。在这种模式下,只需要通过ipset来验证具体的请求是否满足某条规则。当service变化时,只需要更新ipset记录,不需要改变iptables规则链,因此可以保证iptables中的规则不会根据service的创建越来越多。同时,ipvs的性能也高于iptables,因为当service变化时,ipvs只需要对特定的hash表进行更新,而iptables则需要更新整个规则表。
kubernetes先创建pause容器生成对应的netns
CNI driver根据配置调用具体的网络插件(flannel或者calico)
CNI插件给pause容器配置具体的网络,pod中的其他容器都使用pause网络
当容器删除是,回收网络资源
创建容器挂载的cni配置文件;
从api-server中获取本节点的pod-cidr,生成配置文件subnet.env;
如果是vxlan模式,则创建一个名为flannel.1的vxlan设备,把这个设备的IP地址和MAC地址以及本节点的IP地址记录到节点的注解中;
启动一个协程,不断检查本地主机的路由信息,如果检查到缺失,则重新创建;
从api-server订阅资源变化的事件,维护路由表,邻居表以及fdb表。
当集群中新增一个节点时,CNI的初始化流程如下:
6. 新增一条到新增节点pod网段的路由,并指定从flannel.1设备走,下一跳为新增节点的vxlan设备的IP;
7. 新增一条邻居表项,指定新增节点的vxlan设备的MAC地址信息;
8. 新增一条fdb表项,指定到新增节点vxlan设备的MAC的下一跳为新增节点的主机IP
calico工作组件
felix:运行在每个node节点上的agent,主要负责网络接口的管理、监听,路由,ARP管理、ACL管理和同步,状态上报等;
BIRD:用于监听Felix注入的路由信息,通过BGP协议广播给其他node节点上的BIRD,使路由保持同步
etcd:分布式键值数据库,主要用于网络信息的存储,保持与集群网络一致
router reflector(RR):在大型网络中,仅仅使用BGP Client形成mesh网络会受到规模限制,所以RR与集群中所有的node节点的BGP Client互通,进行路由通告,然后各个节点只需要从RR中获取路由即可,形成星型网络,极大的提高了路由同步效率。
calico的两种网络模式
IPIP
IPIP模式是将一个IP层封装进IP层的一个tunnel,pod网络通过与目标pod网络的主机IP形成一个点对点的tunnel。
BGP
BGP模式通过维护集群网络的IP路由信息来保障路由可达性,没有隧道等其他封装开销,完全由主机维护各节点的路由表进行通信。
:::
:::success
Docker-compose是一个基于Docker的单主机容器编排工具,它只能在一台机器上启动和管理容器。而Kubernetes则是一个跨主机的集群部署工具,它可以管理多个节点,并自动进行资源的分配和负载均衡。
:::
:::success
答:Node亲和性,**指的是pod和node节点之间的亲和性,**也就是控制pod调度到node的策略。
可以给node节点打标签,在创建pod的yaml文件中,去设置条件,匹配node节点的标签;
里面有硬限制、软限制
硬限制是匹配到pod才能正常分配到node节点,匹配不到pod运行失败
软限制是尽量满足匹配规则,如果不满足,也会将pod调度到资源充分的node节点
:::
可以自己跟面试官举个例子
:::success
答:pod亲和性性,是pod与pod之间的调度策略;我们一般还是通过匹配标签来设置策略
首先有一个正在运行的pod,上面已有标签;
那么运行新的pod的时候,这个pod会去设置亲和性策略;
有硬限制,软限制
硬限制是必须满足策略,pod才能正常调度;
软件只是尽量满足策略,如果不满足,pod也会正常调度
:::
:::success
:::success
答:与pod亲和性相反,匹配到则不调度到该节点;
也有硬限制、软限制
硬限制是必须满足策略,pod则会调度到其他node上;
软限制是尽量满足策略,如果不满足,pod也会正常调度,但是首先会调度到其他没有限制的node节点
:::
:::success
污点是设置到node的属性
污点类型有3种;
Noschedule:pod不会调度到本节点,对原来的pod无影响
PreferNoschedule:pod尽量不调度到本节点,如果没有其他节点,也会接受调度
NoExecute:pod不会调度到本节点,还会驱逐原有的pod
:::
:::success
容忍一般是结合污点使用;容忍是设置到pod上
pod若想调度到存在污点的node节点上,就需要给pod设置对应的污点容忍;
比如K8s-master节点自带污点,正常情况下,pod不会调度到master节点;
但是可以设置pod的容忍,让pod调度到k8s-master节点。
:::
:::success
k8s secrets用于存储和管理一些敏感数据,比如密码,token,密钥等敏感信息。它把 Pod 想要访问的加密数据存放到 Etcd 中。然后用户就可以通过在 Pod 的容器里挂载 Volume 的方式或者环境变量的方式访问到这些 Secret 里保存的信息了,从名字上看,我们应该也能想到,有一些不太方便向外人展示的信息加密是secret的主要功能。
:::
:::success
ConfigMap是一种API对象,用来将非加密数据保存到键值对中。可以用作环境变量、命令行参数或者存储卷中的配置文件,从名字上看,我们也应该能想到,此类资源主要是做配置映射的,当然了,配置的一般内容是包括环境变量,命令行参数以及配置文件的形式这些的。
ConfigMap可以将环境变量配置信息和容器镜像解耦,便于应用配置的修改。如果需要存储加密信息时可以使用Secret对象。主要作用就是为了让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。
:::
:::success
:::
:::success
kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制pod的具体状态和行为。
部分控制器类型如下:
ReplicationController 和 ReplicaSet:都不支持热更,rs可以指定标签选择器
Deployment
DaemonSet
StatefulSet
Job/CronJob
HorizontalPodAutoscaler
:::
:::success
:::
部署dashboard官方链接:https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/web-ui-dashboard/#uploading-a-yaml-or-json-file
:::success
Service是为了管理具有相同功能的一组Pod而定义的一种资源对象
通过Pod的Label Selector访问Pod组。
:::success
此外,还有一些其他资源对象,如PersistentVolume (PV) 和 PersistentVolumeClaim (PVC),它们用于管理持久化存储。
请注意,Kubernetes是一个不断发展的平台,新的资源对象和功能可能会随着时间的推移而添加。因此,为了获取最新的信息,建议查阅Kubernetes的官方文档或相关社区资源。
:::
:::success
k8s
k8s驱动:在1.22中之后,如果用户没有设置Cgroupfs驱动程序,默认是systemd
pod:
亲和性:node节点之间的亲和力,pod之间的亲和力,pod之间的反亲和力
污点:Taints
容忍:Toletations
健康检查:探针规则有存活探针livenessProbe
就绪探针readinessProbe
启动探针startupProbe
探针有三种探测方式:exec、tcpSocket和httpGet
镜像的拉去策略有三种:ifNotPresent、always和never
secret:用来存放小片的敏感数据,比如密码,token,秘钥
创建秘钥有两种方法:
1、使用命令方式
2、用yaml文件的方式
私钥的类型有:generic 这个是模糊的类型 opaque
还有一种是私仓的模式:docker-registry
要想进行热更新需要两个条件:
1、使用卷挂载
2、还要使用yaml方式进行创建
否则是没办法进行更新的
configmap:这个资源对象存储的数据一般都不需要进行加密,一般都是存储一些配置文件的类型
创建ConfigMap的方式也算是两种:
1、命令行的方式
2、yaml的方式
命令行的方式有:<br /> 1、指定参数进行创建、<br /> 2、指定文件的形式进行创建<br /> 3、指定目录的方式进行创建<br /> 使用ConfigMap的方式有三种:<br /> 1、环境变量方方式<br /> 2、通过pod方命令行进行运行<br /> 3、使用volume的方式进行挂载<br /> 在挂载时如果不使用subPath会导致目录会被覆盖<br /> 这个时候可以引用一个subPath参数<br /> 但是使用了之后,这个配置文件不支持热更新了
configmap的热更新也必须是使用yaml文件,而且不能使用subPath参数
sa:ServiceAccount主要是给pod提供一个身份认证,分配权限问题,提高系统的安全性。
clusterrole:集群角色
rc:ReplicationController副本控制器
设置副本的数量,根据标签进行保持pod的数量,不支持镜像的更新
还可以通过手动扩容和缩容
rs:ReplicaSet也是副本控制器,跟rc的区别差不多
Deployment:副本控制器,可以控制pod的数量,支持手动的扩容和缩容,还支持镜像的更新。
DaemonDets:给每个节点运行一个pod副本,当有节点加入时,会给他新增一个pod,当节点移除时,会把pod收回。
sts:StatefulSet有状态的
稳定的,唯一的网络标识符:每个Pod都拥有一个基于其顺序索引的稳定的主机名
稳定的、持久的存储
有序的、优雅的部署和缩放
emptyDir:临时存储,创建pod时,会在node节点上容器申请一个临时的目录,但是跟随者容器的生命周期存活,当容器删除目录也会随之删除,一般emptyDir用于测试。
hostPath:
PV:PersistentVolume是外部存储系统中的一块存储空间,由管理创建和维护的。与Volume一样,PV具有持久性,生命周期独立于Pod
capacity:指定PV的容量
accessModes:指定访问模式
ReadWriteOnce:PV能以read-write模式mount到单个节点
ReadOnlyMany:PV能以read-only模式mount到多个节点
ReadWriteMany:PV能以read-write模式mount到多个节点
persistentVolumeReclaimPolicy:指定PV的回收策略
Retain:需要管理员手动回收
Recycle:清除PV中的数据
Delete:删除Storage Provider上对应存储资源
storageClassName:指定PV的class的类型
PVC:PersistentVolume是对PV的申请Claim。PVC通常是由普通用户创建和维护。当pod需要分配资源时,用户可以创建一个PVC,指明资源存储的容量大小和访问模式等信息,Kubernetes会查找并提供满足条件的PV。
有了pvc,用户只需告诉k8s需要什么样的存储资源,而不必关心真正的空间从哪里分配,如何访问等底层细节信息。这些Storage Provider的底层信息交给管理员来处理,只有管理员才应该关心创建PV的细节信息。
PV的静态供应:这个是我们提前创建一个PV,然后PVC去绑定PV,之后在Pod中使用
PV的动态供应:是在没有满足PVC条件的PV,会自动创建PV。相比静态供给,动态供给给有明显的优势;不需要提前创建PV,减少了管理员的工作量,效率高。
当引用副本控制器的时候是很方便的,不需要一个一个的创建pv
Service:暴露pod,当删除pod之后,客户能正常的感知并访问,负载均衡
属于四层负载
service是按照标签的形式去寻找pod的,
ClusterIP、NodePort,LoadBalancer和ExternalName
ClusterIP:这个是负责集群内部分配给集群内部使用的Service的IP地址
NodePort:在ClusterIP的基础之上,为集群内的每台物理机绑定一个端口,外网通过任意节点的物理机IP加端口来访问服务。
endpoint:k8s集群的一个资源对象,存储在etcd中,用来记录一个service对应的所有pod的访问地址。
里面记录的关系会根据pod的改变而更新
Ingress:属于七层负载,暴露服务
由2中东西进行组成,一种是Ingress-Controller控制器
一种是Ingress规则
可以允许域名访问,支持ssl/TLS
RBAC:Role-Base Access Control 基于角色的访问控制
用户:k8s有两种用户,一种是User,一种是Service Account<br /> 其中User是给人用的,Service Account给进程用的,让进程有相关权限<br /> 角色:是一系列权限的集合,例如一个Role可包含读取和列出Pod的权限【ClusterRole和Role类似,其权限范围是整个集群】
**Role与ClusterRole**<br /> Role:角色可以由命名空间内的Role对象定义,一个Role对象只能用于授权对某一单一命名空间中资源的访问权限<br /> ClusterRole:整个Kubernetes集群范围内有效角色则通过ClusterRole对象实现
如何对pod提权:需要先创建一个serviceAccount声明,然后通过clusterRole和clusterRoleBinding来进行绑定,实现sa具有指定clusterRole的角色的权限,然后在需要提权的pod里面进行service Account的引用就可以对pod进行提权了
:::
:::success
当管理 Kubernetes 环境时,以下是一些常用的 kubectl 命令,kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互和管理。
配置和管理
1.查看集群信息
** kubectl cluster-info**
2.查看集群节点
** kubectl get nodes**
3.查看命名空间
** kubectl get namespaces**
4.设置当前使用的命名空间
kubectl config set-context --current --namespace=<namespace-name>
5.查看 Pod
kubectl get pods
6.查看 Pod 的详细信息
kubectl describe pod <pod-name>
7.查看服务
kubectl get services
8.查看特定命名空间下的资源
kubectl get pods/services/deployments -n <namespace-name>
9.查看日志
kubectl logs <pod-name>
10.进入 Pod 内部
kubectl exec -it <pod-name> – /bin/bash
11.创建资源
kubectl apply -f <yaml-file>
12.删除资源
kubectl delete <resource-type> <resource-name>
13.扩展 Pod 的副本数
kubectl scale deployment <deployment-name> --replicas=<replica-count>
14.查看集群事件
bash
kubectl get events
调试和故障排除
15.检查节点
kubectl describe node <node-name>
16.检查网络
kubectl get services --all-namespaces
17.查看 Pod 的 IP 和端口
kubectl get pod <pod-name> -o wide
18.查看 Pod 的日志
kubectl logs <pod-name>
19.查看 Pod 的描述
kubectl describe pod <pod-name>
20.查看特定标签的 Pod
kubectl get pods -l <label-key>=<label-value>
安全和访问控制
21.查看角色和角色绑定
kubectl get roles
kubectl get rolebindings
22.查看服务账户
kubectl get serviceaccounts
23.查看授权策略
kubectl get clusterroles
kubectl get clusterrolebindings
其他常用命令
24.查看 Kubernetes 版本
kubectl version
25.查看 API 资源
kubectl api-resources
26.查看特定资源的详细信息
kubectl describe <resource-type> <resource-name>
27.获取帮助
kubectl --help
这些是一些常用的 kubectl 命令,可用于管理和调试 Kubernetes 集群中的应用和资源。根据需要,您可以使用这些命令来执行各种操作,包括创建、删除、扩展和监视 Kubernetes 资源。
:::
:::success
Q:什么是Prometheus?
**A:**Prometheus是一个开源的系统监控和警报工具集,用于收集、存储和查询时间序列数据。
Q:Prometheus的主要组件有哪些?
**A:**Prometheus由以下主要组件组成:
Q:Prometheus的数据模型是什么?
**A:**Prometheus使用时间序列数据模型,其中每个时间序列由唯一的标识符(metric name和一组标签)和对应的时间戳-值对组成。
Q:如何在Prometheus中定义监控指标?
**A:**可以使用Prometheus的自有查询语言PromQL来定义监控指标。通过指标名称和标签来唯一标识监控指标,并使用各种函数和操作符来进行数据查询和聚合。
Q:如何配置Prometheus进行目标抓取?
**A:**可以通过Prometheus的配置文件prometheus.yml来定义抓取配置。在配置文件中指定要抓取的目标(如Exporter的地址和端口),并设置抓取频率等参数。
Q:Prometheus如何处理数据存储和保留策略?
**A:**Prometheus使用本地磁盘存储时间序列数据。数据存储采用分块压缩格式,同时可以配置数据保留策略,以控制数据的存储时间和保留期限。
Q:如何设置警报规则并配置Alertmanager?
A:可以使用Prometheus的配置文件prometheus.yml来定义警报规则,并配置Alertmanager的通知方式和接收者。
Q:Prometheus支持哪些查询操作和聚合函数?
**A:**Prometheus支持丰富的查询操作和聚合函数,如过滤、计算率、求和、平均值、最大值、最小值等,以便对监控指标进行灵活的数据查询和分析。
Q:什么是Prometheus的服务发现机制?
**A:**Prometheus提供多种服务发现机制,如静态配置、文件发现、Consul、Kubernetes等,用于自动发现和抓取要监控的目标。
Q:Prometheus的可视化和查询界面是什么?
**A:**Prometheus提供一个内置的可视化和查询界面,称为Prometheus Web UI,可以在浏览器中访问,并通过PromQL进行数据查询和展示。
Q:什么是Prometheus的推模式(Push)和拉模式(Pull)抓取?
**A:**Prometheus的推模式抓取是指被监控的目标主动向Prometheus发送指标数据,而拉模式抓取是Prometheus主动从目标中拉取指标数据。
Q:如何在Prometheus中配置持久化存储?
A:可以使用Prometheus的–storage.tsdb.path参数来配置持久化存储路径,以便将时间序列数据持久化保存在磁盘上。
Q:Prometheus是否支持高可用性(HA)部署?如果是,如何实现?
A:是的,Prometheus支持高可用性部署。可以通过使用多个Prometheus实例并结合使用服务发现和联邦(Federation)来实现高可用性。
Q:什么是Prometheus的Alertmanager?它的作用是什么?
**A:Prometheus的Alertmanager是用于处理和发送警报通知的组件。**它能够根据预定义的警报规则接收来自Prometheus的警报,并根据配置的通知方式发送警报通知。
Q:什么是Prometheus的持续查询(Continuous Queries)?
**A:**Prometheus的持续查询是预定义的查询语句,定期计算和聚合时间序列数据,并将结果存储在新的时间序列中,以供后续查询和展示使用。
:::
:::success
mysql端口3306 版本5.7稳定
Nginx端口80 版本1.24.0
Ssh 端口22
http 端口80
https 端口443(CA中心发ssl协议)
NFS端口2049
RPC端口111
DNS端口Tomcat端口8005 版本:8.5
jenkins版本:2.414
jdk版本:11
zabbix版本:5.0
gitlab版本:16
maven版本: 3.8.7
(1) Mysql 5.7 (2) jdk 1.8 (3) nginx 1.20
(4) redis 6.0 (5) tomcat 8.5.45 (6) zabbix 5.0
(7) jenkins 2.346 (8) elk 5.4 (9) gitlab 12.6.3 (10) docker 17.03.2 (11)kubernetes 1.27.4
(1) http 80 (2) https 443 (3) ftp 21 (4) ssh 22 (5) Mysql 3306 (6) redis 6379 (7) nginx 80 (8) tomcat 8080 (9) zabbix-server 10051 (10) zabbix-agent 10050 (11) ES 9200 (12) kibana 6501 (13) grafana 3000 (14) jenkins 运行在 tomcat 8080 (15) rabbitmq web 页面用的是 15627 (16) java 链接的用 567
:::
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。