赞
踩
1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术,运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等
2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维
开发运维:是给应用运维开发运维工具和运维平台的
应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查
系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等
总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑
开发运维、应用运维和系统运维他们的工作是环环相扣的
游戏运营要做的一个事情除了协调工作以外,还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划
管理3百台服务器的方式:
1)设定跳板机,使用统一账号登录,便于安全与登录的考量。
2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。
3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。
不用root,添加普通用户,通过sudo授权管理
更改默认的远程连接SSH服务端口及禁止root用户远程连接
定时自动更新服务器时间
配置国内yum源
关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外)
调整文件描述符的数量
精简开机启动服务(crond rsyslog network sshd)
内核参数优化(/etc/sysctl.conf)
更改字符集,支持中文,但建议还是用英文字符集,防止乱码
锁定关键系统文件
清空/etc/issue,去除系统及内核版本登录前的屏幕显示
隐藏版本号
降权启动
删除测试页面
当收到一个HTTP请求时,nginx作为一个代理服务器将客户端的请求映射到一个location,location配置的每个指令会启动相应的不同的模块完成相应的工作
利用vrrp的原理进行工作,提供高可用集群服务,keepalived根据优先级选出master主机和slave主机,当服务器节点异常或出现故障时,keepalived回将故障节点从集群系统中自动剔除,故障节点恢复之后,keepalived再将器加入到集群系统中,所有工作无需人工干预
lvs工作在4层,消耗内存资源低,抗负载能力较强,没有流量产生,配置简单,工作稳定,应用较广,但lvs软件本身不支持正则表达式处理,不能做动静分离,不支持健康检查
Haproxy基于四层和七层的转发,是专业的代理服务器,支持虚拟主机,支持Session和Cookie的功能,效率.负载均衡速度比nginx高但低于lvs,支持TCP协议的负载均衡转发,负载均衡的策略较多,有8种策略,支持url检查,健康检查等
nginx基于七层的转发,当开启upstream模块支持四层转发,支持并发量大,正则表达式比Haproxy强大,但监控检查只支持通过端口,无法使用url检查
Haproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做,在很大并发量的时候选择lvs,中小型企业并发量不大可以做nginx或者Haproxy,由于Haproxy配置比较简单,所以中小企业更推荐使用Haproxy
什么是代理服务器:
能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你,如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网
优化404报错页面
Nginx的服务状态信息
优化并发量(修改内核参数ulimit -Hn/Sn vim /etc/security/limits.conf,压力并发测试 ab -n -c)
优化数据包头缓存
优化浏览器本地缓存静态数据
优化nginx服务的安全配置:
删除不需要的模块
修改版本信息
限制并发量(降低DOS风险)
拒绝非法的请求
防止buffer溢出(防止客户端请求数据溢出,降低DOS风险)
添加黑白名单(在配置文件中server处定义)
cookie过滤,URL过滤
iptables -t filter --sport 80 -j REJECT
iptables -t filter --dport 80 -j REJECT
DNS (53)
Telent (23)
SSH (22)
SMTP (25)
Mysql (3306)
HTTP (80)
HTTPS (443)
FTP (21,20)
Nginx (80)
Tomcat (8005,8009,8080)
Redis (6379)
Zabbix_server (10051)
Zabbix_agent (10050)
Pop (110)
Imap (143)
Rpc (111)
Ntp (123)
DHCP (67/68)
Memcache (11211)
监视master服务器,当master服务器宕机会自动将slave服务器升级为master服务器
哨兵功能还有监视、事件通知、配置功能。以下是哨兵的功能列表:
监控:不间断的检查主从服务是否如预期一样正常工作
事件通知:对被监视的redis实例的异常,能通知系统管理员,或者以API接口通知其他应用程序。
客户端写入数据时,slave主机的IO线程读取master主机的binlog日志,并写入本机的relaylog中继日志,SQL线程执行relaylog日志线程的SQL命令
1)docker启动快速,属于秒级别.虚拟机启动通常需要几分钟
2)docker需要的资源更少,docker在操作系统级别进行虚拟化,docker容器和内核交互,几乎没有性能损耗,性能优于虚拟机
3)docker更轻量级,docker的架构可以共用一个内核与共享应用程序库,占用内存极小.同样的硬件环境,docker运行的镜像数量远多于虚拟机数量,对系统的利用率更高
4)与虚拟机相比,docker的隔离性更弱,docker属于进程之间的隔离,虚拟机可以实现系统级别的隔离
5)安全性:docker的安全性更弱,docker的租户root和宿主机root等同,一旦容器内的用户从普通用户权限提升为root权限,他就直接具备了宿主机的root权限,进而可进行无限制的操作.虚拟机租户root权限和宿主机的root虚拟机的权限是分离的
6)可管理性:docker的集中化管理工具还不算成熟,各种虚拟化技术都有成熟的管理工具,例如:VMware等
7)高可用和可恢复性:docker对业务的高可用支持是通过快速部署实现的.虚拟机具备负载均衡,高可用,容错性,迁移和数据保护等成熟的熟的保障机制,保障业务的连续性
8)快速创建、删除:虚拟化的创建是分钟级别的,docker容器创建是秒级别的,docker的快速迭代性决定了无论是开发、测试部署都可以节约大量时间
9)交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化,docker在dockerfile中记录了容器的构建过程,可在集群中实现快速分发和快速部署
Elasticsearch:负责日志检索和储存
Logstash:负责日志收集和分析、处理
Kibana:负责日志的可视化
ELK可用于解决:
分布式日志数据集中式查询和管理
系统监控,包含系统硬件和应用各个组件的监控
故障排查
安全信息和事件管理
报表功能
Elasticsearch特点:
实时分析
分布式实时文件存储,将每个字段都编入索引
文档导向,所有的对象全部是文档
高可用性,易扩展,支持集群(Cluster)、分片和复制(shards和Replicas)
接口友好,支持JSON
Logstash特点:
所有类型的数据集中处理
不同模式和格式数据的正常化
自定义日志格式的迅速扩展
为自定义数据源轻松添加插件
Kibana特点:
灵活的分析和可视化平台
实时总结流量和数据的图表
为不同的用户显示直观的界面
及时分享和嵌入的仪表板
top uptime w tload
主动监控和被动监控都是相对于被监控端主机而言的
默认zabbix采用被动监控
当监控主机达到一定量级后,zabbix服务器会越来越慢,此时可以考虑使用主动监控,释放服务器的压力
zabbix也支持分布式监控
被动监控:server向Agent发起连接,发送监控key,Agent接受请求,响应监控数据
主动监控:Agent向server发起连接,Agent请求需要检测监控项目列表,server相应Agent发送一个items列表,Agent确认收到监控列表,TCP连接完成,会话关闭,Agent开始周期性收集数据
区别:
server不用每次需要数据都连接Agent,Agent会自己收集数据并处理数据,Server仅需要保存数据即可
①被监控端修改Agent配置文件(修改是否允许自定义key,加载配置文件目录)
②被监控端创建存放自定义key文件(在zabbix_agentd.conf文件中定义),书写自定义key
③重起客户端agentd
④测试自定义key是否生效
⑤在zabbix页面创建监控模板,创建应用,创建监控项,关联主机
1)创建存放Dockerfile的目录
2)书写Dockerfile
FROM:基础镜像
MAINTAINER:镜像创建者的信息
EXPOSE:开放的端口
ENV:设置变量
ADD:复制文件到镜像
RUN:制作镜像时执行的命令,可以有多个
WORKDIR:容器默认的工作目录
CMD:容器启动时执行的命令,仅可以有一条CMD
3)执行docker命令创建镜像仓库
docker build 容器名:标签 .(当前)
RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据
还有一个大功能,多块盘放在一起可以有冗余(备份)
RAID整合方式有很多,常用的:0 1 5 10
RAID 0,可以是一块盘和N个盘组合
其优点读写快,是RAID中最好的
缺点:没有冗余,一块坏了数据就全没有了
RAID 1,只能2块盘,盘的大小可以不一样,以小的为准
10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高
RAID 5,3块盘,容量计算10*(n-1),损失一块盘
特点,读写性能一般,读还好一点,写不好
冗余从好到坏:RAID1 RAID10 RAID 5 RAID0
性能从好到坏:RAID0 RAID10 RAID5 RAID1
成本从低到高:RAID0 RAID5 RAID1 RAID10
单台服务器:很重要盘不多,系统盘,RAID1
数据库服务器:主库:RAID10 从库 RAID5RAID0(为了维护成本,RAID10)
WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
有多台,监控、应用服务器,RAID0 RAID5
我们会根据数据的存储和访问的需求,去匹配对应的RAID级别
1)redis和memcache都是将数据存放在内存数据库,但memcache还可以用于缓存其他图片视频等
2)redis不仅支持简单的key:value类型数据,还提供list,set,hash等数据结构的存储
3)虚拟内存,redis当物理内存用完时,可以将一些很久没用到的value交换到磁盘
4)过期策略,memcache在set时就指定,例如set key 1 0 0 8,即永不过期,redis可以通过expire设定,例如expire name 10;
5)分布式,设定memcache集群,可以利用magent做一主多从,redis可以修改配置文件,以及slave on 设置一主多从
6)存储数据安全,memcache挂掉后,数据就没了.redis有数据的持久化RBD和AOF
7)灾难恢复,memcache挂掉后,数据不可恢复.redis数据丢失后可以通过AOF来进行恢复
8)redis支持master-slave模式数据的备份
9)应用场景,redis除了作为Nosql数据库外,还可以做消息队列,数据缓存等.memcache适合于缓存sql语句,数据集,用户的临时性数据,延迟查询数据和Session等
热备:
innobackupex
完全备份:
innobackupex --user 用户名 --password 密码 备份目录名 --no-timestamp
完全恢复:
innobackupex --apply-log 目录名 #准备恢复数据
innobackupex --copy-back 目录名 #恢复数据
增量备份:
innobackupex --user 用户名 --password 密码 --incremental-basedir=目录名 --no-timestamp
增量恢复:
innobackupex --apply-log --redo-only 目录名 --incremental-dir=目录名 #准备恢复数据
innobackupex --copy-back 目录名 #恢复数据
一款强大的在线热备工具
备份过程性在线不锁表,适合生产环境
冷备:
cp tar(物理备份) mysqldump(逻辑备份)
备份:
cp -r /var/lib/mysql
tar -zcvf /root/mysql.tar.gz
恢复:
cp -r 备份目录/mysql.bak /var/lib/mysql
tar -zxf /root/mysql.tar.gz -C /var/lib/mysql
vhown -R mysql.mysql /var/lib/mysql
物理备份的缺点:
跨平台性差
备份时间长、冗余备份、浪费存储空间
mysqldump(逻辑备份)
完全备份:备份所有数据
增量备份:备份上次备份后,所有新产生的数据
差异备份:本分完全备份后,所有新产生的数据
完全备份:
mysqldump -uroot -p密码 库名 > 目录/xxx.sql
完全恢复:
mysql -uroot -p密码 [库名] < 目录/xxx.sql
效率低、备份和还原速度比较慢、锁表
备份过程中,数据插入和更新操作被阻塞
ps:mysqldump在执行备份的时候会锁表,如果想让其备份时不锁表要加–skip-opt选项
模式:LVS/NAT模式 LVS/DR模式 LVS/TUN模式 LVS:fullnat模式
LVS/NAT模式:
原理:
客户端将访问vip报文发送给LVS服务器
LVS服务器将请求报文的目的地址修改为后端真实服务器(DNAT),发送给后端的真实服务器;
后端服务器在处理完之后将响应的报文返回给客户端,但却不在同一网段
LVS根据自己的追踪技术将后端真实服务响应客户端的报文源地址改为自己的IP地址(SNAT),发送给客户端
优缺点:
安全,可以实现不同网段的数据请求,但请求和相应报文都需要通过负载均衡调度器,当服务器节点数目升到20时,调度器本身就可能成为系统的瓶颈
LVS/DR模式:
原理:
客户端将访问的vip报文发送给LVS服务器
LVS服务器将请求报文的mac地址改为后端真实服务器的mac地址
后端真实服务器得到访问报文后进行IP查看,再确认自己有vip之后进行请求处理;
后端真实服务器在处理完数据请求后,直接响应客户端
优缺点:
LVS服务器只是修改了mac地址,所以非常快速,并且LVS不会成为瓶颈
但配置的要求比较高,LVS服务器必须和真实服务器处于同一vlan中
后端真实服务器直接响应客户端,对于后端真实服务器本身来说并不安全
LVS/TUN模式:
原理:
客户端将访问vip报文发送给LVS服务器
LVS服务器将请求报文重新封装,发送给后端真实服务器
后端真实服务器将请求报文解封,在确认自身有vip之后进行请求处理
后端真实服务器在处理完数据请求之后,直接响应客户端
优缺点:
快速,但不安全,不能抵挡DOS攻击,跨地区回答之网络延迟很大访问效率速度更低
LVS-fullnat模式:
原理:
客户端将访问vip报文发送给LVS服务器
LVS服务器将请求报文的目的地址修改为后端真实服务器(DNAT),发送给客户端
后端服务器在处理完之后要将响应的报文返回给LVS
LVS将返回的数据包源地址改为自己(SNAT),目的地址改为客户端(DNAT),发送给客户端
fullnat模式与nat模式相似但nat模式只做两次地址转换,fullnat却做了四次
1)监控脚本(监控系统、监控服务、监控硬件信息、监控性能、安全监控等)
2)系统初始化脚本(创建目录、创建账户、安装软件包、设置权限、修改内核参数等)
3)一键部署脚本(源码安装脚本)
4)备份脚本(自动备份数据库、备份网站数据、备份日志、备份配置文件)
5)日志分析脚本(分析日志数据、汇总统计相关信息,如PV或UV等、日志切割)
6)mysql全量备份、增量备份脚本
设置crontab定时任务,使用innobackup进行周日凌晨3点全量备份并删除上周的全量备份和周一至周六凌晨3点增量备份
7)配置ip地址、子网、网关,扩展硬盘空间
8)健康检测脚本:检测nginx服务是否运行来判断是否该关闭keepalived服务
9)预防脑裂脚本:指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
对于无状态服务的HA,无所谓脑裂不脑裂;但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂
解决办法:在keepalived配置文件中增加check配置,服务器周期性ping一下网关,累计连续失败的次数,当连续失败达到一定次数关闭keepalived服务;如果发现又能够ping通网关,再重启keepalived服务
myisam存储引擎
支持表级锁
不支持事务、事务回滚、外键
表文件:
表名.frm > desc 表名;
表名.MYI 索引index > show index from 表名;(查找索引文件)
表名.MYD 数据 > select * from 表名;
innodb存储引擎
默认的存储引擎
支持行级锁
支持事务、事务回滚、外键
表文件:
表名.frm 表结构 > desc 表名;
表名.ibd 索引index+数据 > show index from 表名;select * from 表名;
事务日志文件
/var/lib/mysql/ib_logfile0
/var/lib/mysql/ib_logfile1
Linux系统启动时,会读取/etc/fstab文件,该文件中包含有所有分区的挂载信息,系统根据该信息将所有设被挂载到特定位置
链路聚合时将两个或多个网卡数据信道结合成一个单个的通道,该通道以一个单个的更高宽带的逻辑链路出现,也可以实现网卡的冗余性.链路聚合;一般用来连接一个或多个带宽需求大的设备,例如连接骨干网络的服务器或服务器集群
Squid、Varinsh和Nginx都是代理服务器
什么是代理服务器:
能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你,如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网
区别:
1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业但是本身不支持特性挺多,只能缓存静态文件
2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成
3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术
在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。
还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存
它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的
4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境
工作中选择:
要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。
区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少
最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些
但稳定性和java程序的兼容性,应该是比resin的要好
工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容
中间件介绍:
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源
中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯
是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口
但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递,通过中间件,应用程序可以工作于多平台或OS环境。
jdk:jdk是Java的开发工具包,它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境
8005==》 关闭时使用
8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口
8080==》 一般应用使用
即内容分发网络
其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式
AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度
以nginx为例
步骤:
1)查看原版本的现有配置 nginx -V
2)下载解压新版本
3)将原版本的重要文件做备份(为了安全)cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
4)编译新版本,要求要和旧版本的所有配置一模一样,如果有新的模块也要添加,不执行make install(由于原先已有nginx,所以不能执行make install,否则会覆盖掉以前的配置文件及内容)
5)检查是否成功 nginx -t
6)平滑升级切换
注意:要根据自己实际的编译的配置内容,查找自己的pid文件的位置。
kill -USR2
cat nginx.pid
将旧版本Nginx的主进程将重命名为nginx.pid.oldbin,并执行新版本的Nginx可执行程序,启动新的主进程和新的工作进程,再次生成新的nginx.pid文件kill -WINCH
cat nginx.pid.oldbin
平缓停止worker process(此步骤可省略)kill -QUIT
cat nginx.pid.oldbin
平缓停止旧的Nginx服务进程7)查看当前nginx的版本信息 nginx -V
nginx支持的信号,可以用来控制nginx的活动
TERM,INT——快速关闭
QUIT 平滑关闭
HUP 平滑重启,重新加载配置文件
USR1 重新打开日志文件
USR2 平滑升级可执行程序
WINCH 平滑关闭工作进程
用户要访问http://www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.http://baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站http://www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端
RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地
mysql的innodb如何定位锁问题:在使用 show engine innodb status检查引擎状态时,发现了死锁问题在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)innodb_trx ## 当前运行的所有事务innodb_locks ## 当前出现的锁innodb_lock_waits ## 锁等待的对应关系
mysql如何减少主从复制延迟:
如果延迟比较大,就先确认以下几个因素:
从库硬件比主库差,导致复制延迟
主从复制单线程,如果主库写并发太大,来不及传送到从库就会导致延迟。
更高版本的mysql可以支持多线程复制
慢SQL语句过多
网络延迟
master负载,主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层
slave负载,一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器,只作为备份用,不进行其他任何操作.另外, 2个可以减少延迟的参数:–slave-net-timeout=seconds 单位为秒 默认设置为 3600秒
参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据
–master-connect-retry=seconds 单位为秒 默认设置为 60秒
参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试
通常配置以上2个参数可以减少网络问题导致的主从数据同步延迟
MySQL数据库主从同步延迟解决方案
最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行,还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit= 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave
一、 在已知MYSQL数据库的ROOT用户密码的情况下,修改密码的方法:
1、 在SHELL环境下,使用mysqladmin命令设置: mysqladmin –u root –p password “新密码” 回车后要求输入旧密码
2、 在mysql>环境中,使用update命令,直接更新mysql库user表的数据:
Update mysql.user set password=password(‘新密码’) where user=’root’; flush privileges; 注意:mysql语句要以分号”;”结束
3、 在mysql>环境中,使用grant命令,修改root用户的授权权限。
grant all on . to root@’localhost’ identified by ‘新密码’;
二、 如查忘记了mysql数据库的ROOT用户的密码,又如何做呢?方法如下:
1、 关闭当前运行的mysqld服务程序:service mysqld stop(要先将mysqld添加为系统服务)2、 使用mysqld_safe脚本以安全模式(不加载授权表)启动mysqld 服务 /usr/local/mysql/bin/mysqld_safe –skip-grant-table &
3、 使用空密码的root用户登录数据库,重新设置ROOT用户的密码 #mysql -u root Mysql> Update mysql.user set password=password(‘新密码’) where user=’root’; Mysql> flush privileges;
mysqldump工具
mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump,支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景,Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。
基于LVM快照备份
在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别而innodb不开启独立表空间的话只能备份整个数据库。
tar包备份
percona提供的xtrabackup工具,支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同,数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展,可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份
cat access.log | awk ‘{print $1}’ | uniq -c | sort -rn | head -10
tcpdump ‘host 192.168.1.1 and port 80’ > tcpdump.log
iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp -dport 80 -j DNAT-to-destination 192.168.2.1:8080
tcpdump -nn tcp port 80
A,造成服务器故障的原因可能有一下几点:
1)服务器电源有问题(断电,电源松动,认为原因)
2)服务器系统文件丢失,硬件问题,散热不良造成蓝屏和死机
3)服务器网络参数配置错误,物理链路原因
B,排查服务器故障的处理步骤如下:
1)先看服务器的电源指示灯是否亮,如果电源灯不亮,先检查并确认电源没问题,试着按开机键是否能点亮服务器,如果不能点亮,和数据确认后先更换备用服务器以便快速恢复业务
2)如果服务器电源灯亮,接上显示器和键盘,如果服务器系统有异常,不能登录系统,先和数据确认,是否指定能重启服务器或是更换备用服务器,以便快速恢复业务
3)如果正确输入用户名和密码情况下登录系统,查看网卡指示灯是否正常,并用ifconfig命令查看网卡接口状态.用ping对ip测试网络是否连通
4)如果ping不通,先和数据人员确认并检查网卡配置文件参数是否配置正确,是否正确配置网关,用ifdown;ifup 网卡名"命令重启单个网卡,网卡接口(指示灯)状态正常后,再用ping命令测试"
5)还ping不通,即使排查并确保本地尾纤,模块等物理设备接入正常,收发光在规定范围内,和数据人员确认是否可以重启服务器,并确认数据方没有网络配置和数据方面的变化
6)能ping通告知数据人员,并让数据人员帮忙确认链路是否正常,有没有丢包现象等,没有丢包就OK,有就继续排查尾纤,模块等,直到链路正常没有丢包,数据人员能及时的从远程登录服务器做数据配置,快速恢复业务为OK
7)如果不能接入服务器,与数据确认是否可以重启.
1)最简单有效的方法就是重装系统
2)要查的话就是找到病毒文件然后删除中毒之后一般机器cpu、内存使用率会比较高,机器向外发包等异常情况,排查方法简单介绍下,top 命令找到cpu使用率最高的进程,一般病毒文件命名都比较乱,可以用 ps aux 找到病毒文件位置,rm -f 命令删除病毒文件,检查计划任务、开机启动项和病毒文件目录有无其他可以文件等
3)由于即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装一下
公司的内网某台linux服务器流量莫名其妙的剧增,用iftop查看有连接外网的情况针对这种情况一般重点查看netstat连接的外网ip和端口。用lsof -p pid可以查看到具体是那些进程,哪些文件,经查勘发现/root下有相关的配置conf.n hhe两个可疑文件,rm -rf后不到一分钟就自动生成了,由此推断是某个母进程产生的这些文件。所以找到母进程就是找到罪魁祸首
查杀病毒最好断掉外网访问,还好是内网服务器,可以通过内网访问
断了内网,病毒就失去外联的能力,杀掉它就容易的多,怎么找到呢,找了半天也没有看到蛛丝马迹,没办法只有ps axu一个个排查,方法是查看可以的用户和和系统相似而又不是的冒牌货,果然,看到了如下进程可疑,看不到图片就是/usr/bin/.sshd,于是我杀掉所有.sshd相关的进程,然后直接删掉.sshd这个可执行文件,然后才删掉了文章开头提到的自动复活的文件
总结一下,遇到这种问题,如果不是太严重,尽量不要重装系统
一般就是先断外网,然后利用iftop,ps,netstat,chattr,lsof,pstree这些工具顺藤摸瓜一般都能找到元凶。但是如果遇到诸如此类的问题/boot/efi/EFI/redhat/grub.efi: Heuristics.Broken.Executable FOUND,个人觉得就要重装系统了
第一层:物理层,利用传输介质为数据提供物理连接, 对应的协议:
第二层:数据链路层:建立和管理各节点间的链接链路 对应的协议:PPTP、CDP
第三层:网络层,是控制数据链路层与上传输层之间的信息转发、建立与维持对应的协议:ICMP IGMP IP(IPV4IPV6) ARP RARP
第四层:传输层,提供会话传输服务,确保数据正确传送对应的协议:TCP UDP,数据包一旦离开网卡即进入网络传输层
第五层:会话层,提供建立会话管理,支持数据交换,对应主机进程,指本地主机与远程主机正在进行的会话
第六层:表示层,处理数据(数据格式、编码、加密等),按一定的格式传送至会话层,(在五层模型里面已经合并到了应用层) 格式有,JPEG、ASCll、DECOIC、加密格式等
第七层:应用层,为用户提供各类应用服务(文件、打印、邮件等服务)对应协议:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
1)将硬盘或分区转化为物理卷
2)将一个或多个物理卷组成卷组
3)从卷组中划分逻辑卷
创建基本分区 /dev/vdb1 /dev/vdb2等
创建卷组 vgcreate myvg /dev/vdb1 /dev/vdb2
划分逻辑卷: lvcreate -L 16G -n mylv myvg
1)准备空闲存储
2)安装targetcli
3)运行targetcli进行配置
- 创建与命名后端存储:backstores/block create name=back dev=/devvdb1
- 创建target磁盘组: iscsi/create iqn.2020-01.com.example:server0
-lun逻辑单元:iscsi/iqn.2020-01.com.example:server0/tpg1 luns create /backstores/block/back
- 配置访问控制,设置访问服务时,客户端声称的名字:iscsi/iqn.2020-01.com.example:server0/tpg1/acls create iqn.2020-01.com.example:client0
-客户端访问本机的ip地址以及端口:iscsi/iqn.2020-01.com.example:server0/tpg1/ portals create 172.25.0.10
4)重起服务target设置开机自启
在客户端访问iscsi磁盘:
1)安装所需软件包 iscsi-initiator-utils
2)修改配置文件/etc/iscsi/initiorname.iscsi设置访问服务时,客户端声称的名字
iqn.2020-01.com.example:client0
3)重起服务iscsid更新iqn标识
4)发现服务端共享存储
iscsiadm --mode discoverydb --type sendtargets --portal 172.25.0.10 --discover
5)本机识别加载服务端共享,重启iscsi服务设置开机自启
1)为每一个虚拟主机建立一份独立的配置文件,放到/etc/httpd/conf.d目录下,配置文件名称以.conf结尾
2)配置<VirtualHost IP 端口号>… …</VirtualHost>区段标记,其中使用语句ServerName指定站点名称,使用DocumentRoot指定网页目录
3)重起httpd服务
静态网页:浏览器访问到的网页就是服务端提供的文件
动态网页:浏览器访问到的网页文件时服务端指定的程序动态生成的网页文件
支持PHP的程序:安装httpd、php软件包
支持Python程序:安装httpd、mod_wsgi软件包,并在配置站点时添加程序调用别名(WSGIScriptAlias)
安装mod_ssl模块软件包
提供可用的网站证书、密钥部署到正确的位置
修改/etc/httpd/conf.d/ssl.conf配置文件,指定站点名、网页目录、证书以及密钥的路径
软连接的源文件或目录如果被删除,则链接文件将失效,可以跨分区/文件系统创建软连接
硬链接的源文件或目录如果被删除,则硬链接依旧可以正常使用,硬链接不可以跨分区/文件系统
安装依赖包
使用tar解包
使用./configure完成系统检测与配置
make编译源代码
make install 安装软件包
利用yum provides找出产生该程序文件的软件包
再利用yum reinstall重新安装即可
DHCP服务器:为客户机提供ip地址等参数,并告知下一个服务器地址、启动文件名
TFTP服务器:为客户机提供启动文件、启动菜单配置、用来安装系统的内核以及初始驱动程序
软件仓库:通过HTTP或FTP方式为客户机提供安装树资源(RHEL7光盘目录结构)
实现kickstart无人值守安装:
1)提前准备一份安装过程中所涉及问题的答案清单(即应答文件)一般利用system-config-kickstart图形生成
2)将此文件部署到客户机下载的位置
3)通过菜单文件进行指定客户端下载
Cobbler具备多系统的镜像仓库以及应答文件仓库,非常适合多系统的安装
Cobbler会默认生成菜单文件以及应答文件,非常自动化
Cobbler自动搭建网络yum仓库
作用:
(1)捕获网络协议包
(2)分析网络协议包
命令格式:
tcpdump [选项] [过滤条件]
选项:
-i 指定监控的网络接口
-A 转换为ACSII码,以方便阅读
-w 将数据包信息保存到指定的文件
-r 从指定文件读取数据包信息
-c 定义抓包个数
过滤条件:
类型:host、net、port、portrange
方向:src(源地址)、dst(目标地址)
协议:tcp、udp、ip、wlan、arp…
多个组合条件:and、or、not
DNS分离解析:针对同一个域名,为不同的客户机提供不同的解析结果
关键配置:通过view语句为客户端分类,在每个视图内使用match-client来匹配客户机的来源地址,每个视图内都定义目标DNS区域但不调用不同的地址库文件
/:整个Linux文件系统的根目录
/boot:存放系统内核、启动菜单配置等文件
/home:存放普通用户的默认家目录(同名子目录)
/root:管理员的家目录
/bin、/sbin:存放各种系统命令、可执行的程序
/dev:存放设备文件
/etc:存放各种系统配置、系统服务配置文件
1500字节
按部门划分主机
好处:广播控制,增加安全,提高带宽利用,降低延迟
交换机工作在数据链路层,转发数据帧,通过MAC地址查找主机
路由器工作在网络层,转发数据包,可以识别IP地址进行路径选择
网络层提供点到点服务
传输层提供端到端服务
pop3、imap、smtp、dns、windows远程、DHCP、mysql
服务名 协议 端口
pop3 tcp 110
imap tcp 143
smtp tcp 25
dns tcp 53
udp 53
Windows远程 (mstsc) tcp 3389
DHCP 服务端udp 67
客户端udp 68
mysql tcp 3306
十六进制,长度六字节,前24位是厂商标识,后24位是序列号
因为arp协议可以根据IP地址解析mac地址,使用ping测试对方后输入arp -a 即可查询arp缓存表而得到mac地址
例:
[student@room9pc01 ~]$ ping -c 2 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=255 time=1.32 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=255 time=1.54 ms
— 192.168.1.2 ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.324/1.436/1.549/0.118 ms
[student@room9pc01 ~]$ arp -a
176-130-9-1.abo.bbox.fr (176.130.9.1) at 00:15:f9:d1:eb:49 [ether] on eth0
TCP与UDP协议
TCP是可靠的传输,面向连接,传输效率低
UDP时不可靠的,无连接的,传输效率高
在TCP/IP中,采用三次握手来建立一次连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,两者可以进行数据交换了,完成三次握手。
四次断开过程如下:
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送,提出断开连接要求。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。确定这一方连接将关闭。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端,请求关闭连接。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
导致目标系统无法处理正常用户的请求行为,即拒绝服务攻击
主要特点:
不需要侵入受攻击的系统
如果目标系统没有漏洞,远程攻击也有可能成功
不以窃取目标系统上的机密信息为目的
局域网内的网关或主机的网关无效,没有设置连接公网的网关
默认路由是特殊的静态路由,在路由表中找到不明确的路由条目时会使用默认路由,一般在网关出口访问外网时使用
作用:
网络地址转换
优点:
节约公网IP,提高安全,处理地址重叠
业务范畴:
web服务器,App服务器,PC主机
awk ‘{print $3}’ 文件名
awk支持按列输出,通过内置变量$1,$2,$3…可以显示任意列,默认列是一空格或Tab缩进为分隔符,也可以使用-F选项指定其他分隔符
awk ‘{ip[$1]++}END{for(i in ip){print ip[i],i}}’ /var/log/httpd/access_log
定义数组,数组名为ip,数字下标为日志文件的第一列(也就是客户端的IP地址),++目的在于对客户端进行统计计数,客户端IP出现一次计数器就加一.END中的指令在读取完文件后执行,通过循环将所有的统计信息输出
命令 &> 文件名
命令 > 文件名1 2> 文件名2
命令 > 文件名 2>&1
命令 &>> 文件名
命令 >> 文件名1 2>> 文件名2
命令 >> 文件名 2>&1
* 表示匹配的前面的字符出现了任意次(包括0次)
表示匹配的前面的字符出现了至少1次(1次或多次)
- 1
? 表示匹配前面的字符出现了0次或1次
[] 表示集合,匹配集合中的任意单个字符
[^] 表示对集合取反
{n} 表示精确匹配前面的字符出现了n次
[root@test ~]# vim test.sh
#!/bin/bash
init=123456
for i in {1…3}
do
read -p “请输入密码:” pass
if [ $pass == $init ];then
echo “密码正确”
exit
fi
done
echo “警告:密码输入错误”
[root@repo ~]# bash test.sh
请输入密码:789456
请输入密码:4857
请输入密码:46584
警告:密码输入错误
[root@repo ~]# bash test.sh
请输入密码:123456
密码正确
[root@repo ~]# vim test1.sh
#!/bin/bash
str=“abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789”
pass=“”
for i in {1…8}
do
num= [ R A N D O M [RANDOM% [RANDOM{#str}]
tmp=${str:num:1}
pass+=$tmp
done
echo $pass
[root@repo ~]# bash test1.sh
fI55Qcr0
[root@repo ~]# bash test1.sh
iTmEyE9Q
[root@repo ~]# bash test1.sh
wy0PvcHa
[root@repo ~]# bash test1.sh
nk6AC9VT
执行./configure脚本时,通过添加–with-模块名的方式启用更多模块,通过添加–without-模块名禁用不需要的模块
ngx_http_auth_basic_module模块 实现网站的用户认证功能,包含auth_basic等配置参数
ngx_http_charset_module模块 可以自定义网页编码,包含charset utf8等配置参数
ngx_http_fastcgi_module模块 转发请求给PHP服务,包含fastcgi_pass等配置参数
ngx_http_gzip_module模块 实现网站数据压缩功能,包含gzip、gzip_type等配置参数
ngx_http_log_module模块 记录用户请求的日志,,包含access_log等配置参数
ngx_http_rewrite_module模块 地址重新模块,包含rewrite、break、last等配置参数
ngx_http_ssl_module模块 实现HTTPS加密网站,包含ssl_certificate、ssl_certificate_key等参数
ngx_http_stub_status_module模块 显示nginx服务状态,包含stub_status配置参数
ngx_http_upstream_module模块 定义集群服务器组模块,包含upstream、hash、ip_hash等配置参数
ngx_stream_core_module模块 定义4层调度(集群服务器组)模块
ngx_http_core_module模块 核心模块,包含http、server_name、root等配置参数
ngx_http_access_module模块 访问控制模块,包含allow和deny配置参数
ngx_http_proxy_module 模块 代理模块,包含proxy_pass等配置参数
ngx_http_limit_conn_module 模块 限制并发量模块,包含limit_conn等参数
proxy模块中配置过:proxy_set_header proxy_connect_timeout proxy_send_timeout proxy_buffer_*
基于7层的HTTP代理和MAIL代理
基于4层的TCP或UDP代理
定义集群服务器模板配置:
upstream servers {
server 后端真实服务器IP:端口
server 后端真实服务器IP:端口
}
调用集群配置文件模板:
7层调度:proxy_pass http://servers;
4层调度:proxy_pass servers;
临时调整的规则:
ulimit -Hn 数量 #硬限制
ulimit -Sn 数量 #软限制
永久规则:
vim /etc/security/limit.conf
用户或组 soft nofile 数量
用户或组 hard nofile 数量
状态码 功能描述
200 一切正常
301 永久重定向
302 临时重定向
401 用户名或密码错误
403 禁止访问(客户端IP地址被拒绝)
404 文件不存在
414 请求URI头部过长
500 服务器内部错误
502 Bad Gateway
SVN是一个版本控制系统,主要功能为版本控制,支持日志、数据恢复功能
可以实现的功能:
svn co 下载代码
svn ci 提交代码
svn log 查看日志
svn update 更新代码
svn diff 查看代码差异
svn rm 删除
svn merge 合并
工作中主要用于:
代码管理(通过版本库上线代码到服务器)
文档管理(技术指导手册的版本控制)
netstat或ss命令查看系统中启动的端口信息
该命令的常用选项:
-a 显示所有端口信息
-n 以数字形式显示端口号
-t 显示tcp连接的端口
-u 显示udp连接的端口
-l 显示服务器正在监听的端口信息,如httpd启动后,会一直监听80端口
-p 显示监听端口的服务名称是什么(也就是程序名称)
开启一个独立的Connector,设置端口,并在配置中调用非对称秘钥文件
默认的SSL端口为443端口,Tomcat配置文件中的默认设置为8443端口
1)安装rpmbuild工具
2)将源码包放到SOURCES目录下
3)在SPECS目录下创建一个spec配置文件,病按照格式要求编辑文件内容
4)使用rpmbuild -ba spec 文件,即可转换成一个RPM包
SPECS文件可以定义:
软件的描述信息,如何编译安装源码软件,对什么文件进行打包封装为RPM,安装前和安装后脚本等
读取sysfs文件系统下的设备信息,udev可以动态地将设备添加到/dev/目录
基于事先定义的规则,可以定义设备的名称、修改设备的权限、触发命令等操作
在NFS配置文件/etc/exports中添加共享属性no_root_squash
NAS网络附加存储,如NFS、Samba、FTP
SAN存储区域网络,如ISCSI、HP、EMC
分布式存储,如Ceph
块设备的方式:
1)服务器需要MON和OSD组件实现块设备共享
2)客户端可以使用Linux系统直接访问或者通过KVM访问共享存储
3)Linux直接访问时,客户端需要安装ceph-common,并拷贝配置文件和密钥文件
4)通过KVM访问时,需要修改KVM虚拟机的XML文件并定义Secret账户
文件系统方式:
1)服务器需要额外部署一台MDS主机(存储元数据metedata)
2)客户端直接通过mount或者/etc/fstab实现挂载访问
3)客户端挂载时需要提供服务器IP地址、端口、账户和密码
对象存储的方式:
1)服务器需要额外部署一台RGW主机(提供web服务的接口)
2)客户端无法直接访问对象存储,必须使用第三方软件
3)或者开发人员自己编写的程序调用Ceph的API
4)API(是Ceph提前准备好的函数,开发人员直接调用这些函数就可以对Ceph做读写操作)
keepalived首先做初始化检查state状态,master为主服务器,backup为备用服务器,然后再对比所有服务器的priority,谁的优先级高谁就是最终的主服务器
优先级高的服务器会通过IP命令为自己的电脑配置一个提前定义好的浮动IP地址
RDBMS:
- Mysql
- MariaDB
- Oracle
- DB2
- SQL Server
Nosql:
- Memcached
- Redis
- MongoDB
- Neo4j
- FlockDB
数值类型(整型):int 、tinyint 、smallint、bigint 、mediumint
字符类型:char 、varchar
日期时间类型:datetime 、timestamp
浮点型:float 、double
mysqlbinlog [选项] binlog日志文件名 | mysql -u用户名 -p密码
原子性、一致性、隔离性、持久性
原子性:事物的整个操作是一个整体,不可分割,要么全部成功,要么全部失败
一致性:事务操作的前后,表中的记录没有变化
隔离性:事务操作是相互隔离不受影响
持久性:数据一旦提交,不可改变,永久改变表数据
一个表只能有一个主键
字段的值不允许重复且不允许赋null值
多个字段做主键称为复合主键
TRUNCA和DELETE只能删除数据,而DROP则删除整个表(结构和数据)
1)DELETE删除操作作为事务记录在日志中保存一遍进行回滚操作
2)TRUNCATE TABLE则一次性从表中删除所有的数据并不把单独的删除记录计入日志保存,删除行是不能恢复的,并且在删除的过程中不会激活与表有关的删除触发器,执行速度快
3)表和索引所占空间,档表被TRUNCATE后,这个表和索引所占的空间会恢复到出事大小,而DELETE操作不会减少表或索引所占用的空间,drop语句将表所占用的空间完全释放
(1NF)中表的每一行只包含一个实例的信息,简而言之,第一范式就是无重复的列
(2NF)是在第一范式(1NF)的基础上建立起来的,机满足第二范式(2NF)必须先满足第一范式(1NF),要求实体的属性完全依赖于主关键字.简而言之,第二范式就是非主属性非部分依赖于主关键字
(3NF)必须先满足第二范式(2NF),要求一个数据库表中不包含已在其他表中已包含的非主关键字信息.简而言之,第三范式就是属性不依赖于其他非主属性
Statement:每一条会修改数据的sql都会记录在binlog中
Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改
Mixdlever:是以上两种的混合使用
masterha_check_status 、 masterha_check_ssh 、 masterha_check_repl 、 masterha_manager
masterha_check_status 检查mha服务状态
masterha_check_ssh 检查ssh配置
masterha_check_repl 检查主从同步配置
masterha_manager 启动mha服务
-u -p -P
-u 指定用户名
-p (小写p)指定密码
-P (大写P)指定端口号
port,datadir,socket,pid_file,log_error
port 端口号
datadir 数据库目录
socket 锁定socket文件的路径和名称
pid_file 进程pid号文件位置
log_error 错误日志位置
slow-query-log 、 slow-query-log-file 、 long-query-time
slow-query-log: 启用慢查询日志
slow-query-log-file: 定义慢查询日志名称
long-query-time: 指定超时时间
视图是虚拟的表,与包含数据的表不通,视图里只包含会使用时的动态检索数据的查询;不包含任何列或数据
优点:
使用视图可以简化复杂的sql操作,隐藏具体的细节,保护数据;视图创建后,可以使用与表相同的方式利用他们
数据库优化通常从三方面考虑:
\1. 替换有问题的硬件
主要原因是数据库会占用大量资源,不过解决方案也仅限于此
\2. 对MySQL进程的设置进行优化
适当分配内存,并让mysqld了解将会承受何种类型的负载
\3. 对查询进行优化
对表应用了适当的索引.还可以记录慢查询
优化MySQL查询缓存
用EXPLAIN使你的SELECT查询更加清晰:了解MySQL正在进行什么样的查询操作,这
可以帮助你发现瓶颈的所在,并显示出查询或表结构在哪里出了问题
EXPLAIN查询的结果,可以告诉你那些索引正在被引用,表是如何被扫描和排序的等等
尽量避免SELECT *命令1)sql语句优化
2)索引优化
3)数据结构优化
4)服务运行参数优化
5)服务器硬件优化
两者唯一的区别是触发器不能使用EXECUTE语句使用,而是在用户执行Transact-SQL语句时自动触发(激活)执行,触发器是在一个修改了指定表中的数据时执行的存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用
函数:只能返回一个变量的限制
存储过程:可以返回多个变量的限制
函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行
存储过程可以返回参数,函数只能返回值或者表对象
存储过程一般是作为一个独立的部分来执行,二函数可以作为查询语句的一个部分来调用
错误日志、binlog日志、查询日志、慢查询日志、事务日志、中继日志
RDB:全部Redis DataBase 按照指定的时间间隔,将内存中的数据集快照写入硬盘
AOF:全部Append Only File 记录redis服务所有写操作不断的将新的写操作追加到文件的末尾
字符类型:string
列表类型:list
Hash表类型:hash
集合类型:set
有序集合类型:zset
1)速度快,因为数据存在内存中
2)支持丰富的数据类型,支持string、list、set、sorted、set、hash
3)支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
4)丰富的特性:可用于缓存消息,按key设置过期时间,过期后会自动删除
1)Master最好不要做任何持久化工作
2)如果数据比较重要,某个slave开启AOF备份数据,策略设置为每秒同步一次
3)为了主从复制的速度和连接的稳定性,Master和slave最好在同一局域网内
4)尽量避免在压力很大的主库上增加从库
Noeviction 不删除
allkeys-lru 从所有key中情绪使用频率最少的key
volatile-lru 最近最少使用(针对设置了TTL的key)
allkeys-random 随机移除key
volatile-random 在设置了TTL的key里随机移除
volatile-ttl 移除最近过期的key
allkeys-lfu 从所有的key中清除使用频率最少的key
volatile-lfu 从所有key中清除使用频率最少的key
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7JRrexoA-1590076983063)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml3724\wps1.png)]
1、RAID10的情况
这种情况中,我们假设当DISK0损坏时,在剩下的3块盘中,只有当DISK1一个盘发生故障时,才会导致整个RAID失效,我们可简单计算故障率为1/3。2、RAID01的情况
这种情况下,我们仍然假设DISK0损坏,这时左边的条带将无法读取。在剩下的3块盘中,只要DISK2,DISK3两个盘中任何一个损坏,都会导致整个RAID失效,我们可简单计算故障率为2/3。
1)Linux系统的稳定性
Linux采取了许多安全技术措施,其中有对读、写进行权限控制、审计跟踪、核心授权等技术,这些都为安全提供了保障。Linux由于需要应用到网络服务器,这对稳定性也有比较高的要求,实际上Linux在这方面也十分出色。
2)Linux系统的安全性
Linux系统在设计的时候就是针对多用户环境的,所以对系统文件,用户文件都做了明确的区分,每个文件都有不同的用户属性,作为一个普通用户,通常只能读写自己的文件,而对一般的系统文件只能读取不能改动,一些敏感的系统文件甚至连读取都是被禁止的,这种设计从根本上保证了系统的安全性,即使一个用户文件出现了问题,也不会殃及整个系统。
3)Linux软件安装的便利性:
在Windows平台下,通常只要一直用鼠标单击下一步按钮就
4)Linux软件资源消耗
可以完成安装。由于内核小,因此他可以支持多种电子产品,如:Android手机,PDA等,资源消耗很少。
default:为后续的其他部分设置缺省参数,缺省参数可以被后续部分重置;
frontend:描述集群接收客户端请求的信息集合;
backend:描述转发链接的后端服务器集合;
listen:把 frontend 和 backend 结合到一起的完整声明。
1)关闭不用的服务
2)用iptables限定规则,只开放22,80等常用端口
3)禁止root用户直接登录服务器,只允许密钥验证,配置合适的sudo规则
4)限定登录服务器的ip白名单
5)Apache/nginx配置文件中配置web认证、访问控制、限定某些目录禁止解析等操作
6)设置php.ini,禁掉高危函数,配置合适的open_basedir
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
1)Web Server启动时载入FastCGI进程管理器
2)FastCGI进程管理器初始化,启动多个解释器
3)当客户端的请求到达Web Server时,FastCGI进程管理器选择并连接到一个解释器
4)FastCGI子进程完成处理后返回结果,将标准输出和错误信息从同一连接返回
Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,
在主机操作系统的用户空间中作为独立进程运行。Docker容器是Docker镜像的实例。
常见原因:
1)Master负载过高
2)Slave负载过高
3)网络延迟
4)机器性能太低
5)Mysql配置不合理优化方法:
1)优化网络
2)升级Slave硬件配置
3)分库,将一个主库拆分为多个主库,每个主库的写并发就减少了几倍,此时主从延迟可以忽略不计
4)打开Mysql支持的并行复制,多个库并行复制
1)去掉对web.xml的监视,把jsp提前编辑成Servlet。有富余物理内存的情况,加大tomcat使用的jvm的内存2)服务器资源
服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。
(1) 对于高并发情况下会有大量的运算,那么CPU的速度会直接影响到处理速度。
(2) 内存在大量数据处理的情况下,将会有较大的内存容量需求,可以用-Xmx -Xms -XX:MaxPermSize等参数对内存不同功能块进行划分。我们之前就遇到过内存分配不足,导致虚拟机一直处于full GC,从而导致处理能力严重下降。
(3) 硬盘主要问题就是读写性能,当大量文件进行读写时,磁盘极容易成为性能瓶颈。最好的办法还是利用下面提到的缓存。3)利用缓存和压缩
对于静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我们采用了Nginx作为缓存服务器,将图片、css、js文件都进行了缓存,有效的减少了后端tomcat的访问。
另外,为了能加快网络传输速度,开启gzip压缩也是必不可少的。但考虑到tomcat已经需要处理很多东西了,所以把这个压缩的工作就交给前端的Nginx来完成。
除了文本可以用gzip压缩,其实很多图片也可以用图像处理工具预先进行压缩,找到一个平衡点可以让画质损失很小而文件可以减小很多。曾经我就见过一个图片从300多kb压缩到几十kb,自己几乎看不出来区别。4)采用集群
单个服务器性能总是有限的,最好的办法自然是实现横向扩展,那么组建tomcat集群是有效提升性能的手段。我们还是采用了Nginx来作为请求分流的服务器,后端多个tomcat共享session来协同工作5)优化tomcat参数
这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,主要是优化连接配置,关闭客户端dns查询。
<Connector port=“8080”
protocol=“org.apache.coyote.http11.Http11NioProtocol”
connectionTimeout=“20000”
redirectPort=“8443”
maxThreads=“500”
minSpareThreads=“20”
acceptCount=“100”
disableUploadTimeout=“true”
enableLookups=“false”
URIEncoding=“UTF-8” />
Tomcat的缺省端口号是8080.
修改Tomcat端口号:
1)找到Tomcat目录下的conf文件夹
2)进入conf文件夹里面找到server.xml文件
3)打开server.xml文件
4)在server.xml文件里面找到下列信息
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true” />
5)把port=”8080″改成port=”8888″,并且保存
6)启动Tomcat,并且在IE浏览器里面的地址栏输入http://127.0.0.1:8888/
7)tomcat默认采用的BIO模型,在几百并发下性能会有很严重的下降。tomcat自带还有NIO的模型,另外也可以调用APR的库来实现操作系统级别控制。
NIO模型是内置的,调用很方便,只需要将上面配置文件中protocol修改成 org.apache.coyote.http11.Http11NioProtocol,重启即可生效。如下面的参数配置,默认的是HTTP/1.1。
<Connector port="8080″
protocol=“org.apache.coyote.http11.Http11NioProtocol”
connectionTimeout="20000″
redirectPort="8443″
maxThreads="500″
minSpareThreads="20″
acceptCount="100″
disableUploadTimeout=“true”
enableLookups=“false”
URIEncoding="UTF-8″ />
前端:负载均衡层
由一台或者多台负载均衡调度器构成
中间:服务器群组层
由一组实际运行应用服务的服务器组成
底端:数据共享存储层
提供共享存储空间的存储区域调度算法:总共十种,常用四种
轮询:将客户端请求平均分法给所有的real server
加权轮询:根据real server 权重进行轮询调度
最少连接:选择连接数最少的服务器
加权最少连接:根据real server权重值,选择连接数最少的
相同点:
1)都是HTTP服务器软件
2)功能上都采用模块化结构设计
3)都支持通用的语言接口,如PHP、Perl、Python等
4)支持正向、反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输不同点:
1)Apache处理速度很慢,占用很多内存资源
2)功能上,Apache所有模块支持动静态编译,Nginx模块都是静态编译的
3)对Fcgi的支持:Apache支持的很不好,Nginx支持非常好
4)处理连接方式:Nginx支持epoll,Apache不支持
5)空间使用上:Nginx安装包仅几百K
SNAT,DNAT,MASQUERADE都是NAT。
MASQUERADE是SNAT的一个特例。
SNAT是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机。
MASQUERADE是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,就得用MASQUERADE。DNAT,就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B
因为,路由是按照目的地址来选择的,因此,DNAT是在PREROUTING链上来进行的,而SNAT是在数据包发送出去的时候才进行,因此是在POSTROUTING链上进行的。
ping 测试网络是否能够联通以及传输速度
-n 发送数据包个数 -t 不断ping目标主机 -a 显示目标地址主机名
tracert 用来追踪从本机到目的地的地址所经过的路由
netstat 用来查看最近活动的网络(也就是你最近访问了哪些网站)
ipconfig/all 用来查看本机ip地址(加上/all就是详细信息)
1)轮询算法
2)加权轮询算法
3)最少连接算法
4)加权最少连接
5)源地址散列
6)目标地址散列
7)最少的队列调度
8)最短的期望的延迟
9)基于局部性的最少连接
10)带复制的基于局部性的最少连接
(https://man.linuxde.net/不熟悉命令的参考此网站)
1)Top:实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理.(P、M等)
2)Free:可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
3)uptime:能够打印系统总共运行了多长时间和系统的平均负载。uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。(top w tload也可以,如果能说出更多会更好)
4)vmstat:的含义为显示虚拟内存状态(“Virtual Memory Statistics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。
5)NetHogs是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率(实时查看进程流量)。
6)iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU的使用情况
7)strace命令是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工作过程的目的。
8)sar命令是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。
(sar -n DEV查看历史网卡流量,或者实时查看流量) sar -r(察看内存和交换空间的使用率)
9)time命令用于统计给定命令所花费的总时间。
10)iftop(需要安装iftop软件包,实时查看具体IP、端口的流量,iftop -P)
11)Inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。
12)lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
(1)如果是单一应用的服务器,只需要用iftop、sar等工具统计网卡流量就可以。
(2)如果服务器跑了多个应用,可以使用nethogs工具实现,它的特别之处在于可以显示每个进程的带宽占用情况,这样可以更直观获取网络使用情况。
- Apache
Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器。Apache支持支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。
Apche可以支持PHPcgiperl,但是要使用Java的话,你需要Tomcat在Apache后台支撑,将Java请求由Apache转发给Tomcat处理。) 缺点:配置相对复杂,自身不支持动态页面。
- Tomcat:
Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。
- Nginx
Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。
区别
- Apache与Tomcat的比较
相同点:
两者都是Apache组织开发的
两者都有HTTP服务的功能
两者都是免费的
不同点:
Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),而Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器.
Apache是一个Web服务器环境程序,启用他可以作为Web服务器使用,不过只支持静态网页如(ASP,PHP,CGI,JSP)等动态网页的就不行。如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat。
Apache:侧重于HTTPServer ,Tomcat:侧重于Servlet引擎,如果以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想;
Apache是Web服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。
实际使用中Apache与Tomcat常常是整合使用:
如果客户端请求的是静态页面,则只需要Apache服务器响应请求。
如果客户端请求动态页面,则是Tomcat服务器响应请求。
因为JSP是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销。
可以理解Tomcat为Apache的一种扩展。
2)Nginx与Apache比较
nginx相对于apache的优点
轻量级,同样起web 服务,比apache占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
提供负载均衡
社区活跃,各种高性能模块出品迅速
apache 相对于nginx 的优点
apache的 rewrite 比nginx 的强大 ;
支持动态页面;
支持的模块多,基本涵盖所有应用;
性能稳定,而nginx相对bug较多。
两者优缺点比较
Nginx 配置简洁, Apache 复杂 ;
Nginx 静态处理性能比 Apache 高 3倍以上 ;
Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用;
Apache 的组件比 Nginx 多 ;
apache是同步多进程模型,一个连接对应一个进程;
nginx是异步的,多个连接(万级别)可以对应一个进程;
nginx处理静态文件好,耗费内存少;
动态请求由apache去做
nginx只适合静态和反向;
Nginx适合做前端服务器,负载性能很好;
Nginx本身就是一个反向代理服务器 ,且支持负载均衡
总结
1)Nginx优点:负载均衡、反向代理、处理静态文件优势。nginx处理静态请求的速度高于apache;
2)Apache优点:相对于Tomcat服务器来说处理静态文件是它的优势,速度快。Apache是静态解析,适合静态HTML、图片等。
3)Tomcat:动态解析容器,处理动态请求,是编译JSP\Servlet的容器,Nginx有动态分离机制,静态请求直接就可以通过Nginx处理,动态请求才转发请求到后台交由Tomcat进行处理。
Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache较适合。
日常工作中,一般的项目还是用nginx+tomcat来做会多一点。
client (输入网址按下回车)–> 电脑发出一个DNS请求到本地DNS服务器 (本地DNS服务器一般由网络接入商提供,中国移动、电信等) --> 本地服务器查询缓存记录,有则直接返回结果。没有则向DNS根服务器进行查询。(根服务器没有记录具体的域名和IP地址对应的关系) --> 告诉本地DNS服务器域服务器地址(此处为.com) --> 本地服务器向域服务器发出请求 --> 域服务器告诉本地DNS服务器域名的解析服务器的地址 -->本地服务器向解析服务器发出请求 --> 收到域名和IP地址的对应关系 返回结果就是逆过程
服务器带宽问题,大图片,数据库,代码
解决办法:
查看流量(Zabbix,ifconfig,sar,ping延迟… …)
系统负载(Zabbix,uptime,sar,top,ps,free查看CPU和内存)
日志(数据库日志-慢查询日志、web服务器日志、ELK)
DNS解析;ss端口状态、并发量;本机时间(时间错误会导致服务器故障)
浏览器F12(开发者工具)
1)Server:整个Servlet容器组合,可以包含一个或多个Server元素在最顶层,代表整个Tomcat容器,因此它必须是server.xml中唯一一个最外层的元素。一个Server元素中可以有一个或多个Service元素。
2)service:它由一个或者多个Connector组成,以及一个Engine,负责处理所有Connector所获得的客户请求。
3)Connector:客户端与程序交互组件,负责接收请求以及向客户端返回响应。Service的端口就是由它来监听
4)Engine:处理连接器接收到请求,Engine组件在Service组件中有且只有一个;Engine是Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。
5)Host:虚拟主机(是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。)
6.)Context一个Context对应一个Web Application
Ps: Engine、Host和Context都是容器,但它们不是平行的关系,而是父子关系:Engine包含Host,Host包含Context。
轮询 ip hash 权重
轮询:upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
ip hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
权重:指定轮询几率,权重(weight)和访问比率成正比,用于后端服务器性能不均的情况
物理层主要的是介质 数据链路层主要的技术与原理
MAC地址:也叫硬件地址,共48位。前24位是厂商标识OUI,后24位厂商自定义。为了人为的方便,表示的时候,将2进制转换成16进制。
交换机工作原理:交换机根据它的MAC地址表转发数据帧。MAC地址表开始是空的,当交换机收到一个数据帧 时,根据帧的源地址进行学习,生成MAC地址表。根据目标地址决定如何转发,如果目标地址还没有学习到,则向所有端口转发。
两个子层:MAC子层(介质访问控制)、LLC子层(逻辑链路控制)
VLAN:虚拟局域网
Trunk:中继
STP:生成树协议
以太通道:将交换机上的多个物理端口逻辑上捆绑到一起,提供更大的带宽。
网络层主要的技术与原理IPv4地址:32位的2进制数,为了人为上的方便,每8位换算成一个10进制数,再把生成的4段10进制数用小数点分开,称作点分10进制的表示方法
ip地址的分类
A:前8位作为网络位,第1位必须是0。首字节范围是1-126,因为127被用作本地环回地址了
B:前16位作为网络位,前2位必须是10。首字节范围是128-191
C:前24位作为网络位,前3位必须是110。首字节范围是192-223
D:用作组播,也叫多播
E:保留
私有地址
A:10.0.0.0/8
B:172.16.0.0 - 172.31.0.0/16
C:192.168.0.0 - 192.168.255.0/24
路由器:用于将不同的网络连接起来,形成逻辑上更大的一张网络。
网络的通信流程:A发数据给B
A先判断它和B是不是在同一网络,如果是在同一网络,直接发送,试图在局域网中找到目标。如果A发现B和自己不是一个网络的,则发送至网关。
A和B如果是不同网络。A把数据发给网关。网关一般是路由设备。
路由器检查它的路由表,决定如何转发数据。如果查到了相应的条目,就从目标端口转发出去。如果路由表中没有对应的条目,则丢弃。
三层重要的协议:IP / ARP / ICMP
VRRP:虚拟冗余路由协议
允许客户端透明的使用网关。网络到外界有两个出口,那么设备网关指向任意一个出口都可以工作。但是,设备指向
的出口如果出现故障,设备不能自动切换网关。
VRRP,可以创建虚拟路由器。网络中的节点,网关指向虚拟路由器即可。
传输层
协议:TCP / UDP
TCP:传输控制协议。面向连接的、可靠的协议
UDP:用户数据报协议。非面向连接的、不可靠的协议
开机加电BIOS自检———–>MBR引导———–>grub引导菜单———–>加载内核———–>启动init进程———–>读取inittab文件———–>启动mingetty进程———–>登录系统
awk ‘{print $1}’ access.log|uniq -c|sort -rn |head -10
[root@localhost ~]# vim test_cp.sh #!/bin/bash for file in `ls /usr/local/test` do if [ -f $file ];then if [ `ls -l $file`|awk '{print $5}' -gt 10000];then mv $file /tmp/ fi fi done
[root@localhost ~]# iptables -t nat -A PRETOUTING -d 10.0.0.254 -p tcp --dport 80 -j DNAT -to-destination 10.0.0.254:8080
配置nginx.conf配置文件增加下同的标记内容
server{
listen 80;
server_name blog.text.com;
location / {
proxy_passhttp://test_servers;
proxy_set_header Host $host; proxy_set_headerX-Forwarded-For $remote_addr;
}
}
修改完成后,重新加载nginx即可
1)登陆所有从库查看post信息,使用POST最大的做为新的主库,然后将从为提升为新的主库,登陆从库( 新的主库)执行stop slave,
2)修改my.cnf配置文件,开启log-bin并重新启动数据库服务,登陆数据库执行restet master ,show master status\G;查看主库信息,最后创建授权同步用户与权限和网站使用数据库的用户与权限,同步所有机器的/etc/hosts文件(这时就体现了之前全网用域名则不是用IP的作用了,不然还得修改网站程序切换到新主库服务器IP上,否则无法连接到数据库);
3)登陆其它从库,执行change master操作,查看同步状态。
所有数据恢复的基础都在于备份,必须要有完整的备份,否则恢复无从谈起,误操作导致的数据库破坏需要使用增量恢复的方法进行恢复数据库,具体步骤如下:
1)查看备份与binlog文件
2)刷新并备份binlog文件
mysqladmin -uroot -pmysql123 -S /data/mysql.sockflush-logs3)将binlog文件恢复成sql语句
mysqlbinlog –no-defaults mysql-bin.000061 mysql-bin.000062 >bin.sql4)将其中误操作的语句删除(就是drop的动作)
5)解压全备文件,恢复全备文件
gzip -d mysql_backup_2016-10-12.sql.gz
mysql -uroot -pmysql123 -S/data/3306/mysql.sock < mysql_backup_2016-10-12.sql
如果有对表的操作,恢复数据时需要接表名6)恢复误操作前的binlog文件记录的sql语句
mysql -uroot -pmysql123 -S/data/3306/mysql.sock < bin.sql
最后登陆数据库,查看数据是否恢复成功,如果有确定的误操作时间,就直接恢复这段时间的数据即可。
问题情况描述:
突然有一天,有同事反应,网站访问速度很慢,有时候会出现打不开网站的情况,刷新等待好长时间后又正常打开。解决步骤:
登陆数据库执行show full processlist 看到有很多相同的查询动作且征对同一张表,因此确定网站打不开的原因是这个,故将此IP禁止访问。日常工作中避免此类问题发生解决方法如下:可以将数据库读写分离;安装数据缓存服务器,尽量将大部分的请求不直接对接数据库。
手工可以执行,表明脚本本身不存在逻辑上的问题,可能原因有以下几点
1)定时任务书写有错误导致,执行的脚本没有写绝对路径,找不到脚本
2)环境变量问题导致。
[root@localhost ~]# vim RSstart.sh #!/bin/bash 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 配置开关机管理 然后在脚本最前面加上以下内容 \# chkconfig: 2345 21 99 \# description: chkconfig rsync service 具体自己测试下,也有可能这个启动,关闭序号有冲突,需要修改
1)top命令的第一行
2)uptime命令
3)w命令
4)查看/proc/uptime文件,输出的第一个字段就是系统运行的时间,单位是秒
主机路由
route add -host 192.168.197.100 dev eth0
网关路由
route add default gw 192.168.197.1
网络路由
route ad -net 192.168.1.0 netmask 255.255.255.0 deveth1
route ad -net 192.168.1.0 netmask 255.255.255.0 gw192.168.197.1
‘who -r’ 和 ‘runlevel’ 命令可以用来查看当前的Linux服务器的运行级别。
用 “route -n” 和 “netstat -nr” 命令,我们可以查看默认网关。除了默认的网关信息,这两个命令还可以显示当前的路由表。
cpio就是复制入和复制出的意思。cpio可以向一个归档文件(或单个文件)复制文件、列表,还可以从中提取文件。
patch命令就是用来将修改(或补丁)写进文本文件里。patch命令通常是接收diff的输出并把文件的旧版本转换为新版本。举个例子,Linux内核源代码由百万行代码文件构成,所以无论何时,任何代码贡献者贡献出代码,只需发送改动的部分而不是整个源代码,然后接收者用patch命令将改动写进原始的源代码里。
aspell是Linux操作系统上的一款交互式拼写检查器。aspell命令继任了更早的一个名为ispell的程序,并且作为一款免费替代品 ,最重要的是它非常好用。当aspell程序主要被其它一些需要拼写检查能力的程序所使用的时候,在命令行中作为一个独立运行的工具的它也能十分有效。
/proc文件系统是一个基于内存的文件系统,其维护着关于当前正在运行的内核状态信息,其中包括CPU、内存、分区划分、I/O地址、直接内存访问通道和正在运行的进程。这个文件系统所代表的并不是各种实际存储信息的文件,它们指向的是内存里的信息。/proc文件系统是由系统自动维护的。
find /usr -size +10M
find /home -mtime +120
find /var ! -atime -90
find / -name core -exec rm {} ;
strings命令用来提取和显示非文本文件中的文本字符串。(LCTT 译注:当用来分析你系统上莫名其妙出现的二进制程序时,可以从中找到可疑的文件访问,对于追查入侵有用处)
tee 过滤器用来向多个目标发送输出内容。如果用于管道的话,它可以将输出复制一份到一个文件,并复制另外一份到屏幕上(或一些其它程序)。
at命令用来安排一个程序在未来的做一次一次性执行。所有提交的任务都被放在 /var/spool/at 目录下并且到了执行时间的时候通过atd守护进程来执行。
lspci命令用来显示你的系统上PCI总线和附加设备的信息。指定-v,-vv或-vvv来获取越来越详细的输出,加上-r参数的话,命令的输出则会更具有易读性。
绝对路径:如/etc/init.d
当前目录和上层目录:./ …/
主目录:~/
切换目录:cd
查看当前进程:ps
执行退出:exit
查看当前路径:pwd
清屏:clear
退出当前命令:ctrl+c 彻底退出
执行睡眠 :ctrl+z 挂起当前进程fg 恢复后台
查看当前用户 id:”id“:查看显示目前登陆账户的 uid 和 gid 及所属分组及用户名
查看指定帮助:如 man adduser 这个很全 而且有例子;adduser --help 这个告诉你一些常用参数;info adduesr;
vi 文件名 #编辑方式查看,可修改
cat 文件名 #显示全部文件内容
more 文件名 #分页显示文件内容
less 文件名 #与 more 相似,更好的是可以往前翻页
tail 文件名 #仅查看尾部,还可以指定行数
head 文件名 #仅查看头部,还可以指定行数
终端/etc/tty
黑洞文件/dev/null
wc 命令 - c 统计字节数 - l 统计行数 - w 统计字数。
1)不可中断状态:进程处于休眠状态,但是此刻进程是不可中断的。不可中断,值进程不响应异步信号
2)暂停状态/跟踪状态:向进程发送一个SIGSTOP 信号,它就会因响应该信号 而进入 TASK_STOPPED 状态;当进程正在被跟踪时,它处于 TASK_TRACED 这个特殊的状态。
“正在被跟踪”指的是进程暂停下来,等待跟踪它的进程对它进行操作。3)就绪状态:在 run_queue 队列里的状态
4)运行状态:在 run_queue 队列里的状态
5)可中断睡眠状态:处于这个状态的进程因为等待某某事件的发生(比如等待 socket 连接、等待信号量),而被挂起
6)zombie 状态(僵尸):父亲没有通过 wait 系列的系统调用会顺便将子进程的尸体(task_struct)也释放掉
7)退出状态
D 不可中断 Uninterruptible(usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核 2.6 开始无效)
X 死掉的进程
ps -ef (system v 输出)
ps -aux bsd 格式输出
ps -ef | grep pid
把后台任务调到前台执行 fg
把停下的后台任务在后台执行起来 bg
查看所有 env
查看某个,如 home:env $HOME
\u:显示当前用户账号
\h:显示当前主机名
\W:只显示当前路径最后一个目录
\w:显示当前绝对路径(当前用户目录会以~代替)
$PWD:显示当前全路径
$:显示命令行’$'或者’#'符号
#:下达的第几个命令
\d:代表日期,格式为week day month date,例如:“MonAug1”
\t:显示时间为24小时格式,如:HH:MM:SS
\T:显示时间为12小时格式
\A:显示时间为24小时格式:HH:MM
\v:BASH的版本信息 如export PS1=’[\u@\h\w#]$‘
whereis [-bfmsu][-B <目录>…][-M <目录>…][-S <目录>…][文件…]
补充说明:whereis 指令会在特定目录中查找符合条件的文件。这些文件的烈性应属于原始代码,二进制文件,或是帮助文件。
-b 只查找二进制文件
-B<目录> 只在设置的目录下查找二进制文件。-f 不显示文件名前的路径名称。
-m 只查找说明文件。
-M<目录> 只在设置的目录下查找说明文件。-s 只查找原始代码文件。
-S<目录> 只在设置的目录下查找原始代码文件。-u 查找不包含指定类型的文件。
which 指令会在 PATH 变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p 与-n 参数相同,但此处的包括了文件的路径。-w 指定输出时栏位的宽度。
-V 显示版本信息
可以使用bind命令,bind可以很方便地在shell中实现宏或按键的绑定。
在进行按键绑定的时候,我们需要先获取到绑定按键对应的字符序列。
比如获取F12的字符序列获取方法如下:先按下Ctrl+V,然后按下F12 .我们就可以得到F12的字符序列 ^[[24~。
接着使用bind进行绑定。
[root@localhost ~]# bind ‘”\e[24~":“date”’
注意:相同的按键在不同的终端或终端模拟器下可能会产生不同的字符序列。
【附】也可以使用showkey -a命令查看按键对应的字符序列。
使用命令compgen -c,可以打印出所有支持的命令列表。
使用Linux 命令dirs可以将当前的目录栈打印出来
【附】:目录栈通过pushd popd 来操作。
使用linux命令 ’disown -r ’可以将所有正在运行的进程移除。
不用存储历史数据,注重服务或者监控项的状态
Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。;
Nagios 可以监控的功能有:监控网络服务(SMTP、POP3、HTTP、NNTP、PING等);
监控主机资源(处理器负荷、磁盘利用率等);
简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
并行服务检查机制;
具备定义网络分层结构的能力,用"parent"主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态;
当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式);
可以定义一些处理程序,使之能够在服务或者主机发生故障时起到预防作用;
自动的日志滚动功能;
可以支持并实现对主机的冗余监控;
可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等;
keepalived正常启动的时候,共启动3个进程,一个是父进程,负责监控其子进度程,一个是vrrp子进程,另外一个是checkers子进程
两个子问进程都被系统watchlog看管,两个子进程各自负责复杂自己的事。Healthcheck子进程答检查各自服务器的健康状况版,,例如http,lvs。如果healthchecks进程检查到master上服务不可用了,就会通知权本机上的vrrp子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态。
split分割
语法:split [-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
模式一:指定分割后文件行数
Split:按指定的行数截断文件格式:split[-n]file[name]参数说明:-n:指定截断的每
一文件的长度,不指定缺省为 1000行 file:要截断的文件 name:截断后产生的文件的文件名的开头字母,不指定,缺省为 x,即截断后产生的文件的文件名为 xaa,xab…直到
xzz
**模式二:指定分割后文件大小 **
命令:split-b10m server.logserver_part_
其中 server.log是要分割的文件,server_part_是分割文件的前缀。
对二进制文件我们同样也可以按文件大小来分隔
解压要分割的文件
计算文件的总数
通过指定行数将文件切割成两两个文件 split -l
使用file * 查看切割后的两个文件的属性是否一致
另一种方法,通过大小分割split -C,-C(大C)是按大小分,并尽量保持按行,-c(小c)就可能分将一行分到不同文件中。测试-C(大C)没有问题,相对-l(按行)来说,统计一个大文件的字节要比统计行数要快得多。用-C(大C)还是-l,请按实际情况而定。
dd分割
语法:dd (语法)
dd bs(字节数) count(区块数) if(输入文件路径) of(输出文件路径)
1)解压要分割的文件
2)按大小分第一个文件 dd bs=xx count=xx if=xx of=xx
3)按大小分第二个文件
4)使用file * 查看切割后的两个文件的属性是否一致
bs:将 ibs(输入)与 obs(输出)设成指定的字节数;
cbs:转换时,每次只转换指定的字节数;
conv:指定文件转换的方式
count:仅读取指定的区块数
ibs:每次读取的字节数
obs:每次输出的字节数
of:输出到文件
seek:一开始输出时,跳过指定的区块数
skip:一开始读取时,跳过指定的区块数
head+tail切割
1)解压要分割的文件,也可以在下面使用zcat命令而不解压
2)统计文件的行数
3)将文件的前x行重定向输出到一个文件中
4)文件的后y行输入到另一个文件中
5)使用gzip命令将两个文件进行压缩
awk分割
1)解压要分割的文件
2)使用awk进行if判断精确查找出文件的x行重定向输出到一个文件
普通索引:就是单个列作为索引。如 indexname(a)
复合索引:就是由多个列组成的索引,如 indexname(a,b,c),复合索引遵循最左匹配原则。
定义局部变量可以使用local,多在函数中应用
1)shell中定义的变量都是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止
2)函数定义的变量是可以被定义成local的,其作用域只限于函数内
MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器
Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
user:user模块实现用户账号管理
yum:yum模块管理程序包
copy:copy模块实现文件复制
cron:cron模块可以让每一个被管理节点能够自动生成一个定期任务计划
command:这是默认的模块,表示在被管理主机上运行一个命令。对于command模块,-a不再是指定参数,而是命令本身。
shell:和command模块类似,但是可以使用变量
service:service模块是管理服务的
Redis 集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384 个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。
director server:调度服务器,将负载分发到real server的服务器,该主机需要安装ipvsadm,创建虚拟机集群并添加real server
real server:真实服务器,真正提供应用,服务的服务器,该主机需要部署LNMP或者LAMP,做DR模式的集群还需要设置VIP和防止ARP冲突
可以结合keepalived软件实现主备LVS调度器
VIP:虚拟IP地址,公布给用户访问的虚拟IP地址
RIP:真实IP地址,集群节点上使用的IP地址
DIP:调度器连接节点服务器的IP地址
(1)如果主服务器出现问题,可以快速切换到从服务器提供的服务;
(2)可以在从服务器上执行查询操作,降低主服务器的访问压力;
(3)可以在从服务器上执行备份,以避免备份期间影响主服务器的服务。
(1) rsync -av /dira/ ip:/dirb/ 是通过ssh方式同步的
(2) rsync -av /dira/ ip::dirb 是通过rsync服务的方式同步的
1)完全备份
每次对数据进行完整的备份,完全备份是增量备份的基础,完全备份保存的是备份完成时刻的数据库优点:
安全性高缺点:
冗余数据太多,空间利用率低2)差异备份
备份那些自从上次完全备份之后被修改过的文件优点:
相比完全备份,降低了冗余数据,提高了空间利用率,安全性差于完全备份缺点:
仍旧存在冗余数据存在3)增量备份
只有那些在上次完全备份或者增量备份后被修改的文件才会被备份
增量备份就是备份自上一次备份之后增加或变化的文件或者内容优点:
没有冗余数据,效率最高,空间利用率最大化缺点:
安全性降低了
1)数据强一致性,无同步延迟
2)没有主从切换操作,无需使用虚拟IP
3)支持InnoDBc存储引擎
4)多线程复制
5)部署简单
6)支持节点自动加入,无需手动拷贝数据
Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。
找不到hash槽、集群没有做从服务器
1.硬件监控。 通过SNMP来进行路由器交换机的监控
2.系统监控。 如CPU的负载,上下文切换、内存使用率、磁盘读写、磁盘使用率、磁盘inode节点。
3.服务监控。 比如公司用LNMP nginx自带Status模块、PHP也有相关的Status、 MySQL的话可以通过percona来进行监控。
4.网络监控。 如果是云主机又不是跨机房,那么可以选择不监控网络。
5.安全监控。 如果是云主机可以考虑使用自带的安全防护。当然也可以使用iptables。 如果是硬件,那么推荐使用硬件防火墙。
6.Web监控。 web监控的话题其实还是很多。比如可以使用自带的web监控来监控页面相关的延迟、 js响应时间、下载时间、等等。
7.日志监控。 如果是web的话可以使用监控Nginx的500x日志。 PHP的ERROR日志。
8.流量分析。 平时我们分析日志都是拿awk sed xxx一堆工具来实现。 这样对我们统计ip、pv、uv不是很方便。那么可以使用百度统计、 google统计、商业,让开发嵌入代码即可
9.可视化。 通过screen以及引入一 些第三方的库来美化界面,同时我们也需要知道、订单量突然增加、 突然减少。或者说突然来了一大波流量,这流量从哪儿来,是不是推广了, 还是被攻击了。可以结合监控平来来梳理各个系统之间的业务关系。
10.自动化监控。 如上我们做了那么多的工作,当然不能是一台一台的来加key实现。 可以通过Zabbix的主动模式以及被动模式来实现。当然最好还是通过API来实现。
因为安全组的默认规则是在出方向上的数据报文全部放行,同一个安全组内的弹性云服务器和华为云关系型数据库实例可互相访问。
默认情况下,一个租户可以创建500条安全组规则。
为一个安全组设置过多的安全组规则会增加首包延时,因此,建议一个安全组内的安全组规则不超过50条。
当需要从安全组外访问安全组内的华为云关系型数据库实例时,需要为安全组添加相应的入方向规则。
限制了3306的入规则,客户端就没有办法访问了,就好像ping一样
轮询算法、ip hash 、权重
ip_hash:同一ip会被分配给固定的后端服务器,解决session问题
轮询:默认的算法,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
定义后端服务器组servers和proxy_pass模块
在两台主机分别部署相同的服务,分别访问对方的服务端口
tracert 用来追踪从本机到目的地的地址所经过的路由
netstat 用来查看最近活动的网络(也就是你最近访问了哪些网站)
ipconfig/all 用来查看本机ip地址(加上/all就是详细信息)
Get请求
curl命令 + 请求接口的地址
使用curl命令:
curl “http://www.baidu.com” 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
curl -i “http://www.baidu.com” 显示全部信息
curl -l “http://www.baidu.com” 只显示头部信息
curl -v “http://www.baidu.com” 显示get请求全过程解析
Post请求
使用curl命令(通过-d参数,把访问参数放在里面):
curl -d “param1=value1&pagesize=2” “http://www.baidu.com”
如果传第二个参数就使用post请求的方式,可以设置超时时间,避免程序卡死
删除请求是delete
curl delete http://www.baidu.com
1)服务器的磁盘存储空间已满
2)文件的权限不正确
3)文件过大
4)内存不足
5)文件的md5值发生变化
SAVE和BGSAVE两个命令都会调用rdbSave函数,但它们调用的方式各有不同:
SAVE直接调用rdbSave,阻塞Redis主进程,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。
BGSAVE则fork出一个子进程,子进程负责调用rdbSave,并在保存完成之后向主进程发送信号,通知保存已完成。Redis服务器在BGSAVE执行期间仍然可以继续处理客户端的请求。
-m:要执行的模块,默认为command
-a:模块的参数
-u:ssh连接的用户名,默认用root,在ansible.cfg文件中可以配置
-k:提示输入ssh登录密码。当使用密码验证的时候用
-s:sudo运行
-U:sudo到那个用户,默认为root
-K:提示输入sudo密码,当不是NOPASSWD模式时使用
-C:只是测试一下会改变什么内容,不会真正去执行
-c:连接类型(default=smart)
-f:fork多少个进程并发处理,默认为5个
-i:指定hosts文件路径,默认default=/etc/ansible/hosts
-I 指定pattern,对<host_pattern>已匹配的主机中再过滤一次
–list-hosts:只打印有哪些主机会执行这个playbook文件,不是实际执行
-M:要执行的模块路径,默认为/usr/share/ansible
-o:压缩输出,摘要输出
–private-key 私钥路径
-T: ssh连接超时时间,默认10秒
-t:日志输出到该目录,日志文件名以主机名命名
-v:verbost
热备份的优点:
可在表空间或数据文件级备份,备份时间短。
备份时数据库仍可使用。
可达到秒级恢复(恢复到某一时间点上)。
可对几乎所有数据库实体作恢复。
恢复是快速的,在大多数情况下在数据库仍工作时恢复。热备份的不足
不能出错,否则后果严重。
若热备份不成功,所得结果不可用于时间点的恢复。
因难于维护,所以要特别仔细小心,不允许“以失败而告终”。什么是冷备份?
我们将在线的备份称为热备份,而相对的,将脱机数据备份称为冷备份。冷备份是定时将数据备份至备份服务器或目标硬件,在服务器动作完成后,保持相同状态,在一台服务器出现问题时可由另一台直接提供服务,出现故障时不会自动接管,需手动开启硬件和服务,保证工作的连续性和数据完整性。
冷备份的优点
1、 是非常快速的备份方法(只需拷文件)
2、 容易归档(简单拷贝即可)
3、 容易恢复到某个时间点上(只需将文件再拷贝回去)
4、 能与归档方法相结合,做数据库“最佳状态”的恢复。
5、 低度维护,高度安全。冷备份的不足
1、 单独使用时,只能提供到“某一时间点上”的恢复。
2、 再实施备份的全过程中,数据库必须要作备份而不能作其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
3、 若磁盘空间有限,只能拷贝到磁带等其他外部存储设备上,速度会很慢。
4、 不能按表或按用户恢复。
http协议:是客户端与服务端之间通信传输数据的基础,HTTP协议是基于TCP/IP协议之上的协议
原理包括四个过程:
连接:浏览器与服务器建立连接,打开一个socket的虚拟文件,表明连接建立成功
请求:浏览器通过socket向服务器提交请求(一般是GET或POST请示命令)
应答:浏览器请求提交后,通过HTTP协议传送给服务器,服务器收到后进行处理将结果又通过HTTP回传给客户端,从而在客户端显示出所请求的页面
关闭连接:当应答结束后,浏览器与服务器之间就断开连接
1)加速本地开发(通过Docker能够快速搭建好开发和运行环境,并且该环境可以直接传递给测试和产品部署)
2)自动打包和部署应用
3)创建轻量、私有的PasS环境4)自动化测试和持续集成部署
5)部署并扩展Web应用、数据库和后端服务
6)创建安全沙盒(使容器隔离)
7)轻量级的桌面虚拟化
docker主要包括三大核心概念,理解了这三个核心概念,就能理解docker的整个生命周期:
1)镜像:类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统,镜像是创建Docker容器的基础。
2)容器:类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像的应用运行实例,可以将其启动,开始,停止,删除,而这些容器都是相互隔离,互不可见的。镜像自身是只读的,容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身保持不变。
3)仓库:类似于代码仓库,是docker集中存放镜像文件的场所。
A)轮询(默认):每个请求按时间顺序逐-分配到不同的后端服务器;
B)ip_ hash:每个请求按访问IP的hash结果分配,同- -个IP客户端固定访问一-个后端服务器;
C)ur_ hash:按访问url的hash结果来分配请求,使每个urI定向到同一个后端服务器;
D)fair:这是比.上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_ fair模块。
索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
ping 测试网络是否能够联通以及传输速度
-n 发送数据包个数 -t 不断ping目标主机 -a 显示目标地址主机名
tracert 用来追踪从本机到目的地的地址所经过的路由
netstat 用来查看最近活动的网络(也就是你最近访问了哪些网站)
ipconfig/all 用来查看本机ip地址(加上/all就是详细信息)
– 支持交互模式,查看/创建/停止/关闭 … …
格式:virsh 控制指令 [虚拟机名称] [参数]
virsh nodeinfo #//查看KVM节点(服务器)信息
virsh list #//列出正在运行的虚拟机
virsh list --all #//列出所有的虚拟机
virsh net-list–all #//列出虚拟网络
virsh dominfo 虚拟机名称 #查看挃定虚拟机的信息
运行|重启|关闭挃定的虚拟机
virsh start|reboot|shutdown 虚拟机名称
将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到服务器列阵,基于此提供快速获取重要数据,解决大量并发访问服务问题。
1)安装nginx源码包
2)修改nginx配置文件,将动态请求转发到PHP服务商,将静态页面转发到自定义的静态页面
1)DDL 数据定义语言 如:create、alter、drop
2)DML 数据操作语言 如:insert、update、delete
3)DCL 数据控制语言 如:grant、revoke
4)DTL 数据事物语言 如:commit、rollback、savepoint
如果写入了多条CMD,那么执行时默认或执行最后一条命令
Apache的工作模式有prefork,worker和event三种工作模式,早期2.0版本的默认工作模式prefork,2.2版本是worker,2.4版本是event.
查看apache的工作模式可以使用httpd -V查看
1)通过添加nginx的http_realip_module模块处理包头信息
2)修改nginx配置文件,在location中添加启动模块
3)重启nginx服务
将端口虚拟化也可以获取到真实ip
Tcpdump
Wireshark进行抓包分析
awk -F ‘:’ ‘{print $3}’ 文件名 | sort -n | uniq -C
sed -n ‘起始时间 , 结束时间/p’ access.log
export HISTFILESIZE=0
export HISTSIZE=0
unset HISTFILE
恢复关闭的历史记录命令
查看bash的man手册
shopt -u -o history或set +o history
路由用户:监控读写分离
监控用户:监控数据库服务器
ifconfig 网卡名(查看网卡整体流量)
iftop(需要安装iftop软件包,实时查看具体IP、端口的流量,iftop -P)
iptraf-ng (需要安装iptraf-ng软件包,实时查看IP、端口的流量)
sar -n DEV(需要安装sysstat软件包,查看历史网卡流量,或者实时查看流量)
nethogs eth0(需要安装nethogs软件包,实时查看进程流量)
查看网站的访问日志(利用awk统计资源的大小并求和)
参数 配置 默认值
node.name 节点名称 主机名称
path.data /数据存储路径 LOGSTASH_HOME/data/
pipeline.workers 输出通道的工作workers数据量(提升输出效率) cpu核数
pipeline.output.workers 每个输出插件的工作wokers数量 1
pipeline.batch.size 每次input数量 125
path.config 过滤配置文件目录
config.reload.automatic 自动重新加载被修改配置 false or true
config.reload.interval 配置文件检查时间
path.logs 日志输出路径
http.host 绑定主机地址,用户指标收集 “127.0.0.1”
http.port 绑定端口 5000-9700
log.level 日志输出级别,如果config.debug开启,这里一定要是debug日志 info
log.format 日志格式 plain
path.plugins 自定义插件目录
# netstat -n | awk ‘/^tcp/ {print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c| sort –rn
sort命令:进行排序,-r 反向排序 -n 使用纯数字进行排序
uniq 将重复的数据仅仅列出一个来显示,uniq -c,进行计数
awk -F: ‘{print $1}’ 以F 为分界符,取出第一个:之前的数据
1)比如网站故障监控、服务器性能监控、网站安全监控、用户访问速度监控等;内存,IO,CPU,网络,这个四个模块是必须的;
2)不能单一指标衡量性能瓶颈,比如说是IO出现在性能瓶颈:
第一种是调整缓冲区的大小、调整缓冲区中的数据同步的磁盘中的时间
第二种是修改磁盘调度算法,查看的路径cat /sys/bock/sda/queue/scheduler
数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量
读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量;
高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础
第一种武器 ansible命令,用于执行临时性工作。
第二种武器 ansible-doc是ansible模块的文档说明,针对每个模块都有详细的说明
第三种武器 ansible-console是ansible为用户提供的交互是工具
第四种武器 ansible-galaxy从github上下载管Roles的一款工具,与Python的pip相似
第五种武器 ansible-playbook是日常应用中使用频率最高的命令,ansible任务集
第六种武器 ansible-vault主要用于配置文件加密,可用它加密、解密这个文件
第七种武器 ansible-pull/push默认使用push模式工作、pull和push工作模式机制刚好相反
第三层是网络层,包括的协议主要有IP、ICMP、ARP和RARP,在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能。
第四层是传输层,由于网络接口层兼并了物理层和数据链路层所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。
第四层比第三层多了源端口、目标端口、应用端口号以及虚拟ip
使用snat进行地址伪装
iptables -t nat -A POSTROUTING -o 网卡名 -j SNAT --to-source ip
Lvs大多处理的是数据库的数据
默认是节度器的ip
1)Bind mounts:可以实现将Host中的任意路径挂载到容器中,可以存储在任意位置,非Docker的进程或者容器可能随时对其进行修改,存在一定的风险。
在单容器情况下,使用Bind mount可以用 -v 或者 --volume,在swarm集群中,我们使用 --mount,在Docker17.06之后,可以统一使用 --mount
2)Volumes:实现将Docker中的某一个volume挂载到容器中,存储在Docker Host文件系统的某一个路径下,默认是/var/lib/docker/volumes,由Docker进行管理,非Docker的进程不能修改该路径下的文件,比较安全。
VOlumes和bind的对比:
Volumes 的备份和迁移更加容易。
可以使用 Docker CLI 或者 Docker API 管理 volumes。
Volumes 既可以在 Linux 的容器中使用,也可以在 Windows 的容器中使用。
Volumes 在多容器中共享更加的安全。
Volume drivers 允许我们把数据存储在远程主或云提供商。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-22pE4iC1-1590076983067)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml3724\wps2.jpg)]
3)Tmpfs:存储在Host系统的内存中,没有在磁盘上进行存储,不能实现持久化。
Tmpfs方式将数据存储在Host内存中,在容器的整个生命周期内被容器使用,不能持久化。出于安全原因,或者是提升容器的性能,比如我们的程序需要写入很多不需要存储的状态数据时,我们就会使用 tmpfs。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4tNdrK1A-1590076983069)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml3724\wps3.jpg)]
数字 字符串 列表 元组 字典
在location字段中添加X-Forword-For
配置文件server和 location匹配:
= 表示精确匹配
^~ 表示uri以某个常规字符串开头,大多情况下用来匹配url路径,nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
- 正则匹配(区分大小写)
~* 正则匹配(不区分大小写)
!~和!~* 分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 任何请求都会匹配
匹配的优先级为:
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
(1). 轮循调度 rr
均等地对待每一台服务器,不管服务器上的实际连接数和系统负载
(2). 加权轮调 wrr
调度器可以自动问询真实服务器的负载情况,并动态调整权值
(3). 最少链接 lc
动态地将网络请求调度到已建立的连接数最少的服务器上
如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡
(4). 加权最少链接 wlc
调度器可以自动问询真实服务器的负载情况,并动态调整权值
带权重的谁不干活就给谁分配,机器配置好的权重高
(5). 基于局部性的最少连接调度算法 lblc
这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
(6). 复杂的基于局部性最少的连接算法 lblcr
记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。
(7). 目标地址散列调度算法 dh
该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
(8). 源地址散列调度算法 sh
与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
(9). 最少期望延迟 sed
不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙
(10). 永不排队 nq
无需队列,如果有realserver的连接数为0就直接分配过去
Keepalived是基于VRRP协议的实现,主要用在IP层、TCP层和应用层。
1:IP层:Keepalived会定期向服务器群中的服务器发送一个数据包(既Ping),如果发现IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除。
2:TCP层:类似IP层,只不过这里是检测服务的端口
3:应用层:Keepalived将根据用户的设定来检查服务程序的运行是否正常
1.四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡
2.四层负载均衡,就是根据请求的ip+端口,根据设定的规则,将请求转发到后端对应的IP+端口上。七层负载均衡,则是在四层基础上,再去考虑应用层的特征。比如说一个WEB服务器的负载均衡,除了根据IP+80端口来判断之外,还可以根据七层URL,浏览器类别,来决定如何去转发流量。
3.四层交换机主要分析IP层和TCP/UDP层,实现四层流量负载,这种负载不关心七层的应用协议。七层的交换机除了支持四层之外,还要分析应用层,如HTTP协议、URL、cookie等信息。四层常见软件是haproxy,LVS,七层常见软件是nginx。
4.简单来说,七层负载均衡走流量,四层负载均衡是不走流量的,效率会更高
5.四层提供终端到终端的连接
6.四层不能修改后端请求的资源类型
物理备份: 物理备份是磁盘块为基本单位将数据从主机复制到备机。物理备份就是备份数据文件了,比较形象点就是cp下数据文件,但真正备份的时候自然不是的cp这么简单。(物理备份又分两种 一种冷备份一种热备份),物理备份恢复速度比较快,占用空间比较大。
逻辑备份: 逻辑备份是以文件为基本单位将数据从主机复制到备机。将数据导出至文本文件中;mysqldump是采用SQL级别的备份机制,他将数据表导成SQL脚本文件,是最常用的逻辑备份方法。逻辑备份速度比较慢,占用空间比较小。逻辑备份的恢复成本高。
差异备份的定义: 备份自上一次完全备份之后有变化的数据。
增量备份的定义: 备份自上一次备份(包含完全备份、差异备份、增量备份)之后有变化的数据。
增量备份和差异备份的区别:
完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性)。
差异备份: 差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。(差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,既:备份后不标记为已备份文件,换言之,不清除存档属性)。
增量备份: 增量备份是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。(增量备份过程中,只备份有标记的选中的文件和文件夹,它清除标记,既:备份后标记文件,换言之,清除存档属性。) 不同备份类型可以存在一定组合,
参考示例如下:
完全备份和差异备份: 在星期一进行完全备份,在星期二至星期五进行差异备份。如果在星期五数据被破坏了,则你只需要还原星期一完全的备份和星期四的差异备份。这种策略备份数据需要较少的时间,但还原数据使用较少的时间。
完全备份和增量备份: 在星期一进行完全备份,在星期二至星期五进行增量备份。如果在星期五数据被破坏了,则你需要还原星期一正常的备份和从星期二至星期五的所有增量备份。这种策略备份数据需要较少的时间,但还原数据使用较多的时间。
完全备份是指对整个系统或用户指定的所有文件数据进行一次全面的备份。增量备份只是备份相对于上一次备份操作以来新创建或者更新过的数据。差异备份即备份上一次完全备份后产生和更新的所有新的数据。恢复速度完全备份最快,增量备份最慢,差异备份介于两者之间。因此由慢到快依次为增量备份、差异备份和完全备份。
有桥接模式、隔离模式(自定义模式)、NAT模式、路由模式
桥接模式:Guest与Host连接到同一个交换机上;通过桥接物理网卡,相当于直连到Host所在网络。
隔离模式:允许Guest访问同一虚拟交换机上的其他Guest;但是不能访问Host所在的外部网络。
NAT模式(默认):将Guest虚拟机的默认网关指向Host物理机的virtbr0接口的IP地址;Guest共享真机的网络连接,以地址转换的方式访问外网。
路由模式:由Host物理机充当路由器,开启转发;需要额外设置外网与Guest虚拟机之间互访的路由条目,Guest以路由转发的方式访问外网(需要在真机配置iptables规则)。
MYSQL读写分离,基本的原理是让主数据库(master)处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库(slave)处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。从介绍可以看出MYSQL的读写分离可以减少数据库压力,提高性能。
1.增加冗余
2.增加了机器的处理能力
3.对于读操作为主的应用,使用读写分离是最好的场景,因为可以确保写的服务器压力更小,而读又可以接受点时间上的延迟。
https://jingyan.baidu.com/article/f54ae2fcd895b81e93b84973.html
正向代理:客户端 <一> 代理 一>服务端
正向代理简单地打个租房的比方:
A(客户端)想租C(服务端)的房子,但是A(客户端)并不认识C(服务端)租不到。
B(代理)认识C(服务端)能租这个房子所以你找了B(代理)帮忙租到了这个房子。这个过程中C(服务端)不认识A(客户端)只认识B(代理)
C(服务端)并不知道A(客户端)租了房子,只知道房子租给了B(代理)。反向代理:客户端 一>代理 <一> 服务端
反向代理也用一个租房的例子:
A(客户端)想租一个房子,B(代理)就把这个房子租给了他。
这时候实际上C(服务端)才是房东。
B(代理)是中介把这个房子租给了A(客户端)。这个过程中A(客户端)并不知道这个房子到底谁才是房东
他都有可能认为这个房子就是B(代理)的由上的例子和图我们可以知道正向代理和反向代理的区别在于代理的对象不一样,正向代理的代理对象是客户端,反向代理的代理对象是服务端。
Nginx正向代理的配置:
server {
resolver 192.168.1.1; #指定DNS服务器IP地址
listen 8080;
location / {
proxy_pass http:// h t t p h o s t http_host httphostrequest_uri; #设定代理服务器的协议和地址
}
}
设置nginx代理服务,一般是配置到一个server块中。注意,在该server块中,不要出现server_name指令,即不要设置虚拟主机的名称和IP。而resolver是必需的,如果没有该指令,nginx无法处理接收到的域名。其次,nginx代理服务不支持正向代理HTTPS站点。
1、source命令用法:
source 文件名
作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"
注:该命令通常用命令“.”来替代。
source(或点)命令通常用于重新执行刚修改的初始化文档。
source命令(从 C Shell 而来)是bash shell的内置命令。
点命令,就是个点符号,(从Bourne Shell而来)。
source的程序主体是bash,脚本中的$0变量的值是bash,而且由于作用于当前bash环境,脚本中set的变量将直接起效
2、sh,bash的命令用法:
sh/bash 文件名
作用:打开一个子shell来读取并执行FileName中命令。该filename文件可以无"执行权限"
注:运行一个shell脚本时会启动另一个命令解释器.
每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.
这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.
shell脚本也可以启动他自已的子进程.
这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.
在ubuntu中sh只是bash的一个链接。
由于是在子shell中执行,脚本设置的变量不会影响当前shell。
3、./的命令用法:
./文件名
作用:打开一个子shell来读取并执行FileName中命令。该filename文件需要"执行权限"
注:运行一个shell脚本时会启动另一个命令解释器.
每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.
这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.
shell脚本也可以启动他自已的子进程.
这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.
由于是在子shell中执行,脚本设置的变量不会影响当前shell。
首先使用top命令查看是不是mysql的CPU占用过高
查询原因,可能的原因:
1)一般情况下,mysql占用过高多是有慢查询
2)执行查询 show processlist;显示当前运行的线程,找到那个经常出现的SQL语句
解决:
1)打开慢查询日志,这里可以加上慢查询日志,然后重启mysql,等待日志。slow-query-log=1 # 慢查询:确认开启
slow-query-log-file=‘/var/www/htmllog/slowlog.log’ # 慢查询:日志文件及路径
long_query_time = 3 # 慢查询:指定超过3s仍未完成的语句,为执行过慢的语句2)将这条语句建立索引
例如此语句为 select conut(*) from xxx where a=1 and b != 2 and objuid=?
那么我们将要根据 objuid建立前缀索引:alter table xxx add index objuid(objuid)
CMDB:CMDB是所有运维工具的数据基础,CMDB全称Configuration Management Database
1,CMDB包含的功能:
1:用户管理,记录测试,开发,运维人员的用户表
2:业务线管理,需要记录业务的详情
3:项目管理,指定此项目需属于那条业务线,以及项目详情
4:应用管理,指定此应用的开发人员,属于哪个项目,和代码地址,部署目录,部署集群,依赖的应用,软件等信息。
5:主机管理,包括云主机,物理机,主机属于哪个集群,运行着哪些软件,主机管理员,连接着哪些网络设备,云主机的资源地,存储等相关信息。
6:主机变更管理,主机的一些信息变更,例如管理员,所属集群等信息更改,连接的网络变更等。
7:网络设备管理,主要记录网络设备的详细信息,及网络设备连接的上级设备
8:IP管理,IP属于哪个主机,哪个网段,是否被占用等
2,CMDB实现的四种方式:
方式一:Agent方式
可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库,本质就是在各个服务器上执行subprocess.getoutput(“命令”),然后将每台机器上执行的结果返回给主句API,然后主机API收到这些数据之后,放到数据库中,最终通过web界面展现给用户。
优点:速度快
缺点:需要为每台服务器部署有关Agent程序
使用场景:服务器比较多的时候
方式二:ssh类实现方式(基于paramiko模块)
中控机通过Paramiko(py模块)登录到各个服务器上,然后执行命令的方式去获取各个服务器上的信息。
优点:没有Agent
缺点:有一个中控机,速度慢
使用场景:服务器比较少的时候
方式三:salt-stack方式
此方案本质上和第二种方案是差不多的流程,中控机发送命令给服务器执行。服务器将结果放入另一个队列中,中控机获取将服务信息发送到API进而录入到数据库。
优点:速度快,开发成本低
缺点:依赖于第三方工具
使用场景:已经使用salt-stack软件
logrotated
logrotated的配置文件/etc/logrotate.d/haproxy
然后使用logrotate的默认设置来做日志滚动压缩:
/etc/logrotate.conf
也可以手动调用:
假设我们的配置文件放在:
/data/log/logrotate.d/haproxy
然后,在计划任务中配置:
59 23 * * * /usr/sbin/logrotate -f /data/log/logrotate.d/haproxy
反向代理,是把一些静态资源存储在服务器上,当用户有请求的时候,就直接返回反向代理服务器上的资源给用户,而如果反向代理服务器上没有的资源,就转发给后面的负载均衡服务器,负载均衡服务器再将请求分发给后端的web服务器。
区别就是:反向代理服务器是需要存储资源的,让用户更快速的接收到资源负载均衡就是,为了保证后端web服务器的高可用,高并发,是不需要要存储资源,只需要转发用户的请求。
1)内连接查询 inner join
关键字:inner join on
语句:select * from a_table a inner join b_table b on a.a_id = b.b_id;
说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分
2)左连接查询 left join
关键字:left join on / left outer join on
语句:SELECT * FROM a_table a left join b_table b ON a.a_id = b.b_id;
说明: left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
3)右连接 right join
关键字:right join on / right outer join on
语句:SELECT * FROM a_table a right outer join b_table b on a.a_id = b.b_id;
说明:right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。
4)全连接 union
关键字:union /union all
语句:(select colum1,colum2…columN from tableA ) union (select colum1,colum2…columN from tableB ) 或 (select colum1,colum2…columN from tableA ) union all (select colum1,colum2…columN from tableB );
union语句注意事项:
1.通过union连接的SQL它们分别单独取出的列数必须相同;
2.不要求合并的表列名称相同时,以第一个sql 表列名为准;
3.使用union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并,而是通常采用union all 进行合并;
4.被union 连接的sql 子句,单个子句中不用写order by ,因为不会有排序的效果。但可以对最终的结果集进行排序;
(select id,name from A order by id) union all (select id,name from B order by id); //没有排序效果
(select id,name from A ) union all (select id,name from B ) order by id; //有排序效果
1)内核参数的查看方法
使用“sysctl -a”命令可以查看所有正在使用的内核参数。内核参数比较多(一般多达500项),按照前缀主要分为以下几大类:net.ipv4、net.ipv6、net.core、vm、fs、dev.parport、dev.cdrom 、dev.raid、kernel等等。相同的linux,安装的组件和使用的方式不一样,正在使用的内核参数是不一样的。
所有的内核参数的说明文档是放到/usr/src/linux/Documentation/sysctl中的,如果想知道对内核参数的说明,可以到该目录下查看相应的说明文档。2)内核参数的的设置方法
由于Linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。也可以通过文件的方式进行设置。下面就介绍这两种修改方法。
命令行的设置可以用两种方法实现。
1)使用“sysctl -w 参数名=值”的方式假设我们把net.ipv4.ip_forward的值修改为1,使用命令“sysctl -w net.ipv4.ip_forward=1”。e799bee5baa6e997aee7ad94e58685e5aeb931333335346137
2)修改内核参数对应的proc文件
内核参数位于/proc/sys/之下,参数名称是以文件所在的路径,并将“/”以“.”来取代。举例来说,/proc/sys/net/ip_forward的参数名称为net.ipv4.ip_forward。
同样把net.ipv4.ip_forward的值修改为1,使用命令“echo “1” > /proc/sys/net/ipv4/ip_forward”。
注意,这里proc文件跟普通的文件不一样。一般一个文件用echo写入内容之后,会变成一个文本文件,但echo修改proc文件之后还是个空文件。
查看Apache的并发请求数及其TCP连接状态:
Linux命令:
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
nginx作为服务端处理请求连接
首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面,先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到指定的ip地址端口,再listen),然后再fork(一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程 )出多个子进程出来,然后子进程会竞争accept新的连接。此时,客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立好一个连接后,此时,某一个子进程会accept成功,得到这个建立好的连接的socket,然后创建nginx对连接的封装,即ngx_connection_t结构体。接着,设置读写事件处理函数并添加读写事件来与客户端进行数据的交换。最后,nginx或客户端来主动关掉连接
Nginx作为客户端处理请求连接
nginx也是可以作为客户端来请求其它server的数据的(如upstream模块),此时,与其它server创建的连接,也封装在ngx_connection_t中。作为客户端,nginx先获取一个ngx_connection_t结构体,然后创建socket,并设置socket的属性( 比如非阻塞)。然后再通过添加读写事件,调用connect/read/write来调用连接,最后关掉连接,并释放ngx_connection_t
1、保护了真实的web服务器,web服务器对外不可见,外网只能看到反向代理服务器,而反向代理服务器上并没有真实数据,因此,保证了web服务器的资源安全。
2、反向代理为基础产生了动静资源分离以及负载均衡的方式,减轻web服务器的负担,加速了对网站访问速度(动静资源分离和负载均衡会以后说)
3、节约了有限的IP地址资源,企业内所有的网站共享一个在internet中注册的IP地址,这些服务器分配私有地址,采用虚拟主机的方式对外提供服务;
https://baijiahao.baidu.com/s?id=1634400719648980722&wfr=spider&for=pc
[root@localhost ~]# vim /usr/local/nginx/logbak.sh #新建脚本名为logbak.sh
\#!/bin/bash #解释器
date=`date +%Y%m%d` #自定义date变量,值等于当前日期
logpath=/usr/local/nginx/logs #自定义logpath变量,值等于Nginx日志所在路径
mv $logpath/access.log $logpath/access-$date.log #把当前access日志重命名
mv $logpath/error.log $logpath/error-$date.log #把当前error日志重命名
kill -USR1 $(cat $logpath/nginx.pid) #向nginx主进程发USR1信号,重新打开生成日志文件,如不发送USR1,Nginx将会继续写入改名之后的日志
接下来把写好的脚本写入计划任务,自动执行。
[root@localhost ~]# crontab -e #打开计划任务表
01 02 * * 6 /usr/local/nginx/logbak.sh #每周六凌晨2:01运行脚本进行日志切割
1)keepalived对后端realserver的健康检查方式主要有以下几种
TCP_CHECK:工作在第4层,keepalived向后端服务器发起一个tcp连接请求,如果后端服务器没有响应或超时,那么这个后端将从服务器池中移除。
HTTP_GET:工作在第5层,向指定的URL执行http请求,将得到的结果用md5加密并与指定的md5值比较看是否匹配,不匹配则从服务器池中移除;此外还可以指定http返回码来判断检测是否成功。HTTP_GET可以指定多个URL用于检测,这个一台服务器有多个虚拟主机的情况下比较好用。
SSL_GET:跟上面的HTTP_GET相似,不同的只是用SSL连接
MISC_CHECK:用脚本来检测,脚本如果带有参数,需将脚本和参数放入双引号内。脚本的返回值需为:
0) 检测成功
1) 检测失败,将从服务器池中移除
2-255)检测成功;如果有设置misc_dynamic,权重自动调整为 退出码-2,如退出码为200,权重自动调整为198=200-2。
SMTP_CHECK:用来检测邮件服务的smtp的
2)相关配置:
delay_loop 隔多长时间做一次健康检测,单位为秒
connect_timeout 连接超时时间,单位为秒
nb_get_retry 检测失败后的重试次数,如果达到重试次数仍然失败,将后端从服务器池中移除。
delay_before_retry 失败重试的间隔时间,单位为秒
1)冷迁移,实际是关机迁移
冷迁移的应用场景主要是当虚拟机之下的物理机故障时,通过共享存储中的客户操作系统及数据在另一台物理机主机中将业务进行重新加载。另一种场景是需要进行定期的可高性要求不高的运维,关闭虚拟机,并将不同物理主机上存储的虚拟机文件copy到另一个物理主机中进行虚机重新加载。
该场景的好处是操作简单,一般是自动化操作。在公有云中,大量采用该模式实现主机业务的可靠性。但缺点也很明显,该迁移方式不支持内存数据的保存,会导致内存数据的丢失
2)热迁移,实际是将内存数据与硬盘数据同步迁移
热迁移的应用场景主要是:1、硬件或系统的主动升级但又不希望中断虚机上的重要业务 2、某台物理机的负载太重,进行主动的虚拟机迁移
热迁移的好处是对用户业务的非常小,中断时间可到ms级,ping一般中断在2-6个包中断;用户内存数据进行了迁移,对业务应用无感知。坏处是迁移过程不可中断,操作复杂。
因热迁移主要场景是服务商后端运维使用,因此在公有云中一般不提供热迁移功能
六大命名空间:主机名空间、文件系统、用户、网络、进程、信号向量
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。
客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成干上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。
HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。HTTP是一种面向对象的协议。允许传送任意类型的数据对象。它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。当用户在一个HTML文档中定义了一个超文本链后,浏览器将通过TCP/IP协议与指定的服务器建立连接
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
1)域名解析
首先,浏览器会对URL地址进行解析,解析的过程如下:
①浏览器缓存:首先在浏览器的DNS缓存中查找域名对应的ip地址;
②系统缓存:如果浏览器没有找到需要的域名,则浏览器会进行一个系统调用,在用户主机的DNS中进行查找;
③路由器缓存:如果用户主机中没有找到需要的ip地址,会向路由器发送请求,在路由器的DNS中查找
④ISP缓存:如果以上所有的DNS中都没有找到,则会在ISP(互联网服务供应商)的DNS缓存中查找,一般在这里都能找到,如果没有则说明用户输入的域名有误
2)浏览器与文本服务器建立TCP/UDP连接
http是建立在传输层的TCP/UDP连接的基础之上的
3)浏览器给web服务器发送一个http请求
一旦传输层的连接建立成功,浏览器就可以发送请求了,请求的内容包括请求行、响应头部、空行、响应数据
4)服务器给浏览器进行响应
当请求发送后,服务器回给浏览器返回需要的信息,返回的信息主要包括状态行、响应头部、空行、请求数据等
5)释放连接
http1.0:非持久连接,即氢气响应后立即断开
http1.1:持久连接,响应成功后仍然在短时间内保持这条连接
6)浏览器解析响应数据
浏览器解析响应数据后,数据会呈现在浏览器中
返回状态码、时间日期、服务版本号、系统、协议的头部信息、请求方式、网页内容的格式、请求变量的实体标签值(类似于hash值)、字符编码、文本格式
使用 mysqldump 备份数据库时会默认锁表,加上–skip-opt选项会默认不锁表,再加上–single-transaction会加上事务,不会锁表
在用mysqldump备份使用那些参数选项是最完美的组合呢?
–skip-opt
–create-options ----添加create相关的选项
–single-transaction ----一致性备份
-q ----采用快速的dump方式(提高导出性能)
-e ----采用多重insert语句形式(提高还原性能),当一个表的数据量很大情况下不知道会不会导致死锁?
–no-autocommit ----采用批量提交方式(提高还原性能)
-R ----导出存储过程,函数,和触发器
–master-data=2 ----如果有写log-bin且版本为5.0以上的版本,则再加上 --master-data=2
–events ----如果是5.1以上的版本使用,包含事件
COPY指令和ADD指令的区别在于是否支持从远程URL获取资源。
- COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。COPY不能对压缩文件进行自动解压,COPY只能对一些较小的文件进行操作,不能对大文件操作
- ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。ADD可以对压缩文件进行自动解压并安装build
sar命令是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。
sar命令 选项 间隔时间 次数
CPU使用情况:sar -u
平均负载情况:sar -q
内存使用情况:sar -r
swap分区情况:sar -W
IO和传递速率:sar -b
磁盘使用情况:sar -d
网络信息情况:sar -n
网络接口信息:sar -n DEV
socket连接信息:sar -n SOCK
TCP连接统计:sar -n TCP
1.9版本
主库
启用binlog日志、设置server_id、授权用户、查看binlog日志的信息
从库
设置server_id、确保与主库的数据一致、指定主库信息、启动slave服务、查看状态信息
在zabbix的配置文件中开启自定义监控
编写监控脚本,过滤出mysql的IO线程是否为yes
编写自定义监控文件,监控脚本
测试定义的监控命令是否成功
在zabbix网页中自定义监控项,添加监控文件中的UserParameter
1、kill -9 id:一般不加参数kill是使用15来杀,这相当于正常停止进程,停止进程的时候会释放进程所占用的资源;他们的区别就好比电脑关机中的软关机(通过“开始”菜单选择“关机”)与硬关机(直接切断电源),虽然都能关机,但是程序所作的处理是不一样的。
2、kill - 9 表示强制杀死该进程;而 kill 则有局限性,例如后台进程,守护进程等;
3、执行kill命令,系统会发送一个SIGTERM信号给对应的程序。SIGTERM多半是会被阻塞的。kill -9命令,系统给对应程序发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。
uname -r 或者uname -v
1,安全组未开放指定端口
2,服务器开启了防火墙
3,指定端口未处于工作监听状态(即被服务占用)
4,指定端口处于工作监听状态,但绑定了指定ip地址(bindIp)
主库负载较大、配置出错
#!/bin/bash
for name in $(cat $1) # 存放用户的文件列表
do
useradd $name &> /dev/null
stty -echo
echo "0123456" | passwd --stdin $name
stty echo
echo "$1 用户创建成功"
done
一:一般的防盗链如下:
location ~* \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked www.jzxue.com jzxue.com ; if ($invalid_referer) { rewrite ^/ http://www.jzxue.com/retrun.html; #return 403; } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
第一行:gif|jpg|png|swf|flv
表示对gif、jpg、png、swf、flv后缀的文件实行防盗链
第二行: 表示对www.ingnix.com这2个来路进行判断
if{}里面内容的意思是,如果来路不是指定来思是,如果来路不是指定来路就跳转到http://www.jzxue.com/retrun.html页面,当然直接返回403也是可以的。二:针对图片目录防止盗链
location /images/ { alias /data/images/; valid_referers none blocked server_names *.xok.la xok.la ; if ($invalid_referer) {return 403;} }
- 1
- 2
- 3
- 4
- 5
三:使用第三方模块ngx_http_accesskey_module实现Nginx防盗链
实现方法如下:
- 下载NginxHttpAccessKeyModule模块文件:http://wiki.nginx.org/File:Nginx-accesskey-2.0.3.tar.gz
- 解压此文件后,找到nginx-accesskey-2.0.3下的config文件。编辑此文件:替换其中的”$HTTP_ACCESSKEY_MODULE”为”ngx_http_accesskey_module”;
- 用一下参数重新编译nginx:
./configure --add-module=path/to/nginx-accesskey <<pestd add
- 1
- 2
上面需要加上原有到编译参数,然后执行: make && make install
- 修改nginx的conf文件,添加以下几行:
location /download { accesskey on; accesskey_hashmethod md5; accesskey_arg "key"; accesskey_signature "mypass$remote_addr"; }
- 1
- 2
- 3
- 4
- 5
- 6
其中:
accesskey为模块开关;
accesskey_hashmethod为加密方式MD5或者SHA-1;
accesskey_arg为url中的关键字参数;
accesskey_signature为加密值,此处为mypass和访问IP构成的字符串。
curl是将下载文件输出到stdout,将进度信息输出到stderr,不显示进度信息使用–silent选项。
使用Url重写能给您网站带来哪些好处:
第一:有利于搜索引擎抓取,因为现在大部分搜索引擎对动态页面的抓取还比较弱,它们更喜欢抓取一些静态页面。而我们现在的页面大部分数据都是动态显示的。这就需要我们把动态页面变成静态页面,有利于搜索引擎抓取。
第二:用户更容易理解,易于用户记忆和键入。
第三:提高安全性,隐藏技术的实现,缩短url,隐藏实际路径,实现技术的隐藏,不至于暴露您所采用的技术。
第四:可以很方便的重用,提高网站的移植性。如果我们后台方法改动的话,可以保证前台的页面部分不用改。提高了网站的移植性。使用地址重写的缺点:
因为它是通过过滤器原理来实现的,就意味着又多了一道访问,多少会影响点访问速度的,这个可以忽略不计的。
80端口冲突,被占用。解决办法:使用netstat查看当前端口的服务
配置文件httpd.conf配置出错。解决办法:建议在修改httpd配置文件之前备份一个主配置文件
配置文件、日志
1.设置目录白名单:对指定请求路径不设置限制,如对请求路径为api目录下的请求不做限制,则可写为
server{
location /app {
proxy_pass http://192.168.1.111:8095/app;
limit_conn conn 20;
limit_rate 500k;
limit_req zone=foo burst=5 nodelay;
}
location /app/api {
proxy_pass http://192.168.1.111:8095/app/api
}
}
# 因nginx会优先进行精准匹配,所以以上写法即接触了对api目录下属路径的限制
2.设置ip白名单,需用到nginx geo 与 nginx map
在没有人为删除的情况下(–without-http_geo_module或–without-http_map_module),nginx默认加载了ngx-http-geo-module和ngx-http-map-module相关内容;
ngx-http-geo-module可以用来创建变量,变量值依赖于客户端 ip 地址;
ngx-http-map-module可以基于其他变量及变量值进行变量创建,其允许分类,或者映射多个变量到不同值并存储在一个变量中;
Nginx geo 格式说明 Syntax ( 语法格式 ): geo [$address] $variable { ... } Default ( 默认 ): - Content ( 配置段位 ): http Nginx map 格式说明 Syntax ( 语法格式 ): map String $variable { ... } Default ( 默认 ):- Content ( 配置段位 ): http 白名单配置示例 http{ # ... 其他配置内容 #定义白名单ip列表变量 geo $whiteiplist { default 1 ; 127.0.0.1/32 0; 64.223.160.0/19 0; } #使用map指令映射将白名单列表中客户端请求ip为空串 map $whiteiplist $limit{ 1 $binary_remote_addr ; 0 ""; } #配置请求限制内容 limit_conn_zone $limit zone=conn:10m; limit_req_zone $limit zone=allips:10m rate=20r/s; server{ location /yourApplicationName { proxy_pass http://192.168.1.111:8095/app; limit_conn conn 50; limit_rate 500k; limit_req zone=allips burst=5 nodelay; } } } 白名单配置可用于对合作客户,搜索引擎等请求过滤限制 #(特殊情况处理) #如果想仅限制指定的请求,如:只限制Post请求,则: http{ # 其他请求.. #请求地址map映射 map $request_method $limit { default ""; POST $binary_remote_addr; } #限制定义 limit_req_zone $limit zone=reqlimit:20m rate=10r/s; server{ ... #与普通限制一致 } } #在此基础上,想进行指定方法的白名单限制处理,则: http{ #... #定义白名单列表 map $whiteiplist $limitips{ 1 $binary_remote_addr; 0 ""; } #基于白名单列表,定义指定方法请求限制 map $request_method $limit { default ""; # POST $binary_remote_addr; POST $limitips; } #对请求进行引用 limit_req_zone $limit zone=reqlimit:20m rate=10r/s; #在server中进行引用 server{ #... 与普通限制相同 } }
优点:1.数据强一致性,无同步延迟
2.没有主从切换操作,无虚拟IP
3.多线程复制,不熟使用简单
4.支持节点自动加入,无需手动复制数据
缺点:性能损耗较大,大事务可能卡住整个集群,因为PXC的数据强一致性,同一事务会在整个集群每一台机器上执行,数据全冗余MHA优点:同一管理节点,可以管理多个集群,能够实现故障自动切换(通常20~30秒),实现数据库高可用
缺点:1.搭建比较麻烦
2.需要编写脚本或第三方工具来实现Vip的配置
3.MHA只会对主数据库进行监控
二层:链路聚合协议,
三层:ospf协议,dns协议
HTTP请求的方法:
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
注意:
1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。
2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。
区别:
get请求无消息体,只能携带少量数据
post请求有消息体,可以携带大量数据
携带数据的方式:
get请求将数据放在url地址中
post请求将数据放在消息体中
GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
GET方式提交的数据最多只能有1024字节,而POST则没有此限制
1、首先要确定是用户端还是服务端的问题。当接到用户反馈访问慢,那边自己立即访问网站看看,如果自己这边访问快,基本断定是用户端问题,就需要耐心跟客户解释,协助客户解决问题。
不要上来就看服务端的问题。一定要从源头开始,逐步逐步往下。
2、如果访问也慢,那么可以利用浏览器的调试功能,看看加载那一项数据消耗时间过多,是图片加载慢,还是某些数据加载慢。
3、针对服务器负载情况。查看服务器硬件(网络、CPU、内存)的消耗情况。如果是购买的云主机,比如阿里云,可以登录阿里云平台提供各方面的监控,比如 CPU、内存、带宽的使用情况。
4、如果发现硬件资源消耗都不高,那么就需要通过查日志,比如看看 MySQL慢查询的日志,看看是不是某条 SQL 语句查询慢,导致网站访问慢。
怎么去解决?
1、如果是出口带宽问题,那么久申请加大出口带宽。
2、如果慢查询比较多,那么就要开发人员或 DBA 协助进行 SQL 语句的优化。
3、如果数据库响应慢,考虑可以加一个数据库缓存,如 Redis 等等。然后也可以搭建MySQL 主从,一台 MySQL 服务器负责写,其他几台从数据库负责读。
4、申请购买 CDN 服务,加载用户的访问。
5、如果访问还比较慢,那就需要从整体架构上进行优化咯。做到专角色专用,多台服务器提供同一个服务。
SNMP是简单的网络管理协议,它不是一个软件,而是用于网络管理的一套规则。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。
但话又说回来,为什么要使用SNMP协议?
因为网络设备可能来自不同的厂商,如果每个厂商提供一套独立的管理接口,将使网络管理变得越来越复杂,若想对网络中来自不同厂商的设备监控,用基于SNMP开发的软件进行管理最方便的,因为大部分的设备都支持SNMP协议。
那么SNMP有哪些技术有点?
(1)基于TCP/IP互联网的标准协议,传输层协议一般用UDP
(2)自动化网络管理。网络管理员可以利用SNMP平台在网络上的节点检索信息、修改信息、发现故障、完成故障诊断、进行容量规划和生成报告
(3)屏蔽不同设备的物理差异,实现对不同厂商产品的自动化管理。SNMP只提供最基本得功能集,使得管理任务与被管理设备的物理特征和实际网络类型相对独立,从而实现对不同厂商设备的管理
(4)简单的请求-应答方式和主动通告方式相结合,并有超时和重传机制
(5)报文种类少,报文格式简单,方便解析,易于实现
(6)SNMPv3版本提供了认证和加密安全机制,以及基于用户和视图的访问控制功能,增强了安全性
jenkins系统的工作流程大概分为以下几步:
开发者将新版本push到git server (Gitlab)。
Gitlab随后触发jenkins master结点进行一次build。(通过web hook或者定时检测)
jenkins master结点将这个build任务分配给若干个注册的slave结点中的一个,这个slave结点根据一个事先设置好的脚本进行build。这个脚本可以做的事情很多,比如编译,测试,生成测试报告等等。这些原本需要手动完成的任务都可以交给jenkins来做。
我们在build中要进行编译,这里使用了分布式编译器distcc来加快编译速度
CC 攻击,主要是用来攻击页面的,模拟多个用户不停的对你的页面进行访问,从而使你的系统资源消耗殆尽。
DDOS 攻击,中文名叫分布式拒绝服务攻击,指借助服务器技术将多个计算机联合起来作为攻击平台,来对一个或多个目标发动 DDOS 攻击。
攻击,即是通过大量合法的请求占用大量网络资源,以达到瘫痪网络的目的。
怎么预防 CC 攻击和 DDOS 攻击?
防 CC、DDOS 攻击,这些只能是用硬件防火墙做流量清洗,将攻击流量引入黑洞。
流量清洗这一块,主要是买 ISP 服务商的防攻击的服务就可以,机房一般有空余流量,我们一般是买服务,毕竟攻击不会是持续长时间。
1、用top查看具体是那个程序占用cpu资源。
2、确认程序负载过高是否正常(是正常并发量增加还是给人攻击)。
3、正常的访问并发增加可加服务器或限制并发量。给人攻击就禁ip。
4、查看web是不是给人植入修改代码,有的话升级版本。
5、用MD5效验确认top命令有没有给人修改过代码。确认top的输出结果是否正确。
在linux文件系统中,是以块为单位存储信息的,为了找到某一个文件在存储空间中存放的位置,用i节点对一个文件进行索引。I节点包含了描述一个文件所必须的全部信息。所以i节点是文件系统管理的一个数据结构。
Redis 可以使用主从同步,从从同步。
第一次同步时,主节点做一次 bgsave,并同时将后续修改操作记录到内存 buffffer,待完成后将rdb 文件全量同步到复制节点,复制节点接受完成后将 rdb 镜像加载到内存。
加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。
1、服务器出口带宽不够用
本身服务器购买的出口带宽比较小。一旦并发量大的话,就会造成分给每个用户的出口带宽就小,访问速度自然就会慢。
跨运营商网络导致带宽缩减。例如,公司网站放在电信的网络上,那么客户这边对接是长城宽带或联通,这也可能导致带宽的缩减。
2、服务器负载过大,导致响应不过来可以从两个方面入手分析:
分析系统负载,使用 w 命令或者 uptime 命令查看系统负载。如果负载很高,则使用 top 命令查看 CPU ,MEM 等占用情况,要么是 CPU 繁忙,要么是内存不够。
如果这二者都正常,再去使用 sar 命令分析网卡流量,分析是不是遭到了攻击。一旦分析出问题的原因,采取对应的措施解决,如决定要不要杀死一些进程,或者禁止一些访问等。
3、数据库瓶颈如果慢查询比较多。那么就要开发人员或 DBA 协助进行 SQL 语句的优化。
如果数据库响应慢,考虑可以加一个数据库缓存,如 Redis 等。然后,也可以搭建 MySQL 主从,一台 MySQL 服务器负责写,其他几台从数据库负责读。
4、网站开发代码没有优化好例如 SQL 语句没有优化,导致数据库读写相当耗时。
a. 开发一个守护进程脚本每30秒实现检测一次。
b. 如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。
c. 请使用数组技术实现上述脚本(获取主从判断及错误号部分)。
#!/bin/bash mysqlbin=/usr/bin/mysql mysqlhost=127.0.0.1 mysqluser=root mysqlpwd=root skiperrors=(1158 1159 1008 1007 1062) admin='email@qq.com' check() { LASTNO=$($mysqlbin -h$mysqluser -u$mysqluser -p$mysqlpwd -e "show slave status\G"|grep Last_Errno|awk -F: '{print $2}') } skip() { for errorno in ${skiperrors[@]};do if [ $errorno == $LASTNO ];then notify $errorno break fi done } notify() { text="mysql slave monitor error: $1" echo $text|mail -s 'mysql error' } main() { while :;do check && skip || notify "mysql connected failed!" sleep 30 done } main
初中级运维的日常涉及工作:
- 评估产品需求及发展需求,设计网站架构。
- 选择IDC公司、云产品,CDN等产品。
- 采购服务器、安装系统、配置服务、服务器IDC上架。
- 调试网络、优化系统及服务。
- 上线代码、配合研发搭建环境、调试、测试代码。
- 监控硬件、软件及各种业务应用。
- 配置收集日志,根据日志信息报警及优化系统及服务
- 解决日常问题,如硬件(服务器、交换机、硬件、网络等)、软件(网络服务)、各类业务服务故障。
- 编写自动化脚本(Shell、Python),自动化部署服务
高级运维涉及的工作:- 监控带宽、流量、并发、业务接口等关键资源及访问信息的变化趋势。
- 根据相应趋势变化不断优化网站架构。
- 设计各类解决方案,解决公司业务发展中的遇到的网站瓶颈。
- 编写各种自动化脚本(Shell、Python),自动化部署优化服务。
- 开发自动化部署和管理平台(CMDB),实现平台化运维。
- 开发运维管理平台、及运维工具产品,提升服务效率。
- 制定运维流程、规范、制度,并有序推进。
- 研究先进运维理念、模式,确保业务持续稳定、有序。
MySQL常见的三种存储引擎为InnoDB、MyISAM和MEMORY。
其区别体现在事务安全、存储限制、空间使用、内存使用、插入数据的速度和对外键的支持
1、事务安全
InnoDB支持事务安全,MyISAM和MEMORY两个不支持。2、储存限制
InnoDB有64TB的存储限制,MyISAM和MEMORY要是具体情况而3、空间使用
InnoDB对空间使用程度较高,MyISAM和MEMORY对空间使用程度较低。4、内存使用
InnoDB和MEMORY对内存使用程度较高,MyISAM对内存使用程度较低。5、插入数据的速度:
InnoDB插入数据的速度较低,MyISAM和MEMORY插入数据的速度较高。6、对外键的支持:
InnoDB对外键支持情况较好,MyISAM和MEMORY两个不支持外键
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用 PORT 命令告诉服务器:“我打开了XX端口,你过来连接我”。于是服务器从20端口向客户端的 XX 端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XX端口,你过来连接我”。于是客户端向服务器的 XX 端口发送连接请求,建立一条数据链路来传送数据。
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完 全不同。
- Master 最好不要写内存快照,如果 Master 写内存快照,save 命令调度 rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务
- 如果数据比较重要,某个 Slave 开启 AOF 备份数据,策略设置为每秒同步
- 为了主从复制的速度和连接的稳定性,Master 和 Slave 最好在同一个局域网
- 尽量避免在压力很大的主库上增加从
- 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1<- Slave2 <- Slave3…
这样的结构方便解决单点故障问题,实现 Slave 对 Master的替换。如果 Master 挂了,可以立刻启用 Slave1 做 Master,其他不变。
1.rewrite break -url
重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变。
2.rewrite last -url
重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏不变
3.rewrite redirect
返回302临时重定向,地址栏显示重定向后的url,,爬虫不会更新url(临时)
4.rewrite permanent
返回301永久重定向,地址栏显示重定向后的url,爬虫更新url
Linux中很多命令不支持|管道来传递参数解决方法 – 使用xargs命令
xargs命令:
1.默认命令是echo,空格是默认定界符。
2.常用的几种用法:1> touch
find | xargs touch -c
1
2> rmfind ./ -name “.gitignore” | xargs rm -rf -
1
3> lsfind ./ -name “*.sh” | xargs ls -l
问题:
某天发现某台机器df-h已用磁盘空间为90G,而du-sh/*显示所有使用空间加起来才30G。
原因:
可能某人直接用rm删除某个正在写的文件,导致文件删了但磁盘空间没释放的问题
解决:
1)最简单重启系统或者重启相关服务。
2)干掉进程
lsof | grep deleted # 查看delete进程kill -9 pid # 杀掉进程
从lsof的输出中,我们可以发现pid为25575的进程持有着以文件描述号(fd)为33打开的文件/oradata/DATAPRE/UNDOTBS009.dbf。在我们找到了这个文件之后可以通过结束进程的方式来释放被占用的空间:echo > /proc/25575 /fd/33
3)删除正在写的文件一般用cat /dev/null >file
1.在源主机上,应用层将一串应用数据流传送给传输层。
2.传输层将应用层的数据流截成分组,并加上TCP报头形成TCP段,送交网络层。
3.在网络层给TCP段加上包括源、目的主机IP地址的IP报头,生成一个IP数据包,并将IP数据包送交链路4.链路层在其MAC帧的数据部分装上IP数据包,再加上源、目的主机的MAC地址和帧头,并根据其目的MAC地址,将MAC帧发往目的主机或IP路由器。
4.链路层在其MAC帧的数据部分装上IP数据包,再加上源、目的主机的MAC地址和帧头,并根据其目的MAC地址,将MAC帧发往目的主机或IP路由器。
5.在目的主机,链路层将MAC帧的帧头去掉,并将IP数据包送交网络层。
6.网络层检查IP报头,如果报头中校验和与计算结果不一致,则丢弃该IP数据包;若校验和与计算结果一致,则去掉IP报头,将TCP段送交传输层。
7.传输层检查顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据。若正确,则向源主机发确认信息;若不正确或丢包,则向源主机要求重发信息。
8.在目的主机,传输层去掉TCP报头,将排好顺序的分组组成应用数据流送给应用程序。这样目的主机接收到的来自源主机的字节流,就像是直接接收来自源主机的字节流一样。
原因总结
产生的原因一句话总结就是:等待磁盘I/O完成的进程过多,导致进程队列长度过大,但是cpu运行的进程却很少,这样就体现到负载过大了,cpu使用率低。
什么场景会造成CPU低而负载确很高?
通过上面的具体分析负载的意义就很明显了,负载总结为一句话就是:需要运行处理但又必须等待队列前的进程处理完成的进程个数。具体来说,也就是如下两种情况:
等待被授权予CPU运行权限的进程
等待磁盘I/O完成的进程
cpu低而负载高也就是说等待磁盘I/O完成的进程过多,就会导致队列长度过大,这样就体现到负载过大了,但实际是此时cpu被分配去执行别的任务或空闲,具体场景有如下几种。
场景一:磁盘读写请求过多就会导致大量I/O等待
上面说过,cpu的工作效率要高于磁盘,而进程在cpu上面运行需要访问磁盘文件,这个时候cpu会向内核发起调用文件的请求,让内核去磁盘取文件,这个时候会切换到其他进程或者空闲,这个任务就会转换为不可中断睡眠状态。当这种读写请求过多就会导致不可中断睡眠状态的进程过多,从而导致负载高,cpu低的情况。
场景二:MySQL中存在没有索引的语句或存在死锁等情况
我们都知道MySQL的数据是存储在硬盘中,如果需要进行sql查询,需要先把数据从磁盘加载到内存中。当在数据特别大的时候,如果执行的sql语句没有索引,就会造成扫描表的行数过大导致I/O阻塞,或者是语句中存在死锁,也会造成I/O阻塞,从而导致不可中断睡眠进程过多,导致负载过大。
具体解决方法可以在MySQL中运行show full processlist命令查看线程等待情况,把其中的语句拿出来进行优化。
场景三:外接硬盘故障,常见有挂了NFS,但是NFS server故障
比如我们的系统挂载了外接硬盘如NFS共享存储,经常会有大量的读写请求去访问NFS存储的文件,如果这个时候NFS Server故障,那么就会导致进程读写请求一直获取不到资源,从而进程一直是不可中断状态,造成负载很高。
route add -net 192.168.2.0/24 gw 192.168.2.254
crontab -e -u 用户名
* 04 * * 6 /usr/sbin/reboot
实现这个功能需要安装iptables的 time 模块。默认发行版linux的iptables是没有安装time模块的,所以首先你必须重新编译安装iptables加上该模块,才能使用。
命令例子:
在周一到周五的8点至18点间,禁止112.112.112.0/24段访问
iptables -I INPUT -s 112.112.112.0/24 -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri -j DROP
1)使用GRE模块实现VPN功能
启用内核模块ip_gre,使用lsmod查看当前计算机已经加载的模块,使用modprobe加载Linux内核模块
创建一个虚拟VPN隧道
实现两台主机点到点的隧道通讯2)使用PPTP、L2TP+IPsec实现与Windows的互联
使用PPTP协议创建一个支持身份验证的隧道连接
使用MPPE对数据进行加密
为客户端分配地址池
客户端连接使用L2TP协议创建一个支持身份验证与加密的隧道连接
使用IPSec对数据进行加密
为客户端分配地址池
客户端连接
使用预共享秘钥
patch,是打补丁的命令
patch -p1 (“p”后面的数字1,表示去掉前第一个路径)
参数0,1,2,是指略去的patch文件中的前几级目录
patch -p数字 指定删除补丁文件中的多少层路径前缀
patch -RE # 还原旧版本,反向修复
-R(reverse)反向修复,-E修复后如果文件为空,则删除该文件
linux 非正常关机引起的磁盘文件损坏
磁盘的连接线又松了,引起机器黑屏,只好强制按重启按钮,启动后就报上面的错误
输入root密码进去后,什么都干不了,执行命令没有反应(当然了,因为文件系统是在只读模式下了)
Google了一下,找到了解决办法:执行 fsck
一路按Y
完事后重启机器,OK,正常了!
另:
功能说明:检查文件系统并尝试修复错误。
语 法:fsck [-aANPrRsTV][-t <文件系统类型>][文件系统…]
补充说明:当文件系统发生错误四化,可用fsck指令尝试加以修复。
参 数:
-a 自动修复文件系统,不询问任何问题。
-A 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统。
-N 不执行指令,仅列出实际执行会进行的动作。
-P 当搭配”-A”参数使用时,则会同时检查所有的文件系统。
-r 采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式。
-R 当搭配”-A”参数使用时,则会略过/目录的文件系统不予检查。
-s 依序执行检查作业,而非同时执行。
-t<文件系统类型> 指定要检查的文件系统类型。
-T 执行fsck指令时,不显示标题信息。
-V 显示指令执行过程。
注意 :
此指令可与 /etc/fstab 相互参考操作来加以了解。
运行fsck命令后产生的文件有什么用?
当执行fsck命令时,fsck命令如果发现存在孤立的文件或目录,这些孤立的文件或目录对于系统管理员或用户来说,无法访问到它,因为它与它的上级目录失去了关联,如果用户允许fsck重新把它们找回来的话,fsck命令就会把这些孤立的文件或目录放在文件系统的/lost+found目录下,并用各自的i-node号来命名,以便用户查找自己需要的文件。Lost+found目录通过它的英文含义我们都可以知道,它是一个失物认领处。
因此当某个用户发现自己丢失了某个文件,可以在执行fsck之后到/lost+found目录下去查找,这时通过文件名已无法辨认出文件的作用,只能用file之类的命令来确定文件的类型,如果是数据文件,可以用more或vi命令来查看,如果是二进制文件,可以用dbx命令来调试或者试着执行它(注意它可能是一个具有破坏性的程序),知道文件或目录的作用之后,可以对其进行改名。
如果用户不允许fsck把这些孤立的文件或目录找回来,那么fsck命令就会破坏这些文件或目录,彻底丢失这些文件或目录,用户或系统管理员永远也无法找回它们
prefork(多进程,每个子进程产生一个线程)和 worker(多进程多线程,每个进程生成多个 线程)
其主要工作方式是:当 Apache服务器启动后,mpm_prefork模块会预先创建多个子进程(默认为 5个),每个子进程只有一个线程,当接收到客户端的请求后,mpm_prefork模块
再将请求转交给子进程处理,并且每个子进程同时只能用于处理单个请求。如果当前的请求数将超过预先创建的子进程数时,mpm_prefork模块就会创建新的子进程来处理额外的请求。Apache总是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求。这样客户端的请求就不需要在接收后等候子进程的产生。
由于在 mpm_prefork模块中,每个请求对应一个子进程,因此其占用的系统资源相对其他两种模块而言较多。不过 mpm_prefork模块的优点在于它的每个子进程都会独立处理对应的单个请求,这样,如果其中一个请求出现问题就不会影响到其他请求。Prefork在效率上要比 Worker要高,但是内存使用大得多不擅长处理高并发的场景。
Worker模式(多线程多进程):
和 prefork模式相比,worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比 prefork有更多可用的线程,表现会更优秀一些;
另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响 Apache的一部分,而不是全部。
总的来说,prefork方式速度要稍高于 worker,然而它需要的 cpu和 memory资源也稍多于 woker。
可以通过命令 httpd-M 或 httpd-l可以查看 apache当前的模块
可以通过命令 httpd-V 查看是工作在哪种模式下
我们一般通过 hexdump命令 来查看二进制文件的内容。
hexdump-C XXX(文件名)-C 是参数 不同的参数有不同的意义
-C 是比较规范的 十六进制和 ASCII码显示
-c是单字节字符显示
-b单字节八进制显示
-o是双字节八进制显示
-d是双字节十进制显示
-x是双字节十六进制显示
VSZ:虚拟内存集,进程占用的虚拟内存空间
RSS:物理内存集,进程战用实际物理内存空间
容器生命周期管理 — docker[run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker[ps|inspect|top|attach|events|logs|wait|export|port]
容器 rootfs命令 — docker[commit|cp|diff]
镜像仓库 — docker[login|pull|push|search]
本地镜像管理 — docker[images|rmi|tag|build|history|save|import]
其他命令 — docker[info|version]
1)pidnamespace
不同用户的进程就是通过 pidnamespace隔离开的,且不同 namespace中可以有相同pid。所有的 LXC 进程在 docker中的父进程为 docker进程,每个 lxc进程具有不同的 namespace。
2)netnamespace
有了 pidnamespace,每个 namespace中的 pid能够相互隔离,但是网络端口还是共享host的端口。网络隔离是通过 netnamespace实现的,每个 netnamespace有独立的network devices,IP addresses,IP routing tables,/proc/net目录。这样每个container的网络就能隔离开来。docker默认采用 veth的方式将 container中的虚拟网卡同 host上的一个 dockerbridge:docker0连接在一起。
3)ipcnamespace
container 中 进 程 交 互 还 是 采 用 linux 常 见 的 进 程 间 交 互 方 法 (interprocess communication- IPC),包括常见的信号量、消息队列和共享内存。
container的进程间交互实际上还是host上具有相同pidnamespace中的进程间交互。
4)mntnamespace
类 似 chroot,将 一 个 进 程 放 到 一 个 特 定 的 目 录 执 行 。 mnt namespace 允 许 不 同namespace的进程看到的文件结构不同,这样每个 namespace中的进程所看到的文件目录就被隔离开了。在 container里头,看到的文件系统,就是一个完整的 linux系统,有 /etc、/lib等,通过 chroot实现。
5)utsnamespace
UTS(“UNIX Time-sharing System”)namespace允许每个 container拥有独立的hostname和 domainname,使其在网络上可以被视作一个独立的节点而非 Host上的一个进程。
6)usernamespace
每个 container可以有不同的 user和 groupid,也就是说可以在 container内部用container内部的用户执行程序而非 Host上的用户。
有了以上 6种 namespace从进程、网络、IPC、文件系统、UTS 和用户角度的隔离,一个 container就可以对外展现出一个独立计算机的能力,并且不同 container从 OS 层面实现了隔离。
然而不同 namespace之间资源还是相互竞争的,仍然需要类似 ulimit来管理每个 container所能使用的资源 - -cgroup。 cgroups(Controlgroups)实现了对资源的配额和度量。
mount.cifs//Ip地址 /server /mnt/server -o user=administrator,password=123456
linux下的 server需要自己手动建一个后面的 user与 pass是 windows主机的账号和密码 注意空格 和逗号
当 LNMP 工作的时候,首先是用户通过浏览器输入域名请求 NginxWeb服务,如果是请求的是静态的资源,则由 Nginx解析返回给用户。
如果是动态的资源,那么久通过 FastCGI接口发送给 PHP 引擎服务(FastCGI进程php-fpm)进行解析。
如果这个动态的请求要读取数据库,那么 PHP 就会继续向后请求 MySQL 数据库,读取需要的数据。
最终通过 Nginx服务把获取的数据返回给用户,这就是 LNMP 的基本流程。
1.性能卓越,服务稳定,很少出现异常宕机。
2.开放源代码并且没有版权的限制,自主传播,使用成本低。
3.历史悠久,社区及用户非常活跃,遇到问题很快可以获取帮助。
4.软件体积小安装简单,并且易于维护,安装及维护的成本低。
5.支持多种操作系统,提供 API接口。
6.品牌效应,使得企业无需考虑就直接使用
1.HTTP 服务器和动态脚本语言间通信的接口或工具。
2.可以把动态语言解析或 HTTP 服务器分离开。
3.Nginx、Apache、Lighttpd,以及多数动态语言都支持 FastCGI。
4.PHP 动态语言方式采用 C/S 结构,分为客户端(HTTP 服务器)和服务器端(动态语言解析服务器)。
5.PHP 动态语言服务器端可以启动多个 FastCGI的守护进程。
6.HTTP 服务器通过 FastCGI客户端和动态语言 FastCGI服务器端通信。
我们自己测了都没问题,只是这个客户访问有问题,那肯定是要先联系到这个客户,能远程最好,问一下客户的网络是不是正常的,访问其它的网站有没有问题(比如京东、百度什么的)。
如果访问其它网站有问题,那叫客户解决本身网络问题。如果访问其它网站都没问题,用ping和 nslookup解析一下我们的网站是不是正常的,让客户用 IP 来访问我们的网站是否可行,如果 IP 访问没问题,那就是客户的 DNS 服务器有问题或者 DNS 服务器解析不到我们的网站。还有一种可能就是跨运营商访问的问题,比如我们的服务器用的是北方联通、而客户用的是南方移动,就也有可能突然在某个时间段访问不到,这种情况在庞大的中国网 络环境中经常发生(一般是靠 CDN 解决)。
还有可能就是我们的网站没有 SSL 证书,在公网是使用的是 http协议,这种情况有可能就是没有用 https协议网站被运营商劫持了。
lscpu(查看 cpu信息)、
free-m(查看内存信息)、
df-h(查看硬盘分区信息)、
top(还可以动态查看 cpu、内存使用情况的信息)
/proc/目录下也可以查看很多硬件信息
正常来说,一般会把监控的服务器统一加入到一个模板中,修改模板的其是某一项的监控项
参数和告警阈值后,加入模板中的所有主机都会同步。如果单独想修改其中某一台服务器内
存告警阈值,需要进入这台主机,单独创建一个告警 Triggers,关联这台主机监控内存的项,
配置好告警的阈值为 60%即可实现。
根据这种现象有可能是:服务器磁盘满了;文件格式破坏了;或者你用的是普通用户上传,正
好上传的目录没有权限;还有可能就是你上传的文件大小超出了该目录空间的范围
rsync是远程同步工具、inotify 是一种强大的异步文件系统系统监控机制。
通过inotifywait中的-m 参数可以实现“始终保持事件监听状态”。rsync中的-delete参数是指“ 删除那些 DST 中 SRC没有的文件”
不能用 ping,那可以用 telnet对方服务器的端口、或者互相访问对方打开的服务
如果这套环境是部署在云端(比如阿里云),你就不用去考虑硬件设计的问题。可直接上阿里云的 SLB+ECS+RDS 这套标准的高可用、高并发的架构。对外服务直接上 SLB 负载均衡技术,由阿里的 SLB 分发到后端的 ECS 主机;ECS 主机部署多台,应用拆分在不同的 ECS 主机上,尽量细分服务。数据库用 RDS 高可用版本(一主一备的经典高可用架构)、或者用 RDS 金融版(一主两备的三节点架构)。在结合阿里其它的服务就完全 OK,业务量上来了,主机不够用了,直横向扩容 ECS 主机搞定。
如果这套环境托管在 IDC,那么你就要从硬件、软件(应用服务)双面去考虑了。硬件要达到高可用、高并发公司必须买多套网络硬件设备(比如负载设备 F5、防火墙、核心层交换、接入层交换)都必须要冗余,由其是在网络设计上,设备之间都必须有双线连接。
设备如果都是跑的单机,其中一个设备挂了,你整个网络都瘫痪了,就谈不上高可用、高并发了。其次在是考虑应用服务了,对外服务我会采用成熟的开源方案 LVS+Keepalived或者 Nginx+Keepalived,缓存层可以考虑redis集群及 Mongodb集群,中间件等其它服务可以用 kafka、zookeeper,图片存储可以用 fastDFS 或 MFS,如果数据量大、又非常多,那么可采用 hadoop这一套方案。后端数据库可采用 “主从+MHA”。这样一套环境下来是绝对满足高可用、高并发的架构。
基础选择器
1.通用选择器
2.元素选择器
3.类选择器
4.伪类选择器
5.id选择器
6.群组选择器
conda create -n ForPytorch python=3.6
- 1
https://www.cnblogs.com/picassooo/p/11776853.html
Python代码的执行由Python虚拟机(解释器)来控制。Python在设计之初就考虑要在主循环中,同时只有一个线程在执行,就像单CPU的系统中运行多个进程那样,内存中可以存放多个程序,但任意时刻,只有一个程序在CPU中运行。同样地,虽然Python解释器可以运行多个线程,只有一个线程在解释器中运行。
对Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同时只有一个线程在运行。在多线程环境中,Python虚拟机按照以下方式执行。
1.设置GIL。
2.切换到一个线程去执行。
3.运行。
4.把线程设置为睡眠状态。
5.解锁GIL。
6.再次重复以上步骤。
同一个时间只能有一个线程执行字节码,CPU密集程序难以多核优势,IO期间会释放GIL,对IO密集程序影响不大
331.CPU的负载和利用率的区别
CPU利用率:显示的是程序在运行期间实时占用的CPU百分比
CPU负载:显示的是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着负载就一定大。举例来说:如果我有一个程序它需要一直使用CPU的运算功能,那么此时CPU的使用率可能达到100%,但是CPU的工作负载则是趋近于“1”,因为CPU仅负责一个工作嘛!如果同时执行这样的程序两个呢?CPU的使用率还是100%,但是工作负载则变成2了。所以也就是说,当CPU的工作负载越大,代表CPU必须要在不同的工作之间进行频繁的工作切换。
332.kafka的生成者、消费者、broker的基本概念
kafka是一款基于发布与订阅的消息系统。它一般被称为“分布式提交日志”或者“分布式流平台”。文件系统或者数据库提交日志用来提供所有事物的持久化记录,通过重建这些日志可以重建系统的状态。同样地,kafka的数据是按照一定顺序持久化保存的,可以按需读取。
broker配置之-----常规配置
1、broker.id:每个broker的唯一标识
2、port:监听端口
3、zookeeper.connect:用于保存broker元数据的zookeeper地址
4、log.dirs:kafka日志存储路径(如果指定了多个路径,broker会往存储分区数最少的路径作为存储目录)
5、num.recovery.threads.per.data.dir:每个日志存储路径对应的线程数
6、auto.create.topics.enable:是否自动创建主题
默认情况下kafka会在如下情形自动创建主题:
(1)生产者开始向主题写消息时
(2)消费者开始向主题读消息时
(3)客户端向主题发送元数据时
(二)broker配置之-----主题配置
1、num.partitions:新创建的主题有多少个分区
2、log.retention.ms(minites/hours):指定磁盘上的消息会被保存多久,如果三个参数都制定了,则会选择最小的
3、log.retention.bytes:磁盘保存最大消息字节数,作用在每一个分区上
4、log.segment.bytes:日志片段大小。消息到达broker后,被追加到分区的当前日志片段上。当日志片段达到log.segment.bytes指定的大小,当前日志片段就会被关闭,一个新的日志片段被打开。参数越小,就会频繁打开和关闭新文件,从而降低磁盘写入的整体效率。
注意:日志片段关闭之前消息是不会过期的。如果一个片段10天才写满关闭,设置的过期时间是7天,那么日志片段从打开到过期是17天。
5、log.segment.ms:另一个控制日志片段关闭的参数。指定了多长时间之后日志片段被关闭。
6、message.max.btyes:broker用来限制单个消息的大小。
注:如果消费者的fetch.message.max.bytes比这个值小,那么比较大的消息将无法消费,导致消费者阻塞的情况。
333.负载均衡的分类
负载均衡分类
1)二层负载均衡(mac)
根据OSI模型分的二层负载,一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应.
2)三层负载均衡(ip)
一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应. (即一个ip对一个ip的转发, 端口全放开)
3)四层负载均衡(tcp)
在三次负载均衡的基础上,即从第四层"传输层"开始, 使用"ip+port"接收请求,再转发到对应的机器。
4)七层负载均衡(http)
从第七层"应用层"开始, 根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器。
334.ip地址的分类
A类地址
- 定义:第1字节为网络地址,其它3个字节为主机地址
- 范围:
1.0.0.1 - 126.255.255.254
- 子网掩码:
255.0.0.0
- 私有地址:
10.X.X.X
是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址),范围10.0.0.0-10.255.255.255 —- 保留地址
127.X.X.X
是保留地址,用做循环测试用的,吗比如常用的 127.0.0.1B类地址
- 定义:第1字节和第2字节为网络地址,其它2个字节为主机地址
- 范围:
128.0.0.1 - 191.255.255.254
- 子网掩码:
255.255.0.0
- 私有地址:
172.16.0.0 - 172.31.255.255
是私有地址- 保留地址:
169.254.X.X
是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IPC类地址
- 范围:第1字节、第2字节和第3个字节为网络地址,第4个个字节为主机地址。另外第1个字节的前三位固定为110
- 范围:
192.0.0.1 - 223.255.255.254
- 子网掩码:
255.255.255.0
- 私有地址:
192.168.X.X
是私有地址。(192.168.0.0 - 192.168.255.255
)D类地址
- 定义:不分网络地址和主机地址,它的第1个字节的前四位固定为1110
- 范围:
224.0.0.1 - 239.255.255.254
E类地址
- 定义:不分网络地址和主机地址,它的第1个字节的前五位固定为11110
- 范围:
240.0.0.1 - 255.255.255.254
另外, ip地址后边加个/8(16,24,32),这些数字代表掩码的位数,
A类IP地址的默认子网掩码为255.0.0.0(由于255相当于二进制的8位1,所以也缩写成“/8”,表示网络号占了8位);B类的为255.255.0.0(/16);
C类的为255.255.255.0(/24)
30就是255.255.255.252
32就是255.255.255.255
335.shell脚本中的while、until和for循环的区别
Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for、while和until。while循环和for循环属于“当型循环”,而until属于“直到型循环”。循环控制符:break和continue控制流程转向。
for循环有三种结构:一种是列表for循环,第二种是不带列表for循环。第三种是类C风格的for循环
while循环:也称为前测试循环语句,重复次数是利用一个条件来控制是否继续重复执行这个语句。为了避免死循环,必须保证循环体中包含循环出口条件即表达式存在退出状态为非0的情况。
until循环:until命令和while命令类似,while能实现的脚本until同样也可以实现,但区别是until循环的退出状态是不为0,退出状态是为0(与while刚好相反),即whie循环在条件为真时继续执行循环而until则在条件为假时执行循环。
336.下列程序代码在Linux系统执行后*
会被输出多少次()
void main()
{
int i;
for(i=0;i<3;i++)
{
fork();
printf("*\n");
}
return;
}
A.14
B.16
C.30
D.32
正确答案:A
注意这个题目中输出的时候有\n,刷新了缓冲区,所以只能是14个。
画一个二叉树可以快速得出
1 。第一个不算
2 。 。(2)
3 。 。 。 。(4)
4 。 。 。 。 。 。 。 。(8)
337.关闭linux系统(不是重启系统)可以使用命令:()
A、Ctrl+Alt+Del
B、halt
C、shutdown-rnow
D、reboot
正确选项为:B
338.将文件file1复制为文件file2可以用下面的那些命令:()
A.cp file1 file2 B.cat file1 >file2 C.cat < file1 >file2 D.dd if=file1 of=file2 E.cat file1 | cat >file2
- 1
- 2
- 3
- 4
- 5
正确答案:ABCDE
cp命令 :cp指令用于复制文件或目录。
将文件file1复制成文件file2命令如下:cp file1 file2
cat命令 :cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的。在加上重定向符之后,可以对内容进行重定向。
> : linux中的数据流重导向:输出导向,覆盖导向的文件内容。
< : linux中的数据流重导向:输入导向,理解为原本由键盘输入改为文本输入
dd命令 : 作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
将文件file1拷贝到文件file2中命令如下: dd if=file1 of=file2
339.下列有关nginx配置文件nginx.conf的叙述正确的是:()
A.nginx进程数设置为CPU总核心数最佳 B.虚拟主机配置多个域名时,各域名间应用逗号隔开 C.sendfile on;表示为开启高效文件传输模式,对于执行下载操作等相关应用时,应设置为on D.设置工作模式与连接数上限时,应考虑单个进程最大连接数(最大连接数=连接数*进程数)
- 1
- 2
- 3
- 4
正确答案:A D
进程数设置为CPU总核心数最佳。 (正确)
配置虚拟主机,多个域名时,用 空格 分隔。 (错误)
设定http服务器中 sendfile on; #开启高效文件传输模式
- 普通应用设置为on;
- 用于进行下载等应用磁盘IO重负载应用,设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。(错误)
工作模式与连接数上限 :(最大连接数 = 连接数 * 进程数)(正确)
重载服务和重启服务的区别
重新加载会告诉服务重新加载其配置文件,但保持相同的进程运行。重新启动会告诉它完全关闭,然后重新启动。
linux中不同用户使用不同版本jdk
假设配置全用户的jdk为1.7xx版本,A用户jdk为1.8xx版本
步骤如下:
登录root用户,修改/etc/profile,在文件末尾添加jdk1.7xx的配置,示例如下: JAVA_HOME=/opt/jdk1.7.0_07
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
执行source /etc/profile使配置生效,再使用java -version查看版本
登录用户A,执行vim ~/.bash_profile,在文件末尾添加jdk1.8xx的配置,示例如下:
JAVA_HOME=/usr/java/jdk1.8.0_131
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
执行source ~/.bash_profile使配置生效,使用java -version查看版本
Tomcat的运行日志和访问日志都是什么
运行日志:catalina.out
访问日志:server.xml
EFK原理
日志是怎么样的原理实现的收集上去并显示出来
收集集群日志大致两种:
1.sidecar 容器将应用程序日志传送到自己的标准输出
2.EFK Fluentd 通过一组给定的数据源抓取日志数据,以过滤缓存,路由的形式.抓取日志.处理后(转换成结构化的数据格式)将它们转发给其他服务,比如 Elasticsearch、对象存储、kafka等等。Fluentd 支持超过300个日志存储和分析服务.通过kibana展示
pod的生命周期
Pending pod已经被系统接收,在调度前的准备工作,下载镜像,创建网络等.
Running pod已经调度到相应的node上,完成绑定动作,内部容器已经创建完成,至少有一个处于运行状态
Succeeded pod中的所有容器成功结束,不会重启.
Failed pod中所有容器已经结束,并且至少有一个容器结束失败(容器退出返回码不为0)
Unknown 无法获得pod的状态,常见就是通信原因导致.
ContainerCreating 拉取镜像启动容器中
CrashLoopBackOff pod内有容器启动失败
PV的生命周期
Available(可用) 表示可用状态,还未被任何 PVC 绑定
Bound(已绑定) 表示 PV 已经被 PVC 绑定
Released(已释放) PVC 被删除,但是资源还未被集群重新声明
Failed(失败) 表示该 PV 的自动回收失败
pod的状态有哪些
CrashLoopBackOff 容器退出,kubelet正在将它重启
InvalidImageName 无法解析镜像名称
ImageInspectError 无法校验镜像
ErrImageNeverPull 策略禁止拉取镜像
ImagePullBackOff 镜像正在重试拉取
RegistryUnavailable 连接不到镜像中心
ErrImagePull 通用的拉取镜像出错
CreateContainerConfigError 不能创建kubelet使用的容器配置
CreateContainerError 创建容器失败
m.internalLifecycle.PreStartContainer:执行hook报错
RunContainerError 启动容器失败
PostStartHookError 执行hook报错
ContainersNotInitialized 容器没有初始化完毕
ContainersNotReady 容器没有准备完毕
ContainerCreating 容器创建中
PodInitializing pod初始化中
DockerDaemonNotReady docker还没有完全启动
NetworkPluginNotReady:网络插件还没有完全启动
K8S组件
ETCD 分布式高性能键值数据库,存储整个集群的所有元数据
ApiServer 核心服务,相当于k8s的大脑,API服务器,集群资源访问控制入口,提供restAPI及安全访问控制
Scheduler 调度器,负责把业务容器调度到最合适的Node节点,通过优选和预选算法来决定调度的方向.
Controller Manager 控制器管理,确保集群资源按照期望的方式运行
kubelet 运行在每个节点上的主要的“节点代理”,脏活累活
kube-proxy: 维护节点中的iptables或者ipvs规则
kubectl: 命令行接口,用于对 Kubernetes 集群运行命令
cadvisor 监控容器的, 获取所有节点资源使用情况,并向master汇报
kube-dns或者coreDNS 负责整个集群的DNS服务. .
查看pod重启了,怎么排查
1.检测容器退出的原因和返回码,通过describe查看,有个exit pod就是返回码
退出代码 0:一般为容器正常退出
退出代码 1:由于容器中 pid 为 1 的进程错误而失败
退出代码 137:由于容器收到 SIGKILL 信号而失败(手动执行或“oom-killer” [OUT-OF-MEMORY])
退出代码 139:由于容器收到 SIGSEGV 信号而失败
退出代码 143:由于容器收到 SIGTERM 信号而失败
2.检查pod事件
健康检查等
3.查看pod中的容器日志
pod
ReplicaSet 等用户创建指定数量的pod副本数量,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能
deployment
service
ingress ingress只支持HTTP和HTTPS协议.7层负载均衡
secret 管理敏感类信息
configmap 管理敏感类信息
pv
pvc
clusterrole
role
daemonset 确保节点中运行指定的pod,如EFK
1.ingress
Ingress 是 k8s 的一种资源对象,核心就是nginx + traefik,(traefik其实就是用go语言写的用于负载均衡的程序).支持7层负载均衡该对象允许外部访问 k8s 服务, 通过创建规则集合来配置访问权限,这些规则定义了哪些入站连接可以访问哪些服务;Ingress 仅支持 HTTP 和 HTTPS 协议;ingress 可配置用于提供外部可访问的服务 url、负载均衡流量、SSL终端和提供虚拟主机名配置。
用户
2.ipvs
kube-proxy增加了ipvs,来实现4层负载,当用户发起请求时,通过DNS解析到IP,然后通过kube-proxy转给后端的pod
RUN
FRON
ADD
WORKDIR
COPY
ENV
flannel
数据从源容器中发出后,经由所在主机的docker0虚拟网卡转发到flannel0虚拟网卡
calico
1.在创建deployment资源的时候,他会启动rs( ReplicaSet) ,rs上有许多标签.rs来管理pod.在升级的时候,会再次启动一个rs.新的rs上会有原来的rs的标签.原来的rs干掉一个pod.同时会在新的rs上创建一个pod.服务就不会断开.
2.rc资源能保证指定数量的pod始终存活.但是rc资源在升级过程中会造成服务的暂时中断
prometheus可以对网络(网络性能:网络实时流量监控(网络延迟、访问量、成功率)和历史数据统计、汇总和历史数据分析 ;网络攻击:DDoS攻击监控 ;设备监控:路由器、防火墙、交换机等硬件设备监控),存储,服务器的CPU、内存、网络I/O、磁盘I/O等,对消息中间件(RabbitMQ、Kafka)、Web 服务中间件(Tomcat等)、缓存中间件(redis、memcached)、数据库中间件(mysql等)
什么是ingress:
ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上
ingress常用选型有nginx, Contour, Haproxy, trafik, Istio,APISIX,而k8s默认的使用的是nginx型ingress
nginx 在大多数环境还是很OK的,大多数还是采用的nginx作为ingress,但是在大型环境,nginx reload会耗时比较久.原理是: 通过api交互动态的去感知集群中ingress规则变化,并读取他的规则,生成nginx配置写入到pod中.然后reload生效.
trafik 它最大的优点是能够与常见的微服务系统直接整合,可以实现自动化动态配置
Istio disecar
1.pod不正常,看日志和describe
2.node是否有容忍的污点,describe node查看节点污点,如果有污点而pod没有相应的容忍,可能出现pending
3.node节点资源情况查看.
ES与关系数据库对比
ES 与关系型数据库的对比
在 ES 中,文档归属于一种 类型 (type) ,而这些类型存在于索引 (index) 中,类比传统关系型数据库
DB -> Databases -> Tables -> Rows -> Columns
关系型 数据库 表 行 列
ES -> Indices -> Types -> Documents -> Fields
ES 索引 类型 文档 域(字段)
搭建ES流程安装第一台 ES 服务器
1.设置主机名称和 ip 对应关系 192.168.4.11 node1
2.解决依赖关系 openjdk1.8
3.安装软件包 elasticsearch
4.修改配置文件 elasticsearch.yml
5.启动服务
6.检查服务 netstat -lutunp (9200 9300)
curl:htttp://192.168.4.1:9200/
ES 常用插件
head 插件:
它展现ES集群的拓扑结构,并且可以通过它来进行索引(Index)和节点(Node)级别的操作
它提供一组针对集群的查询API,并将结果以json和表格形式返回
它提供一些快捷菜单,用以展现集群的各种状态kopf 插件
是一个ElasticSearch的管理工具
它提供了对ES集群操作的API
bigdesk 插件
是elasticsearch的一个集群监控工具
可以通过它来查看es集群的各种状态,如:cpu、内存使用情况,索引数据、搜索情况,http连接数等
Redis主要有哪些功能?
1.哨兵(Sentinel)和复制(Replication)
Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制。
Sentinel可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能,Replication则是负责让一个Redis服务器可以配备多个备份的服务器。
Redis也是利用这两个功能来保证Redis的高可用的
2.事务
很多情况下我们需要一次执行不止一个命令,而且需要其同时成功或者失败。redis对事务的支持也是源自于这部分需求,即支持一次性按顺序执行多个命令的能力,并保证其原子性。
3.LUA脚本
在事务的基础上,如果我们需要在服务端一次性的执行更复杂的操作(包含一些逻辑判断),则lua就可以排上用场了
4.持久化
redis的持久化指的是redis会把内存的中的数据写入到硬盘中,在redis重新启动的时候加载这些数据,从而最大限度的降低缓存丢失带来的影响。
5.集群(Cluster)
单台服务器资源的总是有上限的,CPU资源和IO资源我们可以通过主从复制,进行读写分离,把一部分CPU和IO的压力转移到从服务器上,这也有点类似mysql数据库的主从同步。
在Redis官方的分布式方案出来之前,有twemproxy和codis两种方案,这两个方案总体上来说都是依赖proxy来进行分布式的。
Redis为什么是单线程的?
多线程处理会涉及到锁,而且多线程处理会涉及到线程切换而消耗CPU。因为CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存或者网络带宽。单线程无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来解决。
其它开源软件采用的模型
Nginx:多进程单线程模型
Memcached:单进程多线程模型
使用Redis的优势?
1.速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
2. 支持丰富数据类型,支持string,list,set,sorted set,hash
3.支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
4. 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
Redis有哪些适合的场景?
1)Session共享(单点登录)
2)页面缓存
3)队列
4)排行榜/计数器
5)发布/订阅
如何防止CC攻击,攻击原理,正在受攻击的你如何处理?
原理:CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。
CC攻击防御策略:(1).取消域名绑定 (2).域名欺骗解析 (3).更改Web端口 (4).IIS屏蔽IP
如何防止黑客攻击,保证服务器安全
1、选用安全的口令,口令应该包括大写字母,小写字母及数字,有特殊符号更好
2、定期分析系统日志
3、谨慎开放缺乏安全保障的应用和端口
4、实施文件和目录的控制权限。系统文件分配给管理员权限,网站内部文件可以分配匿名用户权限
5、不断完善服务器系统的安全性能,及时更新系统补丁
6、谨慎利用共享软件, 共享软件和免费软件中往往藏有后门及陷阱,如果要使用,那么一定要彻底地检测它们,如果不这样做,可能会损失惨重。
7、做好数据的备份工作,这是非常关键的一个步骤,有了完整的数据备份,才能在遭到攻击或系统出现故障时能迅速恢复系统和数据
8、禁用不必要启动的服务与定时任务
9、如非必要禁止SSH端口对外网开放,或者修改SSH默认端口并限制允许访问IP;
你用过哪些负载均衡设备?请写出LVS各个模式的特点和区别
硬件:F5、深信服等
应用:nginx、weblogic、lvs
lvs的模式:VS/NAT、VS/TUN和VS/DR
NAT模式:
①客户端发送请求到lvs。
②lvs根据指定的调度算法重写请求报⽂包的⽬标IP端⼝为某⼀个RS的RIP和端⼝并将请求转发给这个RS。
③RS处理请求,并将请求的响应返回给lvs。
④lvs将响应报⽂的源IP和端⼝还原成之前请求的⽬标地址和端⼝。
⑤lvs将修改后的响应报⽂返回给客户端。
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负
载均衡器那,速度就会变慢!
TUN模式:
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。
优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。
iptables四表五链
其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维
度。
4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。
filter:⼀般的过滤功能
nat:⽤于nat功能(端⼝映射,地址映射等)
mangle:⽤于对特定数据包的修改
raw:有限级最⾼,设置raw时⼀般是为了不再让iptables做数据包的链接跟踪处理,提⾼性能
5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。
PREROUTING:数据包进⼊路由表之前
INPUT:通过路由表后⽬的地为本机
FORWARDING:通过路由表后,⽬的地不为本机
OUTPUT:由本机产⽣,向外转发
POSTROUTIONG:发送到⽹卡接⼝之前。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。