公司基础问题
- 上家公司是做什么的,用的是什么服务器?有多少台物理服务器,配置是什么?
物理服务器,云服务器,虚拟机。虚拟机创建在物理服务器上。虚拟机与云服务器区别:虚拟机是基于服务器创建出来的,云服务器是公司买的,相当于是一个云端的虚拟机。
一台物理服务器一般配置15台左右的虚拟机。
服务器厂商:戴尔,惠普
磁盘:几块,磁盘容量
内存:不同业务有不同内存
CPU核心数:分配给不同业务核心数也不同。
- 公司用的服务器是什么型号?
戴尔:PowerEdge R640 机架式服务器,处理器是第二代英特尔至强,28核心,
- 工作中大量时间都用在哪里
- 日常维护都做什么
- Zabbix版本?
- ELK版本?
- 数据库的操作,表和字段,业务的相关的表结构
- 服务器比较卡顿,怎么解决?
- 外包公司都和什么公司合作?
- 你都做过什么项目?
-
基础命令问题
如何删除所有的以.txt结尾的文件?
find 路径 -name ‘*.txt’ -exec rm -rf {} \;
- Linux常用的指令?
- 如何检查是否可以连通其他服务器的80端口,是否可以连通本机数据库的3306端口?
检查其他服务器端口:1. ssh -v -p 端口 user@IP 2. curl IP:PORT 3. wget IP:PORT 4.telnet IP PORT(telnet命令需要自己下载)
连接本机数据库:ssh -v -p 3306 root@127.0.0.1
- 安全关机和重启
关机:shutdown -r now halt poweroff init0
重启:reboot
- 压缩和解压的命令
压缩:tar cvf (打包为tar.gz文件) tar jcvf(打包为.bz2) tar zcvf(打包成.gz文件) gzip bzip2 xz
解压:tar xf unzip gzip-d gunzip bzip2-d
- 查看磁盘空间大小,网卡运行情况,网卡配置文件的路径。
查看磁盘空间:df -h du -h
网卡运行情况:netstat -ta ifconfig
网卡配置文件路径:/etc/sysconfig/network-scripts/
查看文件大小为一百兆的所有文件
find 路径 –size +100M
读写执行权限,修改权限的命令语法
chmod 权限(r=4 w=2 x=1) 文件名
chomod [参数][augo][+-=][rwx] 文件名
- 数据库增删改查命令
创建库:create database 库名 创建表:create table 表名
查看库:show databases 查看表:show tables
删除库:drop database 库名 删除表:drop table 表名
查询表:select * from 表名
按字段查询:select 字段 for 表名 where条件
避免查询重复语法结构:select distinct 字段名 from 表名
删除表数据:delete from 表名
- 查看端口是否被占用
lsof -i:prot netstat-lantp|grep port nmap -sV -p port 主机IP
基础概念问题
- CPU的利用率和CPU的负载有什么不同?
CPU利用率:显示的是程序在运行期间实时占用的CPU百分比;cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进入wait。
CPU负载:是指某段时间内占用cpu时间的进程和等待cpu时间的进程数,这里等待cpu时间的进程是指等待被唤醒的进程,不包括处于wait状态进程。
CPU利用率高,并不意味着CPU的负载大。两者之间没有必然的关系。无论CPU的利用率是高是低,跟后面有多少任务在排队没有必然关系。
举例来说:如果我有一个程序它需要一直使用CPU的运算功能,那么此时CPU的使用率可能达到100%,但是CPU的工作负载则是趋近于“1”,因为CPU仅负责一个工作嘛!如果同时执行这样的程序两个呢?CPU的使用率还是100%,但是工作负载则变成2了。所以也就是说,当CPU的工作负载越大,代表CPU必须要在不同的工作之间进行频繁的工作切换
- NFS和FTP服务有什么区别?
文件传送协议FTP(File Transfer Protocol):是I·nternet上使用比较广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。FTP屏蔽了各种计算机系统的细节,因此适用于在异构网络中任意计算机之间传送文件。它的基本应用就是将文件从一台计算机复制到另一台计算机中。它要存取一个文件,就必须先获得一个本地文件的副本,如果修改文件,也只能对文件的副本进行修改,然后再将修改后的文件副本传回到原节点。
NFS:最初应用于UNIX操作系统下,它允许应用进程打开一个远地文件,并能够在该文件中某一个特定位置上开始读写数据。
- 四层和七层负载均衡的差别?
从原理上说,四层负载均衡,是基于IP+端口的负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。七层负载均衡,是基于虚拟的URL或者主机IP的负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
从应用场景上说,七层负载均衡,可以使整个网络更“智能化”,提高了应用系统在网络层的灵活性,其次七层负载均衡的安全性要高于四层负载均衡,四层负载均衡,效率高于七层负载均衡,对端口没有限制,在结构上也要比七层负载均衡更加简单。
四层负载与七层负载最大的区别就是效率与功能的区别。四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,而七层负载均衡的优势则体现在功能多,控制灵活强大。
四层负载均衡的软件有:LVS Haproxy 硬件负载均衡器有:F5
七层负载均衡软件有:Nginx HAproxy Apache
- 高可用和负载均衡的不同?
负责均衡服务器根据负载均衡算法(轮询,随机,哈希,权重等)来分发请求到不同的主服务器。
每个主服务器都是等价的,都可以完成相同的功能
高可用是一种面向风险设计,使系统具备控制风险能力,提供更高的可用性。
负载均衡软件有:Nginx LVS Haproxy
高可用软件有:Keepalived
- Shell脚本的变量,预定义变量,位置变量,环境变量,自定义变量的含义?
预定义变量:是系统自带的变量。
位置变量:当一个脚本执行时,后面可以跟多个参数,通常使用位置变量来表示这些参数。
环境变量:是指在操作系统中用来指定操作系统运行环境的一些参数
自定义变量:是自己设置的变量,格式为:变量名=变量值,变量名必须以字母或者下划线开头,区分大小写。
- 接触过什么类型的操作系统,Linux有什么发行版本,centos6和centos7差别有哪些?
接触过Centos7的操作系统
Linux发行版本有:1. Red Hat linux 2. Ubuntu Linux 3.SuSE linux
Centos6和Centos7的区别:
内核不同:centos6的内核是2.6.x-x,centos7的内核为3.10.x-x
启动引导不同,centos6设置boot为200M就行,但Centos7的boot至少为1024M
启动技术不同,centos6为Upstart启动,Centos7为systemd技术,并行启动
防火墙不同,centos6为iptables,centos7为firewalld
文件系统不同,centos6为ext4,centos7为xfs
- IPtables与firewalld有什么不同?
1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效; 2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。3、firewalld使用区域和服务而不是链式规则。4、firewalld默认是拒绝的,需要设置以后才能放行。而iptables默认是允许的,需要拒绝的才去限制
- 你觉得什么场景适于七层负载均衡什么场景使用于四层负载均衡?
平均日流量PV大于1000万的情况下,可以使用四层负载均衡。因为四层负载均衡的抗负载能力强,并且工作稳定,不占用太多的流量。在日流量小于1000万的时候,可以选择使用七层负载均衡。因为七层负载均衡安装简单,对网络的依赖度比较小。如果日流量特别大的情况下,我建议使用四加七的负载均衡模式,四层负载均衡可以保证七层负载均衡的高可用性。
- 数据库缓存服务有什么?有什么区别?
缓存数据库:Memcached,Redis。
Memcached, 支持简单数据类型 ,不支持数据持久化存储 ,不支持主从,不支持sharing(代码层次通过hash可以实现
Redis,数据类型丰富,支持set、list等类型,支持数据磁盘持久化存储|支持主从,支持sharding(redis 3.0开始支持
- 磁盘阵列,Raid都有哪些?
所有服务器在安装操作系统之前,都必须先做Raid,也就是磁盘阵列,Raid保证了数据的完整性并防止数据丢失。
常用的Raid级别有:0、1、5、6、10。级别10是1和0的组合。
Raid0——数据条带卷,最少需要两块磁盘,分别往每一块磁盘上写一部分数据。其优点是:读写速度快,磁盘利用率是百分之百。缺点是:不提供数据冗余,无数据检验,不能保证数据的正确性,存在单点故障。适用于对数据完整性及安全性要求不高,对读写效率需求大的场景。
Raid1——镜像Raid,通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。一般需要两块磁盘,每块磁盘上都会存储一份完整数据,安全性较高,但磁盘利用率低。其优点是:提供数据冗余,数据双倍存储安全性高支持容错,读速度快。其缺点是:写入速度慢,无数据校验,磁盘利用率不高。适用于存放重要数据,如数据存储领域。
Raid5——最常见的Raid等级,最少需要使用3块磁盘。它的校验数据分布在阵列中的所有磁盘上。Raid5的磁盘上同时存储数据和校验数据。当一个数据盘损坏时,系统可以根据其他数据块和对应的校验数据来重建损坏的数据。其优点是:有校验机制,可以找回丢失的数据,数据可以通过校验计算得出,冗余磁盘(需要四块磁盘将其中一块做热备),当某一块磁盘坏掉后,冗余磁盘会自动替换上。读写速度高,磁盘利用率高。其缺点是:使用的磁盘越多,相应的安全性就越差。
Raid6——基于Raid5上,增强了数据保护,至少需要四块磁盘,两块为校验位。Raid6引入双重校验的概念。它可以保护阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。其优点是:容错性好,允许两块磁盘同时坏掉,读写快。良好的随机读性能,有校验机制。其缺点是:写入速度差,成本较高。
Raid10——混合Raid。先做镜像,在做条带。其优点是:较高的IO性能,有数据冗余,无单点故障,安全性能高。其缺点是:成本稍高。适用于,既有大量数据需要存取,同时又对数据安全性要求严格的领域。
技术性问题
MySQL
- MySQL主从怎么部署?,如何查看主从状态?
主从部署方式使用过binlog日志,Gtid两种方式,binlog日志的主从复制,是在MySQL主服务器端的/etc/my.cnf文件内添加log-bin参数,并设置server-id,在MySQL从服务器上的/etc/my.cnf文件内添加server-id参数,进入数据库创建用户并设置对应权限,并查看binlog日志的名字和起始位置,在从服务器上进行change master to操作,配置对应参数,然后使用start slave 命令启动。使用show slave status\G命令查看主从状态。
Gitd主从复制,Master端在MySQL的配置文件中打开gtid_mode参数,并设置为ON状态,设置server-id参数,添加enforce-gtid-consistency参数,保证事务的安全性,slave端配置文件参数与主服务器一致,但server-id参数需要修改,开启relay_log_recovery = on(中继日志)参数,添加后重启数据库,在数据库内添加change master to 配置对应参数,使用start slave命令启动,show slave status\G查看主从状态。
- 数据库如何备份?
逻辑备份是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现。
物理备份就是备份数据文件,有以下几种:
Tar方式备份数据库,先停止数据库,将/var/lib/mysql/*进行tar打包即可。恢复数据,将压缩包解压至/va/lib/mysql/下即可
Xtarbackup备份数据库,有三种备份方式,分别是:完全备份,增量备份,差异备份,均使用innobackupex命令
完全备份是将数据库的所有数据都进行备份。
增量备份是备份以上一次备份为基础,到当前数据库状态进行增量备份 每次备份,incremenaldiri-basedir 指定为上次备份存放的绝对路径
差异备份是以上一次全备为基础,只备份当前数据库与上次全备不同的数据。每次备份,-incremental-basedir指定为完全备份存放路径
- 数据库主从原理
数据库有个bin-log二进制文件,记录了所有的SQL语句,主从复制就是将主数据库的bin-log文件内的数据复制一份,让其在从数据库的relay-log(中继日志)重做日志文件中再次执行这些SQL语句。
- 主从数据不一致,从库无法读取主库数据怎么解决?
首先进入从数据库,查看主从状态来判断,是什么原因导致的从库无法读取,通过不同的错误环境来进行错误的处理。常用的方法是查看是那一条数据无法同步,将其跳过就能正常使用主从复制,这个方法只适用于对数据库一致性要求不高的情况下;另外的方式就是完全重做主从复制,先进入主数据库进行锁表,防止新的数据写入,导致出现问题,然后进行数据库备份操作,将备份数据传到从服务器上,然后停止从库的状态,到从库中使用mysql命令,导入数据备份,再次设置从库同步的配置参数,然后再次开启同步,即可。
- 数据库备份方式有几种,有什么区别?
有三种备份方式,分别是:完全备份,增量备份,差异备份
完全备份是将数据库的所有数据都进行备份。
增量备份是备份以上一次备份为基础,到当前数据库状态进行增量备份 每次备份,incremenaldiri-basedir 指定为上次备份存放的绝对路径
差异备份是以上一次全备为基础,只备份当前数据库与上次全备不同的数据。每次备份,-incremental-basedir指定为完全备份存放路径
- MySQL事务是什么?
事务主要用于处理操作量大,负载程度高的数据。在MySQL中只有使用了Innodb数据库引擎的数据库或者表才支持事务,事务必须满足四个条件,原子性,一致性,隔离性,持久性。
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
- MySQL数据库的引擎有哪些?
InnoDB MyISAM MEMORY
- INnodb引擎的特性?
支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
- MySQL数据类型有哪些?
数据类型有:数值类,字符串类,时间和日期类
数值类:TINYINT SMALLINT MEDIUMINT INT BIGINT
字符串类:CHAR系列 :CHAR VARCHAR TEXT系列 :TINYTEXT TEXT MEDIUMTEXT LONGTEXT
枚举类型:ENUM 集合类型:SET
时间日期类:DATE TIME DATETIME TIMESTAMP YEAR
- MySQL约束条件有什么?
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录,不可以为空 UNIQUE + NOT NULL
FOREIGN KEY (FK) 标识该字段为该表的外键,实现表与表(父表主键/子表1外键/子表2外键)之间的关联
NOT NULL 标识该字段不能为空
UNIQUE KEY (UK) 标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值
- MySQL事务的四个隔离级别?
事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- MySQL相较于Redis有什么缺点?
mysql是关系型数据库,主要⽤于存放持久化数据,将数据存储在硬盘中,读取速度较慢。不易扩展,扩展操作流程繁琐,并且成本较高。计算能力比较繁琐,如果频繁访问数据库,会导致运行效率过慢,也会加重数据库的负载。整体的集群架构复杂,所需服务器相对于Redis的配置要求高,因为关系型数据库的固定表结构,以至于数据库的灵活性不高。并且库于库之间的关系过于复杂。
- MySQL优化都有什么?
从连接配置上优化:
增加可用连接数,修改环境变量max_connections,默认情况下服务端的最大连接数为151个。
及时释放不活跃的连接,系统默认的客户端超时时间是28800秒(8小时),我们可以把这个值调小一点。
架构上优化:
使用Redis缓存数据库,将实效性要求不高的数据放到Redis中,以此来减轻数据库压力并提升查询效率。
对数据库做主从复制,以及mycat读写分离,让不同的服务器进行不同的操作,以减轻数据库的压力并提高效率
通过使用消息队列降低数据库的压力,不管同时有多少个用户请求,先存入消息队列,然后系统有条不紊地从消息队列中消费请求。
- Innodb支持锁表锁行吗?其他引擎支持吗?
MyISAM和MEMORY存储引擎采用的是表级锁,页级锁仅被BDB存储引擎支持,InnoDB存储引擎支持行级锁和表级锁,默认情况下是采用行级锁。
Nginx
- Nginx upstream分配方式
轮询 weight ip_hash fair(第三方插件) url_hash(第三方插件)
- Nginx核心文件在哪,启动文件在那个路径
YUM安装的Nginx核心文件在/etc/nginx/nginx.conf,以及conf.d下。如果是源码安装的话,一般是在指定的安装路径下的conf下。
启动文件,centos低于7的版本的话,是在/etc/,7.0一般是在/usr/lib/systemd/system/nginx.service。
- Nginx代理参数
proxy_pass 真实服务器的地址,可以是ip也可以是域名和url地址
proxy_set_header 发往后端服务器的请求头信息
proxy_connect_timeout TCP的连接时间
proxy_read_timeout 响应时间
proxy_send_timeout 返回时间
- Ngxin负载均衡和Haproxy负载均衡有什么区别?
nginx工作第7层,支持http应用本身分流,nginx 对网络依赖很小,nginx安装简单也稳定,流量日pv <=1000万nginx足以能撑住,适用于专注于Web界面的公司。
haproxy是支持虚拟主机的,可以工作在4、7层(支持多网段)
haproxy的优点能够补充nginx的一些缺点,比如支持session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
haproxy跟lvs类似,本身就只是一款负载均衡软件;单纯从效率上来讲haproxy会比nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
haroxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡
- Nginx负载均衡和LVS负载均衡有什么不同?
lvs:工作在第四层(传输层),抗负载能力很强、工作稳定、不占什么流量、pv超过1000万可用lvs
nginx:nginx工作第7层(应用层),支持http应用本身分流,lvs没有这个功能,nginx 对网络依赖很小,nginx安装简单也稳定
- Nginx优化怎么做?
修改Worker_processes参数,增加Cpu核心数。最大可设为8个,8个以上的性能提升不大,并且会降低稳定性。与其对应修改Cpu亲和力worker_cpu_affinity参数,例如四核为0001 0010 0100 1000。修改Nginx最大打开文件数(worker_rlimit_nofile),最大是65535,理论值是最大值除以Cpu得核心数。优化系统连接数,Linux默认是1024,可以对/etc/sercurity/limits.conf进行修改。可以打开防盗链,防止他人直接引用网站得照片,消耗资源
防盗链做法:日志格式添加$http_referer参数,然后在location模块添加防盗链得配置,valid_referers none blocked参数,然后重新加载nginx
- Nginx都使用什么模块?
event module:搭建了独立于操作系统的事件处理机制的框架,及提供了各具体事件的处理。包括ngx_events_module, ngx_event_core_module和ngx_epoll_module等。nginx具体使用何种事件处理模块,这依赖于具体的操作系统和编译选项。
phase handler:此类型的模块也被直接称为handler模块。主要负责处理客户端请求并产生待响应内容,比如ngx_http_static_module模块,负责客户端的静态页面请求处理并将对应的磁盘文件准备为响应内容输出。
output filter:也称为filter模块,主要是负责对输出的内容进行处理,可以对输出进行修改。例如,可以实现对输出的所有html页面增加预定义的footbar一类的工作,或者对输出的图片的URL进行替换之类的工作。
upstream:upstream模块实现反向代理的功能,将真正的请求转发到后端服务器上,并从后端服务器上读取响应,发回客户端。upstream模块是一种特殊的handler,只不过响应内容不是真正由自己产生的,而是从后端服务器上读取的。
load-balancer:负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。
自定义安装,一般启动命令路径是在,/usr/local/tomcat/bin/startup.sh,关闭命令路径是在,/usr/local/tomcat/bin/shutdown.sh,也可以使用/usr/local/tomcat/bin/catalina也可用于进行开启和关闭。
日志文件:是在tomcat目录下的catalina.日志.log
- Tomcat在企业内部署流程
首先与开发人员沟通,根据系统版本和项目需求选择Tomcat对应的版本,然后下载对应的JDK安装包,JDK的安装方式有两种,一种是通过官网直接下载对应版本的tar包或者rpm包,第二种就是直接使用YUM进行安装。下载完成后先进行JDK的安装,我一般安装在/opt目录下,然后设置对应的环境变量。设置完成后在进行Tomcat的部署,如果需要做Nginx反向代理,就会在部署完成后会进入到Tomcat的配置文件(server.xml)中,开启8009端口,然后将开发给的项目包放到Tomcat的Webapps目录下,就完成了部署。
- Tomcat主要运行什么样的代码程序,前置环境条件
Tomcat主要用来解析动态界面,以及java开发的项目,也就是war包或者jar包。而因为jwar包的运行需要借助一JDK环境,所以也就有了Tomcat+JDK的架构。
LVS
- LVS是做什么的,简述LVS的架构。
LVS主要用于多服务器的负载均衡,它工作在传输层,可以实现高性能,高可用的服务器集群技术。他比较廉价,可以将许多低性能的服务器组合在一起形成超级服务器,而且使用简单,配置相对容易,且具有多种工作模式及负载均衡方式。
LVS集群分为三层结构,首先是负载调度器,负责将Clinet的请求发送给一组或者多台服务器上去执行
然后是服务器池,也就是真正执行请求的服务器,一般是Web服务器,除了Web还有FTP、MAIL、DNS等
最后是共享存储,为地址池提供了一个共享的存储区,能够使地址池内的服务器拥有相同的内容,以及提供相同的服务。
- Haproxy和LVS的区别和侧重点。
LVS的抗负载能力强,工作稳定,本身不占用什么流量,在 PV超过1000万时,推荐使用LVS,LVS主要侧重于做四层的负载均衡。
Haproxy与LVS类似,本身只是一款负载均衡软件,Haproxy是支持虚拟主机的,可以工作在四七层,支持多网段。它能够补充Nginx的一些缺点,比如支持session的保持,通过获得指定的URL来检测后端服务器的状态。在效率上,Haproxy有更出色的负载均衡速度,并且在并发处理上也要优于Nginx。支持TCP协议的负载均衡转发,可以对MySQL的读进行负载均衡,对后端的MySQL进行检测和负载均衡。
- LVS作用,工作原理,工作模式,有什么区别?
LVS的作用是:提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能
LVS工作原理:用户请求LVS的VIP,而后LVS根据转发方式和算法,将请求发送给后端服务器,后端服务器收到请求,在返回给用户。
LVS的工作模式:LVS有四种工作模式,分别是NAT、DR、TUN、Full-nat。
NAT模式就是客户端访问负载均衡器的vip,负载均衡器通过转换目标ip地址的方式,实现负载均衡,将本该发送给负载均衡器的数据包目标地址,修改成后端real server的ip地址,然后由rs进行处理并返回,返回过程中,经过负载均衡器,负载均衡器将源地址转换为vip,完成本次请求。
DR模式是负载均衡器和RS端都使用同一个IP对外服务,客户端访问负载均衡器的vip,此时在集群中负载均衡器和后端的real server都具有vip,所以负载均衡器通过vip进行转发是不实际的。那么只能通过二层协议,修改数据包二层的目标mac地址来进行转发,后端服务器处理后,通过本机的lo网卡上的vip直接返回数据包。
TUN模式客户端访问负载均衡器的vip,这种模式,可以跨区域进行负载均衡,vip和rip均为公网ip,dip将请求发送给rip的过程中是加密的,后端rs上的vip直接将请求进行回复,不经过dr负载均衡器。
keepalived
- Keepalived工作原理
keepalived是以VRRP协议为实现基础的,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样我们就可以保证集群的高可用。
- Keepalived权重,Keepalived健康检测脚本
Keepalived集群中,其实并没有严格意义上的主、备节点,虽然可以在Keepalived配置文件中设置“state”选项为“MASTER”状态,但是这并不意味着此节点一直就是Master角色。控制节点角色的是Keepalived配置文件中的“priority”值,但并它并不控制所有节点的角色,另一个能改变节点角色的是在vrrp_script模块中设置的“weight”值,这两个选项对应的都是一个整数值,其中“weight”值可以是个负整数,一个节点在集群中的角色就是通过这两个值的大小决定的。
Zabbix
- 简述Zabbix监控
Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
Zabbix 是一个企业级的分布式开源监控方案。Zabbix 是一款能够监控各种网络参数以及服务器健康性和完整性的软件,使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警,这样可以快速反馈服务器的问题。
基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案。
支持主动轮询和被动捕获
- Zabbix自动监控脚本
- Zabbix都监控过什么,如何进行监控?
监控MySQL进程数,运行状态,运行时间,连接数,主从状态,MySQL内部COMMIT命令
监控Nginx处理连接总数,处理连接失败数,处理请求总数,读取到客户端的Header信息数
监控redis的自动发现,redis的状态
监控磁盘:正在处理的I/O请求数,写花费的时间,读花费的时间,磁盘I/O百分比
- Zabbix监控原理,Zabbix监控的架构
Zabbix通过C/S模式采集数据,通过B/S模式在web端展示和配置。
Server端:通过收集SNMP和agent发送的数据,写入MySQL数据库,再通过php+apache在web前端展示。Agentd安装在被监控的主机上,Agent负责定期收集客户端本地各项数据,并发送至Zabbix Server端,Zabbix Server收到数据,将数据存储到数据库中,用户基于Zabbix WEB可以看到数据在前端展现图像。当Zabbix监控某个具体的项目,改项目会设置一个触发器阈值,当被监控的指标超过该触发器设定的阈值,会进行一些必要的动作,动作包括:发送信息(邮件、微信、短信)、发送命令(SHELL 命令、Reboot、Restart、Install等)。
- Zabbix优缺点?
优点:
开源,无软件成本投入,Server 对设备性能要求低。支持设备多,自带多种监控模板,支持分布式集中管理,有自动发现功能,可以实现自动化监控,开放式接口,扩展性强,插件编写容易
Api 的支持,方便与其他系统结合。
缺点:
需在被监控主机上安装 agent,所有数据都存在数据库里, 产生的数据据很大,瓶颈主要在数据库。
- Zabbix分布式监控有什么优点?
开源,无软件成本投入,Server 对设备性能要求低。支持设备多,自带多种监控模板,支持分布式集中管理,有自动发现功能,可以实现自动化监控,开放式接口,扩展性强,插件编写容易
Api 的支持,方便与其他系统结合。
- Zabbix报警媒介有几种类型?
Email:邮件,最常用的一种报警方式,需要定义发件人邮箱地址和SMTP服务器。
Scipt:自定义脚本,此脚本有发送信息至相关用户的功能。
SMS:短信和Jabber:即时通讯服务。
- 企业微信报警脚本怎么写?
- Zabbix自定义监控参数怎么写?存放在哪里?
首先用awk截出需要的值,现在被监控主机上命令行测试一下,是不是需要的值
然后再写入被监控主机上的zabbix_agentd.d的里 vim写以.conf结尾的文件,
格式是 UserParameter=key,跟对应命令,然后重启zabbix-agent。
- Zabbix多个监控项如何在一个图形中显示?
- Zabbix电话报警怎么做?
- Zabbix监控服务器硬件需要安装什么?
以我们公司用的戴尔服务器来说,首先需要idrac上开启snmp服务,然后到zabbix server服务器上测试一下是否能get到数据,再到Zabbix得Web界面上添加对应的监控主机。在每台agent机器上安装openmanage,然后每台agent上创建文件/usr/local/check_hardware.sh,修改agent配置文件,自定义监控项hardware_check,在Zabbix的web界面创建Dell_Hardware模板,就可以实现对服务器硬件的监控。
- 监控数据库主从,出现延迟问题如何解决?
- Zabbix遇到过什么问题?
自定义监控的key值要保持一致
触发器的脚本要给执行权限,不然不执行
设置了报警接收人 收不到报警信息,发现是先添加用户组,在设置接收人,才能收到报警信息
- Zabbix自动发现怎么做?
自动发现分为两个阶段:discovery 和 action
-web页面配置-自动发现规则ip范围,这个范围不要太大,浪费资源而且时间长,如果确定ip范围内有主机的话,也不需要设置每秒扫描,这样浪费资源
-创建动作,条件设置为自动发现规则,把发现的主机链接到监控模板
Jenkins
- Jenkins如何部署,如何使用公钥,公钥在哪里使用。
首先现在Jenkins的war包,然后部署JDK环境,修改对应的环境变量,修改完成后安装Tomcat,并删除tomcat网站发布目录下的所有内容,用以显示Jenkins的web界面。因为需要对一些项目打包,所以还会安装git、maven(java项目)等依赖环境,安装完成后,将Jenkins的war包放入到Tomcat的webpaess目录下,启动Tomcat后会自动解压war包。
可以使用ssh-keygen的命令生成密钥。公钥一般用于Git,以便于拉取代码。
- Jenkins自动发布流程,Webhooks,脚本
- Jenkins发布流程是什么样的?
- Jenkins的Maven组件在编译打包时都需要加载什么?
- Jenkins一般都用那些插件?
- Jenkins上有多少个项目?
- Maven是干什么的?
- Maven编译打包可以加什么参数?
Ansible
- 写过什么剧本,部署过什么服务
- Ansible基于什么协议
Ansible基于SSH协议
Redis
- Redis服务器的配置?
- Redis集群模式?
- Redis集群模式有什么区别?
- Redis与MySQL有什么区别?
- Redis数据持久化方式?
- 去中心化有多少个槽点?你们用了几个节点?
- 在使用Redis中遇到过什么问题?
-
ELK日志集群
Logstash过滤功能?
- ELK的所需要的组件?
Linux优化
SSH
- SSH协议在那一层?默认端口号是多少?如何修改SSH的默认端口号?