1000个监控项,90天的监控数据一般是六个G
200个监控项,三个月一般是一点多个G
一台机器一个月差不多是四百兆
一台机器每天大概是十几兆,十五台机器大概是两百兆
jenkins构建一次大概20分钟
公司物理备份10G文件大概50分钟
mysql中char和var的区别?字符
char不可变(固定的) 长度范围在1--255
varchar可变 且长度范围在1--65535
mysql数据库的架构怎么保证它的安全性?
设置密码
设置登录策略
开启bin-log日志
定期备份数据
为什么要加锁
锁主要是为了保持数据库数据的一致性,可以阻止用户修改一行或整个表,一般用在并发较高的数据库中。
在多个用户访问数据库的时候若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。
关系型数据库都有哪些?非关系型数据库都有哪些?
关系型数据库
mysql mariadb oracle DB
非关系型数据库
redis memcached mongoDB
什么样的数据存在关系型数据库,什么样的数据存在非关系型数据库里
经常访问的存在关系型数据库里(redis)
不经常访问的存在非关系型数据库里
数据库分类 | 关系型数据库 | 非关系型数据库 |
---|---|---|
类型 | mysql oracle DB2 mariadb | redis mongoDB memcached |
结构 | 二维表格 | 分布式 |
特点 | 使用方便 易于维护 支持复杂操作,连表查询 | 查询速度快 支持数据持久化 高扩展性 |
缺点 | 查询慢 | 不支持sql语句 查询弱 没有事务处理能力 |
innode支持事务(ACID四种特性) myisam不支持事务
innode 行级锁 myisam 表级锁
innode支持外键 myisam 不支持外键
MyISAM引擎,它是MySql的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行Insert插入和Update更新语句时,即执行写操作的时候需要锁定这个表。所以会导致效率会降低。不过和Innodb不同的是,MyISAM引擎是保存了表的行数,于是当进行Select count(*) from table语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的。可以将MyISAM作为数据库引擎的首先。
原子性:一个事务是一个一个不可分割的最小单位对数据库事务的操作要么完全的地执行,要么完全的不执行,不可能执行其中的一部分。(如:增删改一条数据,整个事务要么提交成功,要么失败回滚)
一致性:指对数据库的操作不提交,所有的修改就不会保存到数据库。
隔离性:每个事务在修改提交前,相对其他的事务都是不可见的。
持久性:事务对数据库一旦修改,并提交。修改的数据永久保存在数据。
Mysql数据库索引的应用?
加速查询速度
Mysql有关权限的表格都有哪些?
MYSQL数据库中的user,db,table_priv,columns_priv 和 host。
Mysql有哪些数据类型?
数值 日期 字符串
逻辑备份 mysqldump
适用于中小型公司,缺点是恢复时间长,无法做增量备份,但优点是不论是什么存储引擎,都可以用mysqldump备成SQL语句
物理备份 xtrabackup 直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。
完整备份
增量备份
差异备份
数据恢复有三种方式,分别是通过逻辑备份进行恢复,通过binlog日志进行恢复,通过xtrabackup备份出来的数据进行回滚恢复。
查看报错信息进行相应处理如果是内存不足就添加内存,删除一些不必要的数据,如果是没有权限,就调整权限
可能是空间不足
可能是没有权限
所以在做数据备份时应做好权限方面的检查(空间,权限)
bin-log日志:记录sql语句(用户操作的命令)
server-id; 标记主从复制的起始位置
增量备份,完整备份,物理备份
周一到周六;增量备份
周日;完整备份
shell脚本
可能是主库压力太大,或者从库太多(一般是消减3台)
优化sql语句
主库压力大 做个读写分离 mycat
分库分表
建立索引
优化sql语句
读写分离
主服务器上开启bin.log日志
并在数据库中创建并授权从服务器专门用于复制的用户,
然后从服务器开启IO线程和SQL线程,
从服务器通过IO线程读取主服务器上的bin.log日志放到自己的中继日志上,
然后通过sql线程写入到自己数据库中,
这样,就完成了一次主从复制。
5.7版本以下设置log-bin=/var/lib/mysql/mysql-bin
5.7版本以上开启server-id=随便 只要不和集群中的其他数据库ID一样就行
1)当 cpu 飙升到 500%时,先用操作系统命令top命令观察是不是mysqld占用导致的,
2)如果是 mysqld 造成的, show processlist,看看里面跑的session情况,是不是有消耗资源的sql 在运行。找出消耗高的 sql,看看执行计划是否准确, index 是否缺失,或者实在是数据量太大造成。
如果不是,找出占用高的进程,并进行相关处理。一般来说,肯定要 kill 掉这些线程(同时观察 cpu 使用率是否下降),等进行相应的调整(比如说加索引、改sql、改内存参数)之后,再重新跑这些SQL。也有可能是每个sql消耗资源并不多,但是突然之间,有大量的 session连进来导致cpu飙升,这种情况就需要跟应用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等。
3)开启慢查询,找出执行时间长的sql语句,优化sql语句
1)先快照当前环境
2)再恢复到昨天的环境将数据导出来
3)再将数据导进当前的环境
主库执行 show slave status\G
看到两个yes就可以了
MYSQL_IO=YES
MYSQL_AQL=YES
如果没看到说明主从复制不成功 按报错信息去处理
nginx的算法有几种?5种
轮询;每个请求按时间顺序逐一分配到不同的后端服务器;
weight;可以设置访问顺序比如ABB
ip-hash;按每个ip的hash结果分配请求,并且同一个ip固定访问后端服务器
url-hash;按每个ip的url的hash分配请求,并且每个url固定访问一台后端的服务器
fair;比ip-hash和url-hash更智能
好处;提升用户的体验,缓解服务器的压力。
upstream和stream是用来做什么的模块
负载均衡,反向代理
nginx五绝!
nginx如何做动静分离?
在location中设置匹配规则
配置到以.html结尾的就去静态资源路径去找
配置到以.php结尾的就去动态资源路径去找
nginx如何限流?
在配置文件中配置一些变量 limit-req
nginx如何设置80跳转到443端口?
在配置文件中做地址重写 访问到本地80端口再通过rewrite跳转到443端口
nginx如何获取真实的ip地址?
在配置文件log-format中添加一些变量 $remote-addr
nginx如何做防盗链?
在配置文件location中设置匹配规则
将用户的访问地址和本地的地址做对比,如果和本地的地址不一样就reture返回404状态码(无服务)
如何优化nginx?
nginx优化
调整最大连接数 文件句柄数 把进程绑定到固定的CPU上
调整长连接
请列举Nginx的一些特性?
静态资源高速高并发访问
反向代理加速,数据缓存
简单负载均衡
FastCGI服务的缓存加速
支持FastCGI,Uwsgi,SCGI,Memcached Servers的加速和缓存
支持SSL,TLS,SNI
具有模块化结构:过滤器包括gzip压缩,ranges支持,chunked响应,XSLT,SSL及图像缩放等功能。在SSI过滤器中,一个包含多个SSI的页面,如果经由FastCGI或反向代理处理,可被并行处理。
请列举Nginx和Apache 之间的不同点?
轻量级,同样起web服务,比apache占用更少的内存和资源。
抗并发,nginx处理请求是异步非阻塞的,而apache则是阻塞性的,在高并发下nginx能保持低资源,低消耗高性能。
高度模块化的设计,编写模块相对简单。
最核心的区别在于apache是同步多进程模型,一个连接对应一个进程,nginx是异步的,多个连接可以对应一个进程。
请解释Nginx如何处理HTTP请求?
nginx会根据过来的http请求头里的Host字段里的值,来判断使用哪个server{}
server{}里的listen监听的是谁的端口?
进程和线程的区别?
进程独占内存,一个进程可包含多个线程
线程基于进程,线程共享内存
进程稳定性高,线程稳定性低
反向代理与正向代理的区别?为什么使用反向代理?
正向代理,服务端不知道客户端的地址,但是客户端知道服务端的地址。
反向代理,客户端不知道服务端的地址,但是服务端会知道客户端的地址。
正向代理可用于访问被禁止访问的网站,可用与隐藏身份,一般会被黑客使用,可用于内容过滤。
反向代理可用于负载均衡,可保护服务器机器免受DDos攻击,GSLB(GlobalServerLoadBalancing),选择一台在地理上离客户端最近的服务器来响应请求,这样可以提高效率,可做缓存,提高响应速度,降低加密成本。
为什么做反向代理?
防止恶意攻击
为负载均衡和读写分离提供环境
nginx的配置文件中日志格式加入$http_x_forwarded_for
1.社区活跃,模块产出迅速
2.抗并发,使用了异步非阻塞的事件处理机制,运用了epoll模型,提供了队列。一个master多个worker(master接收请求,worker处理请求。)
3.轻量级,占用更少的内存和资源提供更强的服务。
4.模块化设计,编写模块相对简单。
LVS适用于四层负载均衡 端口+IP 适用于流量较大
Nginx适用于七层负载均衡 适用于流量较小(与LVS进行比较),进行url处理,例如地址重写操作
HAproxy适用于四七层负载均衡
区别
lvs;
1)工作在4层,转发端口
2)配置简单,易于维护
3)安全性高,自身双机热备(lvs+keepalived,lvs+hearbeat)
4)支持高并发
nginx;
1)反向代理服务器
2)负载均衡器
3)web服务器
4)支持高并发(万级别)
5)对网络要求低,能ping通就能负载
6)配置简单,易于维护
7)工作在第七层
haproxy;
1)可以工作在4层也可以工作在7层
2)支持高并发(比nginx更优秀的并发量)
3)支持url检测
4)算法多达8种
采用了异步非阻塞事件处理机制,运用了epoll模型,提供了一个队列。nginx采用一个master进程,多个woker进程的模式。每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理的worker很聪明,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有request进来,他就可以很快再按这种方式处理。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。
为什么 Nginx 不使用多线程?
采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量)(epoll),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx支持更高的并发。
为什么要做动、静分离?
使用两个upstream,一个放静态资源的机器,另一个放动态资源的机器,设置对应的匹配规则,当匹配到访问动态资源请求时,转发到对应后端的服务器,反之,则转到静态资源服务器上。提高服务整体的访问速度。
gzip on
服务器端的压力会小,传输速度会加快,根据客户端的解压缩性能,决定页面加载时间长短
内容分发网络
通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
阿里云CDN 腾讯云CDN 蓝汛 网宿 快网\
KVM脚本 各种基础服务的编译安装脚本 自定义监控项 检测主机存活时间 检测CPU 内存和硬盘利用率 检测网站可用性
第一次握手;客户端向服务器发送一个SYN的包 等待连接
第二次握手;服务器收到客户端的包并回复一个SYN+ACK的包 确定连接
第三次握手;客户端收到服务端的回复并回复一个SYN+ACK的包 连接成功(数据开始传输)
四次挥手
1)客户端向服务器发送一个断开连接的请求
2)服务器收到这个请求回复客户端一个确定断开
3)当数据传输完成时,服务器向客户端发送断开请求
4)客户端收到这个请求并回复服务器一个确定断开
4次挥手结束,数据断开传输
三次握手的作用
让客户端和服务器都知道彼此的存在
让双方知道对方的序列号
useradd user(用户) -s /sbin/login
cpu的利用率和负载有什么区别?
cpu利用率;进程占用的百分比
cpu的负载;显示的是一段时间内 正在使用 和 等待使用 cpu的平均任务数
常用的中间件有?
php php-fpm php-mysql php-gd php-cli tomcat
冷备和热备的区别?
热备份;备份时数据库处于开启状态,而且可以操作
冷备份;备份时数据库处于关闭状态,备份和恢复操作比较简单
如何挂载磁盘?
首先创建挂载目录
再用mount命令挂载即可
取消挂载
umount+挂载路径
如何开启路由转发工能?
sysctl.conf #系统控制配置
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
保存退出
sysctl -p #生效
top命令中VSZ和RSS的区别
VSZ:进程占用的虚拟内存空间
RSS:进程占用的物理内存空间
如何查看cpu的使用,内存的大小,负载情况
top free -m top
如何调整内存参数?
vim /etc/sysctl.conf
如何找出/home下的所有以.txt结尾的文件
find /home -name *.txt -mtime+7
如何快速生成一个10G的文件
ddif= /dev/zerfoo=testbs=10Mcount=1024
标准端口的范围是?
1--65535
常见服务的端口号
ftp;21
ssh;22
http:80
https;443
dns;53
smtp;25
pop3;110
mysql;3306
nginx;80
httpd;80
redis;6379
请解释下tnlnet和ssh的区别
首先他们都是远程连接服务
tnlnet不安全。ssh安全 (个人觉得这是最大的区别)
如何检查selinux服务是否开启
getenforce
如何写计划任务?
crontab -e
* * * * * 后面接路径
每周末早上8点重启
0 8 * * 7 reboot
检查服务正常运行的方法?
1)用systemctl status 服务名查看状态
2)用ps -ef|grep 端口
3)ping服务器的ip
二层交换机和三层交换机的区别?
二层交换机工作在第二层;(数据链路层)
三层交换机工作在第三层;(网络层)并且有路由转发的功能
cp和tar命令的常用参数
cp -R(-R递归操作可以对目录以及目录中的文件操作)
cp -f(覆盖已经存在的文件)
cp -l(不复制文件,只生成链接)
tar xvzf(解压)
tar xczf(打包)
mv;移动文件也可以改名
mv -f(提示覆盖)
mv -f(不提示覆盖)
pv uv ip的意义?
前提;在一定时间内访问公司网站
pv;页面访问量
uv;独立访客
ip;独立ip数
编译安装和yum安装的区别?
编译安装可以自己选择自己想要的模块
yum安装功能比较全
软硬链接的区别?
软连接相当于一个快捷方式;删除源文件后软连接就不可用了
硬链接删除源文件后还可以用,但是软连接可以跨分区(磁盘分区)硬链接不可用
磁盘格式和磁盘的分区?
磁盘格式有;
1)/;根分区
2)/swap;交换分区
3)/boot;系统内核
磁盘分区有;
1)逻辑分区
2)扩展分区
3)主分区
如何做扩容(也就是如何做逻辑卷)
首先用fdisk创建磁盘分区
如何做pv(物理卷)
如何将pv加入到vg(卷组中)
再将vg加入到lv(逻辑卷中)
正向解析和反向解析的区别?
正向解析;ip解析成域名
反向解析;域名解析成ip
首先的有公网ip和有效域名,然后将ip绑定在这个域名上,审核通过即可
删除一个文件后空间为什么没有释放?
有可能是最贵文件正在被某个进程占用着,将最贵进程kill掉,再删除
接通电源
BIOS加电自检
系统引导
加载内核
系统初始化
如何快速找出系统木马?
查看系统日志
查看系统任务
查看定时任务
删除异常定时任务
如何找出访问比较多的ip?
用tailf 命令查看日志
再用awk去切割 sort和uniq去设置一些规则
awk '{print $1}' access.log| sort | uniq -c |sort -rn -k 1 | head -1
首先他们都是dns域名解析的一种
tcp面向连接 udp面向无连接
tcp安全 udp不安全
tcp保障数据的顺序 udp不保证
tcp应用在区域传输 udp应用在域名解析
A和B
A生成一对秘钥(私钥和公钥)A将公钥发送给B
B得到公钥对他进行加密
A得到B的加密数据,用私钥进行解密
B得到A私钥的加密数据,用公钥进行解密
对称加密就是加密和解密都是一个私钥
非对称加密就是公钥加密私钥解密
使用抓包工具抓包去判断
抓包工具:tcpdump
忘了
redis0:2块盘,速度快,安全性低。利用率100%
redis1:至少2块盘,速度一般,安全性较高,利用率50%(一半存储,一半备份)
redis5:至少3块盘。速度较快,利用率n-1/n 适合多读少写场景
redis10; 4块 读写速度很快,100%冗余,镜像成本高 性能和冗余要求很好的业务。数据库主库和存储的主节点。
8080 webapps/ROOT 在配置文件conf文件夹下的server.xml中进行修改
调整jvm的内存(配置文件调)
优化代码(开发干的)
做集群(多实例)
做页面缓存和图片压缩功能
性能
JVM 参数优化,配置对应的内存保留区域,配置内存最大保留区域
开启GC日志,开启对应的参数加快编译或者优化垃圾回收。
开启JMX端口便于监控
取消JVM的默认DNS缓存时间,不缓存DNS记录,避免DNS解析更改后要重启JVM虚拟机
安全:
更改tomcat默认端口包括本机通信的8005 与自身应用通信的8009 以及与外界进行通信的8080
降权启动
文件访问列表控制
回收其他用户对tomcat启停脚本的权限
一些服务的开启自启
做keepalived的时候写的keepalived脚本
首先 用SystemCtl status keepalived
jvm分区
新生代
老年代
永久代
iptables用在比较老的版本
centos7版本就用的firewalld
区别
1)iptables不支持动态修改规则(且iptables修改规则后需要刷新才能生效) firewalld支持动态修改规则
2)iptables默认是开启的 需要去设置规则才能限制 firewalld默认是关闭的,需要去配置才能放行
如何用iptables开放80端口
iptables -t filter -A INPUT (-s 主机ip) -p tcp(协议) --dport 80(端口) -j ACCEPT
iptable四表五链?
四表:raw
mangle
nat(网络地址转换)
filter(过滤用的)
五链:PREROUTING(进路由前的包)
INPUT(过滤后的包)
FARWARD(转发)
OUTPUT(转发后的包)
POSTOUTING(出路由后的包)
lvs负载均衡的4种模式
nat;(网络地址转换模式),进战和出战的数据都需要经过分发器
DR:(直接路由模式),只有进战的数据才需要经过分发器
TUN(隧道模式),只有进战的数据需要经过分发器
full-nat;双向转换
常用是DR模式 特点是速度快
常见的负载均衡软件 nginx lvs haproxy
lvs;工作在4层 基于ip+端口
配置简单
安全性好,双机热备 lvs+keepalived,lvs+hearbeat
支持高并发
nginx; 工作在7层,基于ip+端口+url
反向代理服务器
web服务器
负载均衡器
支持高并发
对网络要求低,能ping通就能进行负载
配置简单,易于维护。
haproxy; 即可工作在4层,也可工作在7层
支持url检测
高并发比nginx还强
算法多(8种)
工作中中小公司用nginx和haproxy多
大公司用lvs(结合使用)
流程:
测试环境中:
1.开发者会将代码上传到版本库中。
2.jenkins通过配置版本库的连接地址,获取到源代码。
3.jenkins获取到源代码之后通过参数化构建(或者触发器)开始编译打包。
4.jenkins通过调用maven(Ant或者Gradle)命令实现编译打包过程。
5.生成的war包通过ssh插件上传到远程tomcat服务器中通过shell脚本自动发布项目。
生产环境:
测试环境将项目测试没问题后,将项目推送到线上正式环境。
1.可以选择手动。
2.也可以通过调用脚本推送过去。
构建失败原因:1.超时 2.maven运行时引用jar包,但是原先存在旧的jar包没有清除掉,会报错,找不到新增的类和办法。
发布成功之后功能有问题,如何处理?
版本回退,修复代码再通过git仓库发布
进行回滚,有三种方法,第一种方法,在git将版本回退,然后通过jenkins重新构建。第二种方法是通过写脚本实现基于构建号的版本回退,原理为jenkins将拉取到的代码打包成文件名加版本号的样式,保留一份,然后将最新的包发送到tomcat上,如果有问题执行回滚操作,第三种,使用插件,但是这个我不太了解,因为3.4版本之后我就找不到这个包了
jenkins运行在tomcat上
构建失败的原因
网络延迟;配置有误
未收到邮件:(解决:去web页面配置触发器即可)
关于jenkins拉去失败的操作?
将版本进行回退,修复bug后再通过git发布
扩展
githut(公有仓库)
gitlab(私有仓库)
git 分布式 无中心代码仓库 安全性高
svn 集中式 有中心代码仓库 安全性低
git 分布式 ---没有中心代码库,所有机器之间的地位同等(每台机器上都有相同的代码)任何人每次提取操作,实际上都是一次对代码仓库的完整备份,因此近乎所有的操作都可以在本地执行,速度就是相当的快,每个开发人员都拥有所有的代码,不利于核心代码的保密(如果有重要代码需要保密,则不建议使用git)
svn 集中管理的 ---有中心代码库,其他都是客户端,使用简单,比较符合我们的常规思维,同步代码比较简单,只要一步操作即可。丢失数据的风险:最显而易见的,由于集中化的特点,如果版本库的服务器磁盘发生故障等,你不能保证所有的数据已经有人提取出来了,最坏的情况是彻底的丢失整个项目的所有历史更改记录。网络中断的情况下,协作就无法进行了,因为无法连接服务器进行上传和更新。
redis有几种工作模式?
redis有 主从复制,哨兵模式,去中心化模式。
1)主从复制;高可靠性,安全性高,自身有双机热备,读写分离
2)哨兵模式;能自动切换主从状态(两个哨兵判定主节点宕机后,就会从从节点中选取一个优先级高的作为主节点继续工作),高扩展性,部署简单
3)去中心化:高可靠性,搞扩展性,没有主节点,数据存储在各个节点中,并且各个节点之间是互通的。宕机一台也没多大影响。 节约成本
redis相对其他缓存型数据库有什么优势?
支持数据的持久化;
有两种持久化方式RDB和AOF
RDB:将redis数据库里的数据生成一个快照,并存储在磁盘上
AOF:将redis的日志追加到一个文件中,当redis重启时,只需重新执行那些写命令即可。
开发如何登陆到redis数据库中?
将ip和端口给他就可以了
redis,rabbitmq(缓解数据库的读压力)
缓解数据库的压力
在流量巨大的时候,起到流量削峰的作用
mysql:读写分离(缓解数据库的写压力)
缓解数据库的压力
提高用户的体验
作用:
- 冗余(存储)
- 扩展性
- 可恢复性
- 缓冲
- 异步通信
- 削峰 :消息队列中的常用场景,一般在秒杀或抢够活动中使用广泛。一般会因为流量过大,应用系统配置承载不了这股瞬间流量,导致系统直接挂掉,即传说中的“宕机”现象。为解决这个问题,我们会将那股巨大的流量拒在系统的上层,即将其转移至 MQ 而不直接涌入我们的接口。
- 解耦
优势:
支持高并发,支持可扩展,支持AJAX,持久化,对消息具有很高的稳定性和可靠性。
一个监控项是320bytes,五分钟采集一次每一天就是90kb左右,20台虚拟机,每台虚拟机30个监控项,就是600个,一天就是53m,九十天也就是4.6G左右
看访问量吧 正常一天 中小性公司就来100兆(活动期间就说500兆)
公司采用的是sql语句备份 因为公司比较小 备份的数据也不算太多(10G) 大概50分钟左右
节点选举:当主节点挂了之后,从节点就会接手工作,成为新的主节点,保证了集群的高可用
统一配置文件管理:例如只要部署一台服务器,就可以把相同的配置文件,同步更新到其他所有服务器
发布与订阅:类似消息队列
提供分布式锁:类似多线程当中的锁
集群管理:保持集群中数据的一致性
zookeeper如何保证事务的一致性?
数据的一致性是靠Paxos算法
分布式存储了解过的
高扩展性:使用普通x86服务器,支持10~1000台服务器,支持TB到EB级的扩展。
高可靠性:没有单点故障,多数据副本,自动管理,自动修复。
高性能:数据分布均衡。
可用于对象存储,块设备存储和文件系统存储
一般分布式存储用在存储数据巨大的场合(中小公司可能用不上,问就说giusterFS,记住是了解过)
glusterFS
ceph
区别
GlusterFS简介
没有中心节点,所有节点全部平等
开源分布式文件系统
PB级容量
高可用性
读/写性能
基于文件系统级别共享
复制卷
条带卷
发布复制卷(用的比较多)
分布条带卷
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ttVzSgNP-1598083061014)(assets/image-20200822145751162.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fJCVyCjx-1598083061017)(assets/image-20200822145828914.png)]
切割大容量且不宜读的playbook,同时实现代码的复用性。
ansible:自动化运维工具,批量部署神器
工作流程 1)主节点生成一对秘钥(公钥,私钥)
2)主节点将公钥发给node节点
3)主节点配置主机清单(/etc/ansible/host 将node节点的主机名和ip写进去 )
4)跑剧本
ansible常用的模块;shell yum cron services copy
优势;
分布式,无需客户端,轻量级,配置语法使用YAML语言,更强的远程命令执行操作
基于模块工作,可使用任意语言开发模块
基于SSH工作
可实现多级指挥
非关系型数据库的优势:速度快,可扩展性
1. 性能
NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
2. 可扩展性
同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
关系型数据库的优势:
3. 复杂查询
可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
4. 事务支持
使得对于安全性能很高的数据访问要求得以实现。
互补
支持持久化;
并且支持两种持久方式RDB,AOF
RDB慢 AOF快
RDB:将redis数据库里的数据生成快照,并存储在磁盘上
AOF:将redis数据库里的日志追加到另一个文件中,当redis重启时只需重新执行一遍这些指令就可以了
三种工作模式:(主从复制,哨兵模式,去中心化模式)
1)主从复制:高可靠性(主库宕机可以自动切换主从) 读写分离
2)哨兵模式:部署简单,能自动监控主节点的状态,并且自动切换主从 高可扩展性
3)去中心化模式:高可用性,高扩展性 无中心节点,数据存储在每个节点中且每个节点是互通的 减低运维成本
开发如何登录redis(将主机ip和端口给他即可)
优势
1.具有持久化
2.性能极高
3.丰富的数据类型
4.原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
5.丰富的特性 – Redis还支持 publish/subscribe(发布/订阅), 通知, key 过期等等特性。
6.主从集群
redis去中心化优势 如何搭建
无中心节点
高可用
高拓展
数据冗余
zabbix有几种工作模式?
两种,主动模式和被动模式
主动模式;server端主动向agent获取监控数据(对server端消耗大)
被动模式;agent端主动向server提交监控数据(对server端消耗小)
zabbix监控模式
分布式监控;(server+proxy+agent)
单节点监控;(server+agent)
总结;分布式监控和单节点监控就是在server和agent端中间加了代理,从而减小了server的压力,提升zabbix的性能
Zabbix监控的流程?以及zabbix的优缺点?还了解其他监控软件吗?
创建主机并加入主机组
添加新加主机的应用集
添加监控项
告警触发器配置
配置告警动作
报警媒介
zabbix优点
开源,无软件成本投入
Server 对设备性能要求低
支持设备多,自带多种监控模板
支持分布式集中管理,有自动发现功能,可以实现自动化监控
当监控的 item 比较多,服务器队列比较大时可以采用被动状态,被监控客户端主动 从server 端去下载需要监控的item 然后取数据上传到 server 端。 这种方式对服务器的负载比较小。
Api 的支持,方便与其他系统结合
zabbix缺点
要在被监控端安装agent端,且zabbix的监控数据都存储在数据库中,所以对数据库的消耗比较大。(做消息队列环境数据库读压力)
普罗米修斯
在配置文件中添加监控项经常和k8s一起用
在agent端配置你想监控的key值(配置文件中)
在server端去测试 如果能测试到即可,再去web页面去配置监控项,动作,触发器,报警规则,报警媒介
你公司zabbix监控些什么?
监控一些服务的状态(nginx,tomcat,mysql主从复制的状态,tcp的连接数,系统的监控cpu的使用率,cpu的负载等)
如何去监控mysql主从复制
通过监控mysql-io和mysql-sql这两个sql线程的状态是否是yes,如果是yes就是成功,如果不是就是失败
中小型公司3个月 5G足矣
日数据量几十兆吧(50兆左右)
zabbix缺点
需在被监控主机上安装 agent,所有数据都存在数据库里, 产生的数据很大,瓶颈主要在数据库(所以做消息队列)。
启动速度慢,cpu、内存、磁盘io无异常,启动日志也不报错,查看日志说是有一个java类生产的seesionID时间过长,解决方法,将生成随机数的类由/dev/random换为伪随机数/dev/urandom
1)keepalived(脑裂)
有一次在做keepalived高可用的时候,发现出现脑裂现象,就是master节点上keepalived正常服务时,vip正常
当停掉master节点的keepalived服务时发现从出现两个vip(主节点和从节点都出现vip)
解决:将keepalived.service中的killmode=process注释掉(这一行大概的意思是当keepalived服务的主进程被杀掉后不会杀死它的子进程)
2)tomcat服务器假死
有一次做活动的时候,tomcat服务器假死,导致用户打不开页面(问题分析,有可能是做活动,服务器访问量上来了,导致数据库扛不住,但是zabbix监控上,发现mysql所有指标都正常,猜想可能和tomcat本身有关,查看tomcat监听端口占用情况,有大量的tcp连接等待关闭,关闭后就好了。
数据缓冲队列。同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、web/nginx日志、访问日志,消息服务等等**,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。
Kafka的特性
- 高吞吐量:kafka每秒可以处理几十万条消息。
- 可扩展性:kafka集群支持热扩展- 持久性、
- 可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
- 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
- 高并发:支持数千个客户端同时读写
kafka和rabbitmq的对比
在实际生产应用中,通常会使用kafka作为消息传输的数据管道,rabbitmq作为交易数据作为数据传输管道,主要的取舍因素则是是否存在丢数据的可能;rabbitmq在金融场景中经常使用,具有较高的严谨性,数据丢失的可能性更小,同事具备更高的实时性;而kafka优势主要体现在吞吐量上,虽然可以通过策略实现数据不丢失,但从严谨性角度来讲,大不如rabbitmq;而且由于kafka保证每条消息最少送达一次,有较小的概率会出现数据重复发送的情况;
kafka遇到的问题(消息队列)
没有域名解析就会失败
rabbit和kafka区别
对数据的可靠性和安全性要求不同
rabbitMQ三种方式区别
单节点模式 镜像模式 集群模式
ecs是单播,而vrrp是组播,不支持这个
elk正常版
logstash(收集日志)+es集群(日志分析和存储)+kibana(web展示)
elk究极版
filebeat(收集日志)+kafka(消息队列)+logstash(日志收集)+es集群(日志分析,存储)+kibana(web展示方便运维查看)
efk
logstash(日志收集)+es集群(日志存储和分析)+kibana(web展示)
logstash通过数据映射传入到es集群中,数据映射可使用gork进行,es集群中数据存储是分片进行的。
做集群
200(访问正常)
301(永久重定向)
302(临时重定向)
400(服务器错误)
403(没有权限访问)
404(没有资源)
500(内部服务器错误)
502(网关错误)调整进程数
503(系统维护)设置流量限流(limit-req)
504(网关超时)增长超时时间
nginx响应码500和502,503,504的区别
499,502,504都会因为超时而产生,区别是超时超了谁的时,499是超了客户端本身的连接时间,502是超了CGI的执行时间,504是超了服务器本身的最大允许读取时间。
500多是由于代码语法错误,导致CGI执行错误并且会把错误结果通知服务器,服务器则报500。
使用log4j、cronolog、logrotate进行日志切割
用户家目录下的.bash_profile文件中修改即可
Dockerfile中ADD和COPY区别 ?
ADD可以自动解压,COPY不能自动解压 ADD可以发送远程连接的文件 COPY只能发送本机的文件
Doker相比较传统虚拟机,有什么优点?
轻量级
一次交付,多次使用
占用资源更少
启动更快
隔离性
移植性
docker和vmware的区别?
docker是基于进程的隔离
vmware是基于资源的隔离
docker启动秒级
vmware启动分钟级
docker三种网络模式?
docker配置网络(异主容器互联)
路由模式
open vswitch
dockerfile?
常用模块
RUN:运行命令(比如yum -y install vim)
ADD:自动解压并移植到路径下
ENV:环境变量
CMD:执行命令
EXPOSE 8080:(自定义一个端口)
open是一种建立在公网上的专用网络,主要用来远程办公(员工远程连接公司内网)
基于VRRP协议,当主节点keepalived服务正常时会不断向从节点发送vrrp包,告诉他自己还活着,当在一定时间内主节点不再发送vrrp包时,从节点就判定主节点死亡,会接管他的资源也就是vip
1.你上家公司有多少台物理服务器,共有多少台虚拟机(把物理服务器和虚拟机概念搞清楚)
物理服务器50多台
虚拟机200台左右
物理机配置(32核+256G)
虚拟机配置(8核+50G)
我管理大概10台
前端2台nginx做keepalived高可用
后端4台nginx做动静分离(两静两动)
数据库用的mysql(一主两从)
k8spod状态?
running(正常运行)
pending(准备状态)
K8s有哪些组件,都有什么作用?
kubectl 是一个客户端的管理工具,直接管理API server,提供一个请求到一个api server,中间有一个auth认证(判断是否有权限访问),api 将信息存储到etcd数据库中,
API Server:k8s 提供的整个集群统一入口,提供了http RESTFUl api 的方式
scheduler 做集群节点的调度(调度器,根据调度算法绑定到指定的node上)
contorller-manager 负责任务(控制器)
etcd:分布式键值存储系统,用于保存集群状态数据,比如Pod,Service等对象信息
Node 组件
kubelet:接收k8s master下发的任务,并进行处理,比如说master让创建一个容器,那么这个时候kubelet就会调用docker-engine的接口创建container(主要管理k8s容器的创建和一些生命周期的管理)
kube-proxy :负责网路代理(处理用户怎么访问container?),维护网络规则和四层的负载均衡,怎样才能让下面的Pod(一个或者多个容器)能对外提供服务
flannel:负责pod间的通信
.Linux系统优化(性能:内存和交换分区的使用策略,调整文件句柄数,优化内核参数等 安全:ssh用私钥方式连接,常用服务端口的修改等等)
性能:关闭无用服务,设置内存和交换分区的使用策略,调整文件局兵书,优化内核参数
安全:修改服务的默认端口,设置用户密码强度,设置密码定时更换策略,清除弱密码和无密码用户,禁止root用户远程登录,做任何操作前先进行备份,修改内核中的time-wait时间,预防SYN洪流攻击。禁止ssh使用账号密码登录
1)关闭防火墙,selinux
2)限制root用户登录,尽量用普通用户登录
3)修改文件时先备份一个
4)调整内核
5)关闭一些不必要的服务
6)定期更换密码
7)用ssh使用私钥连接,修改常用服务的端口号
远程办公,在家里或者不在公司环境可以连接上公司内网,也叫内网穿透
可以事前预防,控制那些人可以登录哪些资产,事中干扰,比如强行断掉会话,事后溯源,堡垒机可以记录哪些人登陆公司的机器后做了哪些事。
常见协议的分类
http(超文本传输协议)
https(完全文本传输协议)
ftp(文件传输协议)
stmp(邮件传输协议)
dns(域名解析)
pops(邮局协议)
telnet(远程登录协议)
OSI七层模型
7 应用层; (ssh,http,https,应用)服务都是第七层
6 表示层; (传递报文)
5 会话层; (smtp,ftp,telnet,dns,tftp。。。)
4 传输层; (tcp,udp【传输协议组】)
3 网络层; (icmp协议 【ping命令】)
2 数据链路层;(网络接口协议)
1 物理层; (物理硬件设施)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EzMIRH7d-1598083061020)(assets/image-20200822093749553.png)]
ssh协议在哪一层
应用层
TCP段头最小长度是多少字节?
IP和TCP都是20 加起来是40
/var/log/messages日志出现kernet: nf _conntrack: table full, dropping packet请问是什么原因导致的?如何解决?
1.关分防火墙
2.调整内核参数,设置对应的超时时间
3.加MQ
碰盘报错"No space left on device",但是df -h查看磁盘空间没满,请问为什么?
inode满了,清除一些过期的小文件、或者用软连接将空闲分区的newcache目录连接到需要拓展的分区。购买新的服务器。
写一个脚本进行nginx日志统计,得到访问ip最多的前10个(nginx日志路径: /home/nginxlogs/defaultaccess.log)
[root@localhost nginx]# cut -d ' ' -f 1 access.log |sort | uniq -c | sort -rn | head -10
4 223.111.99.250
3 80.82.70.187
3 5.188.210.227
1 87.103.214.187
1 85.24.216.78
1 83.97.20.31
1 83.97.20.130
1 80.82.78.85
1 80.82.70.118
1 66.198.199.18
如何修改内核参数?
/etc/sysctl.conf
一个存储高清视频的磁盘,大小为4TB,如何优化碰盘IO?
修改磁盘默认的请求队列数
将程序的读写缓冲区设置得尽可能大。
例如,日志或重做日志写入,不是每次都直接写入磁盘,而是先缓存到内存中,然后在缓冲区满时写入磁盘,也可以定期写入磁盘。
crontab计划任务中最小的时间单位是什么?
分时日月周
如何取8: 00到8:30时间段内的日志? (日志时间格式: [2020-07-20T08:56:47.860Z]) ?
sed使用 sed -n '/2020:08:00:00/,/2020:08:30:00/p' access.log >00-30.log2
grep使用 grep "2020:08:2[00-29]" access.log >00-30.log
MySQL一主多从,主库宕机,如何合理切换到从库,其他的从库又如何处理?
(1)登录所有从库查看同步的状态,如果都一样主库锁表,要切换主库的从库关闭同步,设置同步参数change master。
(2)登录所有的库查看同步状态,是否完成。
1.登陆所有从库查看post信息,使用POST最大的做为新的主库,然后将从为提升为新的主库,登陆从库(新的主库)执行stop slave,
2:修改my.cnf配置文件,开启log-bin并重新启动数据库服务,登陆数据库执行restet master ,show master status\G;查看主库信息,最后创建授权同步用户与权限和网站使用数据库的用户与权限,同步所有机器的/etc/hosts文件(这时就体现了之前全网用域名则不是用IP的作用了,不然还得修改网站程序切换到新主库服务器IP上,否则无法连接到数据库)
3:登陆其它从库,执行change master操作,查看同步状态
1.确保所有的relay log全部更新完毕,在每个从库上执行stop slave io_thread; show processlist;直到看到Has read all relay log,则表示从库更新都执行完毕了
2.登陆所有从库,查看master.info文件,对比选择pos最大的作为新的主库。
3.登陆192.168.1.102,执行stop slave; 并进入数据库目录,删除master.info和relay-log.info文件, 配置my.cnf文件,开启log-bin,如果有log-slaves-updates和read-only则要注释掉,执行reset master
4.创建用于同步的用户并授权slave,同第五大步骤
5.登录另外一台从库,执行stop slave停止同步
6.根据第七大步骤连接到新的主库
7.执行start slave;
8.修改新的master数据,测试slave是否同步更新
通过kill -9野蛮粗鲁杀死数据库导致数据库启动故障,给出排除方法或者经验。
(1)查看MySQL启动日志(查看log,发现mysql系统表丢失了,因为数据库数据都是测试数据,重建数据库不影响。)
(2)执行创建表的初始化脚本:(进入数据库目录# ./scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysql)
(3)再次执行启动脚本:
请详细描述MySQL主从复制原理 请详细描述Nginx-fastcgi工作原理。
(1)从库生成两个线程,一个I/O线程,一个SQL线程;
(2)i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
(3)主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
(4)SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端。这就是Nginx+FastCGI的整个运作过程
如何实现对MySQL数据库进行分库备份,请用脚本实现
#!/bin/bash
#created by yangqiqi 2017-08-24
USERNAME=root #备份的用户名
PASSWORD=123456 #备份的密码
HOST=localhost #备份主机
DATE=`date +%Y-%m-%d` #用来做备份文件名字的一部分
OLDDATE=`date +%Y-%m-%d -d '-10 days'` #本地保存天数
#指定命令所用的全路径
MYSQL=/application/mysql/bin/mysql
MYSQLDUMP=/application/mysql/bin/mysqldump
MYSQLADMIN=/application/mysql/bin/mysqladmin
#创建备份的目录和文件
BACKDIR=/data/backup/db
[ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}
[ -d ${BACKDIR}/${DATE} ] || mkdir ${BACKDIR}/${DATE}
[ ! -d ${BACKDIR}/${OLDDATE} ] || rm -rf ${BACKDIR}/${OLDDATE} #保存10天 多余的删除最前边的
#开始备份 for循环想要备份的数据库
MYSQLDUMP_LIST=`mysql -uroot -p'123456' -S /data/3306/mysql.sock -e "show databases"| grep -Evi "database|infor|perfor"`
for DBNAME in ${MYSQLDUMP_LIST} ##使用for依次罗列需要备份的数据库
do
${MYSQLDUMP} -B -F --master-data=2 --single-transaction -u${USERNAME} -p${PASSWORD} -S /data/3306/mysql.sock ${DBNAME} | gzip > ${BACKDIR}/${DATE}/${DBNAME}-backup-${DATE}.sql.gz
/bin/sleep 2
logger "${DBNAME} has been backup successful - $DATE"
done
oracle特点
Oracle的一些特点:要钱非开源,是大型数据库,支持高并发,大访问量,安全级别应该是所有数据库中最高的,对硬件要求高,操作比较复杂,管理维护比较麻烦一些
■MySQL 与mongodb本质之间最基本的差别是什么?
MySQL是关系型数据库 mongodb是非关系型数据库
●分析器在MongoDB中的作用是什么?
MongoDB中包括了一个可以显示数据库中每个操作性能特点的数据库分析器。通过这个分析器你可以找到比预期慢的查询(或写操作);利用这一信息,比如,可以确定是否需要添加索引。
●名称空间(namespace) 是什么?
MongoDB中包括了一个可以显示数据库中每个操作性能特点的数据库分析器。通过这个分析器你可以找到比预期慢的查询(或写操作);利用这一信息,比如,可以确定是否需要添加索引。
●如果用户移除对象的属性,该属性是否从存储层中删除?
是的,用户移除属性然后对象会重新保存(re-save())。
●能否使用日志特征进行安全备份?
可以
●MongoDB支持存储过程吗? 如果支持的话,怎么用?
1)Mongodb支持存储过程的使用,存储过程可以接收和输出参数跟sql中的存储过程概念类似,返回执行存储过程的状态值,可以嵌套调用。Mongodb的存储过程是使用Javascript编写,并存储在db.system.js表中。我们可以自定义存储过程,然后存入该集合中
2)
除了这种方式之外,我们还可以直接把存储过程的逻辑放在db.eval()参数中直接调用,无需事先声明存储过程的逻辑,
●为什么mongodb的数据文件比实际使用的要大?
MongoDB会积极的预分配预留空间来防止文件系统碎片
●getLastError的作用
调用getLastError 可以确认当前的写操作是否成功的提交
●分片(sharding) 和复制(replication) 是怎样工作的?
每一个分片(shard)是一个分区数据的逻辑集合。分片可能由单一服务器或者集群组成,我们推荐为每一个分片(shard)使用集群
●数据在什么时候才会扩展到多个分片(shard) 里?
MongoDB 分片是基于区域(range)的。所以一个集合(collection)中的所有的对象都被存放到一个块(chunk)中。只有当存在多余一个块的时候,才会有多个分片获取数据的选项。现在,每个默认块的大小是 64Mb,所以你需要至少 64 Mb 空间才可以实施一个迁移。
mysql:关系型数据库
mongoDB:非关系型数据库
分析器在MongoDB中的作用是什么?
名称空间(namespace) 是什么?
如果用户移除对象的属性,该属性是否从存储层中删除?
能否使用日志特征进行安全备份?
MongoDB支持存储过程吗?如果支持的话,怎么用?
为什么mongodb的数据文件比实际使用的要大?
getL astError的作用
分片(sharding) 和复制(replication) 是怎样工作的?
数据在什么时候才会扩展到多个分片(shard) 里?
请介绍下mongodb数据结构?
数据库中存储的对象设计bson,一种类似json的二进制文件,由键值对组成
ObjectId类型:这是MongoDB生成的类似关系型DB表主键的唯一key,生成快速。具体由12个字节组成:
String类型:
Timestamps类型:
Date类型:
Elasticsearch如何实现Master选举的?
第一步:确认候选主节点数达标,elasticsearch.yml 设置的值discovery.zen.minimum_master_nodes;
第二步:比较:先判定是否具备 master 资格,具备候选主节点资格的优先返回;
若两节点都为候选主节点,则 id 小的值会主节点。注意这里的 id 为 string 类型。
题外话:获取节点 id 的方法。
1GET /_cat/nodes?v&h=ip,port,heapPercent,heapMax,id,name
Elasticsearch如何避免脑裂现象的?
做一个三节点集群
一个比较简单的检测问题的方式是,做一个对/_nodes下每个节点终端响应的定期检查。这个终端返回一个所有集群节点状态的短报告。如果有两个节点报告了不同的集群列表,那么这是一个产生脑裂状况的明显标志。
Elasticsearch文档更新和删除过程描述?
1、删除和更新也都是写操作,但是 Elasticsearch 中的文档是不可变的,因此不能被删除或者改动以展示其变更;
2、磁盘上的每个段都有一个相应的.del 文件。当删除请求发送后,文档并没有真 的被删除,而是在.del 文件中被标记为删除。该文档依然能匹配查询,但是会在 结果中被过滤掉。当段合并时,在.del 文件中被标记为删除的文档将不会被写入新段。
3、在新的文档被创建时,Elasticsearch 会为该文档指定一个版本号,当执行更新时,旧版本的文档在.del 文件中被标记为删除,新版本的文档被索引到一个新段。新版本的文档就能被匹配查询到了。
一个tomcat启动脚本,手工执行OK,但是放入定时任务就是不执行,请问为什么?
1.定时任务写错了,可能命令部分的绝对路径相城相对路径了
2.环境变量问题
在命令前加上./etc/profile;
linux 系统 nginx php 环境,发现 PHP-FPM 进程占用 CPU 高,请问可能的原因,以及如何解决?
主要的:增加php的OPcache扩展。
OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升PHP的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。
说白了,就是缓存的方式加速。
次要的:方便的话加上缓存 memcache,memcached,redis
当然这个就比较麻烦了,需要代码上变动了
正在工作的linux系统,发现文件系统只读了,得导致问题原因可能是什么,如何解决?
可能的原因:
文件系统错误
内核相关硬件驱动bug
FW固件类问题
磁盘坏道
硬盘背板故障
硬盘线缆故障
RAID卡故障
解决方法:
1、重启看是否可以修复(很多机器可以)
2、使用用 fsck – y /dev/hdc6 (/dev/hdc6指你需要修复的分区) 来修复文件系统
3、若,在进行修复的时候有的分区会报错,重新启动系统问题依旧
查看下分区结构
[root@localhost ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (ro)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
查看ro挂载的分区,如果发现有ro,就重新mount
umount /dev/sda1
mount /dev/sda1 /boot
如果发现有提示“device is busy”,找到是什么进程使得他busy
fuser -m /boot 将会显示使用这个模块的pid
fuser -mk /boot 将会直接kill那个pid
然后重新mount即可。
4、直接remount,命令为
[root@localhost ~]# mount -o rw,remount /boot
IDC机房带宽突然从平时100M增加到400M,请你分析问题可能原因所在,并给出解决方法。?
1)IDC带宽被占满的原因很多,常见的有:
a.真实遭受DDOS攻击(遇到过几次,造成影响的不多见,其中还有黑客勒索的案例)。
b.内部服务器中毒,大量外发流量(这个问题老男孩接警5次以上)
c.网站元素(如图片)被盗连,在门户页面被推广导致大量流量产生(接警3次以上)
d.合作公司来抓数据,如:对合作单位提供了API数据接口(有合作的公司的朋友了解这个)
e.购买了CDN业务,CDN猛抓源站(这个次数也不少)。
f.其他原因还有一些,不普遍就不提了。
解决方法:
a.在路由器上禁用 ICMP。仅在需要测试时开放 ICMP。在配置路由器时也考虑下面的策略:流控,包过滤,半连接超时,垃圾包丢弃,来源伪造的数据包丢弃,SYN 阀值,禁用 ICMP 和 UDP 广播。
购买第三方服务,帮忙抵御DDOS攻击
如果攻击IP地址比较集中或者比较少,可以直接在防火墙规则中禁用该IP的访问
b.先请机房断掉连接外部服务器的网线,如负载均衡器等,仅保留基础设施,然后断掉内部服务器出网关的线路,切断外发流量源头。接下来查看监控流量服务,判断外发流量的服务器,然后进行处理。
c.防盗链就完事了,但是做防盗链之前记得向上级请示,看看哪些网站是被允许的
d-e.如:对合作单位提供了API数据接口或购买了CDN业务。
磁盘空间满了,删除了一部分Nginx access日志,但是,可发现磁盘空间还是满的,请问为什么?
在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。而我删除的是nginx的log文件删除的时候文件应该正在被使用
解决方法:重启nginx服务,或者用>/opt/nginx/logs/nginx.log清空日志文件,而不是直接删除。
请利用Shell开发一个rsync服务的启动停止脚本并通过chkconfig进行开关机管理。
#!/bin/sh
. /etc/init.d/functions
case "$1" in
start)
rsync --daemon
if [ $? -eq 0 ];then
action "rsync is started" /bin/true
else
action "rsync is started" /bin/false
fi
;;
stop)
pkill rsync
sleep 2
if [ `ps -ef|grep rsync|grep -v grep |wc -l` -eq 0 ];then
action "rsync is stoped " /bin/true
else
action "rsync is stoped " /bin/false
fi
;;
restart)
pkill rsync
sleep 2
if [ `ps -ef|grep rsync|grep -v grep |wc -l` -eq 0 ];then
rsync --daemon
if [ $? -eq 0 ];then
action "rsync is restarted" /bin/true
fi
fi
;;
*)
echo "USAGE :{start|stop|restart}"
;;
esac
ADD可以自动解压,COPY不能自动解压 ADD可以发送远程连接的文件 COPY只能发送本机的文件
1、当一个事务在主库端执行并提交时,产生GTID,一同记录到binlog日志中。
2、binlog传输到slave,并存储到slave的relaylog后,读取这个GTID的这个值设置gtid_next变量,即告诉Slave,下一个要执行的GTID值。
3、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有该GTID。
4、如果有记录,说明该GTID的事务已经执行,slave会忽略。
5、如果没有记录,slave就会执行该GTID事务,并记录该GTID到自身的binlog, 在读取执行事务前会先检查其他session持有该GTID,确保不被重复执行。
6、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。
a.在路由器上禁用 ICMP。仅在需要测试时开放 ICMP。在配置路由器时也考虑下面的策略:流控,包过滤,半连接超时,垃圾包丢弃,来源伪造的数据包丢弃,SYN 阀值,禁用 ICMP 和 UDP 广播。
购买第三方服务,帮忙抵御DDOS攻击
如果攻击IP地址比较集中或者比较少,可以直接在防火墙规则中禁用该IP的访问
b.先请机房断掉连接外部服务器的网线,如负载均衡器等,仅保留基础设施,然后断掉内部服务器出网关的线路,切断外发流量源头。接下来查看监控流量服务,判断外发流量的服务器,然后进行处理。
c.防盗链就完事了,但是做防盗链之前记得向上级请示,看看哪些网站是被允许的
d-e.如:对合作单位提供了API数据接口或购买了CDN业务。
磁盘空间满了,删除了一部分Nginx access日志,但是,可发现磁盘空间还是满的,请问为什么?
在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。而我删除的是nginx的log文件删除的时候文件应该正在被使用
解决方法:重启nginx服务,或者用>/opt/nginx/logs/nginx.log清空日志文件,而不是直接删除。
请利用Shell开发一个rsync服务的启动停止脚本并通过chkconfig进行开关机管理。
#!/bin/sh
. /etc/init.d/functions
case “$1” in
start)
rsync --daemon
if [ $? -eq 0 ];then
action “rsync is started” /bin/true
else
action “rsync is started” /bin/false
fi
;;
stop)
pkill rsync
sleep 2
if [ ps -ef|grep rsync|grep -v grep |wc -l
-eq 0 ];then
action "rsync is stoped " /bin/true
else
action "rsync is stoped " /bin/false
fi
;;
restart)
pkill rsync
sleep 2
if [ ps -ef|grep rsync|grep -v grep |wc -l
-eq 0 ];then
rsync --daemon
if [ $? -eq 0 ];then
action “rsync is restarted” /bin/true
fi
fi
;;
*)
echo “USAGE :{start|stop|restart}”
;;
esac
# Dockerfile中ADD和COPY区别
ADD可以自动解压,COPY不能自动解压 ADD可以发送远程连接的文件 COPY只能发送本机的文件
## GTID的工作原理
1、当一个事务在主库端执行并提交时,产生GTID,一同记录到binlog日志中。
2、binlog传输到slave,并存储到slave的relaylog后,读取这个GTID的这个值设置gtid_next变量,即告诉Slave,下一个要执行的GTID值。
3、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有该GTID。
4、如果有记录,说明该GTID的事务已经执行,slave会忽略。
5、如果没有记录,slave就会执行该GTID事务,并记录该GTID到自身的binlog, 在读取执行事务前会先检查其他session持有该GTID,确保不被重复执行。
6、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。