文章目录
一、MHA
1、集群
①首先搭建主从复制
②软链接(一条是做mysql命令,另一条是mysqlbinlog软链接)
③ssh免交互
④manager提权
2、Node组件
在所有服务器上优先部署
node组件作用:
2.1、抢救;
2.2、同步中继日志;
2.3、在mha节点上的node组件还会汇总其余node组件的信息,用于将详细信息提供给
3、manager
第一:维护MYSQL集群信息
第二:健康检测+故障切换
第三:核心的配置文件
3.1、master_ip_failover(VIP+VIP所在的虚拟接口)
My $vip = ‘192.168.175.200’ ---------》#浮动IP
My $ifdev = ‘ens33’---------------》 #使用的网卡为ens33
My $key -------------》#虚拟接口
App1.cnf
3.2、定义了MYSQL节点的主机(以server的方式来表示)
3.3、定义了从节点信息可定义主备服务器(需要忽略检查策略)
3.4、执行两个健康检查+启动MHA
3.5、首次启动时,在MASTER节点创建VIP
4、MHA原理
基于二进制日志故障备份+基于VIP的健康检查+故障自动切换(master----backup master)
二、OSI七层模型 TCP/IP协议簇面试题
问题:三次握手 为什么是三次,不是两次或者四次
答:二次:首先客户端向服务器发送建立连接的请求,此时由于各种原因TCP出现了延迟,客户端因为迟迟未得到反馈而断了连接,此时服务端接收到了客户端的请求,而发送确认信息,但由于客户端已经断了连接状态,而服务端保持打开状态,两次握手会使得服务端出现因为端口被占用而产生的资源浪费。四次:四次握手与二次握手效果一致,由于第三次握手是客户端发送确认服务端发送来的确认信息,若服务端此时再次发送确认,则显得十分浪费资源,且会出现端口被占用。与两次握手产生同样的问题。
三、linux
1、CPU
cat /proc/cpuinfo 只看CPU数量 grep “model name” /proc/cpuinfo |wc -l
2、内存
cat /proc/meminfo
3、查看每个进程的情况
cat /proc/PID号/status
4、查看负载
w /uptime
5、I/O
5.1、iostat命令(iostat [-c|-d|-k|-l]):iostat 命令主要通过观察物理磁盘的活动时间以及他们的平均传输速度,监控系统输入 / 输出设备负载。根据 iostat 命令产生的报告,用户可确定一个系统配置是否平衡,并据此在物理磁盘与适配器之间更好地平衡输入 / 输出负载。 iostat 工具的主要目的是通过监控磁盘的利用率,而探测到系统中的 I/O 瓶颈。不同操作系统命令格式输出格式略有不同,管理员可以通过查看用户手册来确定它的用法
-c : 仅显示 cpu的状态
-d : 仅显示存储设备的状态,不可以和 -c一起使用
-k : 默认显示的是读入读出的 block信息,用 -k可以改成 KB大小来显示
-t: 显示日期
-p device | ALL : device为某个设备或者某个分区,如果使用 ALL,就表示要显示所有分区和设备的信息
5.2、sar也可以使用查看I/O行为
5.3、iotop
6、磁盘
1:查看磁盘:df -h
2、查看内存大小free \ free [-m|g]按MB\GB显示 \vmstat
7、网络
7.1、ping -c -w -i count interval
7.2、telnet:telnet命令用于登录远程主机,对远程主机进行管理。telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。
7.3、nestat:netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况
7.4、ifconfig
7.5、route:route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。 要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在*/etc/rc.local中添加route命令来保证该路由设置永久有效。Arp (选项)(参数)
7.6、traceroute
7.7、host
7.8、tcpdump
tcpdump命令是一款抓取数据包的工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析。
8、查看系统整体情况
1、Top
Load average 0.00 0.01 0.05 三个数字分别代表不同时间段的系统平均负载,他们的数字是越小越好。法则:在多核处理中,你的系统均值不应该高于处理器核心的总数量
9、性能监视SAR命令
9.1、sar 5 10 sar以5秒钟间隔取得10个样本
9.2、性能监视sar命令
四、问题
一、Cpu
1、排查CPU负载过高+CPU怎么看负载过大,多少的数值算为高负载答:
第一步、top ----load average 或者查看线程中哪些比较耗费较高
第二步、Ps aux| grep PID 确定是什么服务的进程,
第三步、显示线程列表 ps -mp PID号 -o THREAD,tid,time查到tid 号,
第四步、printf “%x\n”tid号 将线程ID,tid进行16进制转换,
第五步,jstack pid | grep tid -A 30 显示堆栈信息 jstack PID| grep tid -A 30
1、top命令:Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。
2、ps命令: Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。
3、jstack: Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。
4、pstack:Linux命令。可以查看某个进程的当前线程栈运行情况。
二、 内存
1、问题:内存使用过高,内存溢出out memory怎么解决 java.lang.OutOfMemoryError: Java heap space
1、top命令查看最耗CPU的进程(进程:17038;CPU持续飙到595%+)# 输入top命令后键入P(大写P),进程按照CPU从高到底排序Top
2、查看该进程中最耗CPU的线程(发现有一些线程占用CPU较高)# 17038为进程号,键入P(大写P),该进程中的线程按照CPU从高到底排序 top -Hp 17038
3、将线程号转为16进制,同时查看这些线程当前正在干什么(在此以17045线程为例)# 将线程号转为16进制;其中17045为线程号printf ‘%xn’ 17045# 17038为进程号,0x4295为最耗CPU线程的十六进制jstack 17038 | grep ‘0x4295’ -C10 --color
4、可以看到最耗CPU的线程都是在进行GC用Jmap命令查看当前堆的使用情况(发现老年代现在已占用99.8%+)# 其中17038为进程号
jmap -heap 17038
5、查看gc频率的命令(其中O代表老年代占用率,FGC是FullGC次数,FGCT是fullGC时间;可以看出在频繁FullGC但是老年代有资源一直释放不掉)# 其中17038为进程号,5000是指每5秒(5000毫秒)输出一次
jstat -gcutil 17038 5000
6、通过分析出问题时线上日志发现内存溢出;至此定位到问题根源是内存溢出导致(有未释放资源堆积,导致老年代被占满,然后频繁的FullGC但是资源一直释放不了)
grep -m 10 ‘OutOfMemoryError’ *.log
2、内存过高,内存中的数据是否可以删除,如何缓解压力,如何持久化后,再清理。如何选择性的清理内存中的数据
定期删除+惰性删除
3、从java角度思考溢出问题
答:在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识。jvm管理的内存大致包括三种不同类型的内存区域:PermanentGeneration space(永久保存区域)、Heap space(堆区域)、JavaStacks(Java栈)。其中永久保存区域主要存放Class(类)和Meta的信息,Class第一次被Load的时候被放入PermGenspace区域,Class需要存储的内容主要包括方法和静态属性。堆区域用来存放Class的实例(即对象),对象需要存储的内容主要是非静态属性。每次用new创建一个对象实例后,对象实例存储在堆区域中,这部分空间也被jvm的垃圾回收机制管理。而Java栈跟大多数编程语言包括汇编语言的栈功能相似,主要基本类型变量以及方法的输入输出参数。Java程序的每个线程中都有一个独立的堆栈。容易发生内存溢出问题的内存空间包括:PermanentGeneration space和Heap space。
第一种OutOfMemoryError: PermGenspace
发生这种问题的原意是程序中使用了大量的jar或class,使java虚拟机装载类的空间不够,与PermanentGeneration space有关。解决这类问题有以下两种办法:
1.增加java虚拟机中的XX:PermSize和XX:MaxPermSize参数的大小,其中XX:PermSize是初始永久保存区域大小,XX:MaxPermSize是最大永久保存区域大小。如针对tomcat6.0,在catalina.sh或catalina.bat文件中一系列环境变量名说明结束处(大约在70行左右) 增加一行:
JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m"
如果是windows服务器还可以在系统环境变量中设置。感觉用tomcat发布sprint+struts+hibernate架构的程序时很容易发生这种内存溢出错误。使用上述方法,我成功解决了部署ssh项目的tomcat服务器经常宕机的问题。
2.清理应用程序中web-inf/lib下的jar,如果tomcat部署了多个应用,很多应用都使用了相同的jar,可以将共同的jar移到tomcat共同的lib下,减少类的重复加载。这种方法是网上部分人推荐的,我没试过,但感觉减少不了太大的空间,最靠谱的还是第一种方法。
第二种OutOfMemoryError: Java heap space
发生这种问题的原因是java虚拟机创建的对象太多,在进行垃圾回收之间,虚拟机分配的到堆内存空间已经用满了,与Heapspace有关。解决这类问题有两种思路:
- 检查程序,看是否有死循环或不必要地重复创建大量对象。找到原因后,修改程序和算法。
我以前写一个使用K-Means文本聚类算法对几万条文本记录(每条记录的特征向量大约10来个)进行文本聚类时,由于程序细节上有问题,就导致了Javaheap space的内存溢出问题,后来通过修改程序得到了解决。 - 增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小。如:set JAVA_OPTS= -Xms256m-Xmx1024m
三、I/O
1、问题:I/O负载过高,如何定义I/O的负载,read和write速率或者压力是多大,多少算是负载
答:在linux中,uptime\w\top等命令都会显示系统平均负载load average的输出产生的原因:负载受到多个因素影响,带宽,系统硬件配置、内核参数、应用程序等排查步骤:在查看了top命令所显示的状态后,需要依据来做优化,但是top命令显示的只是表象,所以我们可以通过iostat或者vmstat命令进一步的观察
1、查看系统负载
2、Procs r列表示运行和等待CPU时间片的进程数,如果长期大于1,说明CPU不足,需要增加CPU…b列表示在等待资源的进程数,比如正在等待I/O,或者内存交换等
3、CPU表示CPU的使用状态:US列显示用户方式下所花费CPU时间的百分比,US的值比较高,说明用户进程消耗的CPU时间多,但是如果长期大于50%需要考虑优化用户的程序;Sy列显示了内核进程所花费的CPU时间的百分比,这里的US+SY的参考值为80%,如果US+SY大于80%说明可能存在CPU不足;wa列显示了I/O等待所占用的CPU时间的百分比,这里的WA的参考值为30%,如果wa超过30%,说明I/O等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的;id列显示CPU处于空闲状态的时间百分比
四、磁盘容量
在不是inode,也不是进程占用的情况下,执行删除后依旧没有发送变化,最好的办法是将该磁盘做空即可。
五、网络
防火墙,linux防火墙策略,DNS解析
问题:假设我在网上申请一个域名www.cat.com发现无法进行解析,是什么情况?
答:换一个DNS服务端,是解决方式之一。配置的安全组,防火墙的选择WAF防火墙,第三方的网络插件,使用的协议TCP。
六、WAF
WAF一句话描述,就是解析HTTP请求(协议解析模块),规则检测(规则模块),做不同的防御动作(动作模块),并将防御过程(日志模块)记录下来。不管硬件款,软件款,云款,核心都是这个,而接下来围绕这句话来YY WAF的实现。WAF的实现由五个模块(配置模块、协议解析模块、规则模块、动作模块、错误处理模块)组成
七、NGINX
使用的资源:CPU 、 内存 、 磁盘容量 、I/O 、网络(qos---->工具优化----->防火墙、流量清洗(重复流量筛选/过滤,可以由第三方软件/服务来完成,大数据))以上指的是了连接的效率,以下指的是安全-----DDOS、黑客、cc等 WAF防火墙----->渗透、网络安全体系
八、多台nginx一起组合
一种类型 NGIXN 会做反向代理使用,另一种NGINX类型,会做为专门的图片加载工具
九、MYSQL
先复制一份表,作为临时表,保存在内存中,给予用户修改,当事务提交后,再将内存中的临时表数据修改,保存到磁盘中。在I/O线程,sql线程主要用于主从复制-----》增删改查中查询和写入 消耗线程资源(是一种连接机制)Mysql的线程池处理能力较差,多线程处理能力不够,并发处理能力不够,线程/任务处理能力进行优化redis+消息队列。
十、磁盘
1、raid 常用的是raid5
2、LVM逻辑卷
3、QUOTA 磁盘限额
十一、索引的过期机制