@yangwenbo
2023-07-31T10:03:29.000000Z
字数 27609
阅读 508
面试笔记(技术)
共有3种模式:
1. 使用rsync在本地备份传输数据
2. 借助ssh通道在不同主机之间传输数据
3. 以socket进程的方式传输数据
rsync的流氓属性:我复制给你你所没有的文件,同时删除你有我没有的文件(保存两台服务器数据的完全同步)
端口号: 873
--bwlimit=rate
200个文件(10-100k)
- 首先服务端启动RPC服务,默认监听端口号:111
- 其次服务端启动NFS服务,并向RPC注册端口信息
- 客户端启动RPC服务,然后向服务端的RPC服务发送请求,索要NFS服务的端口号
- 服务端的RPC把NFS的端口号告诉客户端的RPC ,同时进行标记
- 客户端通过获得的端口号与NFS服务端进行连接
NFS服务本身不监听任何端口,服务端的rpc服务监听111端口,nfs服务向rpc服务进行端口注册,由rpc服务向客户端提供nfs连接端口
因为/etc/fstab会优先于网络被Linux系统加载。网络没启动时,执行fstab会导致无法连接NFS服务器端,从而无法实现开机挂载。
解决方法:
1. 开启开机自启动netfs服务,将挂载命令放入/etc/fstab里可以实现开机挂载
2. 将nfs客户端挂载命令放在/etc/rc.local中 。
答:createrepo
[test]
name=test
baseurl=file:///root/rpm/
gpgcheck=0
enabled=1
端口号:3306
mysqladmin -uroot password '密码';
create database yunjisuan;
drop database yunjisuan;
select user,host,password from mysql.user;
insert into 表名(字段1,字段2,…) values(‘字段1的值’,’字段2的值’…)
insert into yun.hou (user_name, password) values('zhangsan', password('123123'));
insert into yun.hou values('zhangsan', password('123123'));
update 表名 set 字段1=’字段1的值’, 字段2=’字段2的值’ where 条件表达式;
update yun.hou set user_name='wangwu', password=password('333333') where user_name='zhangsan';
delete from 表名 where 条件表达式;
delete from yun.hou where user_name='wangwu';
grant all on `*.*` to 'yunjisuan'@'192.168.200.%' identified by '333333';
flush privileges;
flush privileges;
show grants;
show grants for 'yunjisuan'@'192.168.200.%';
update mysql.user set password=password('666666') where host='192.168.200.%' && user='yunjisuan';
flush privileges;
就是一条语句执行的时间过长,会被记录答慢查询日志。
Long_query_time=5
Log-solw-queries=mysql_slow.log
- 普通索引
- 唯一索引
- 主键(特殊的唯一索引)
- 全文索引
- 单列索引与多列索引
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
show variables like '%autocommit%';
mysqldump -u账号 -p密码 --opt --all-databases > 文件路径
mysqldump -u账号 -p密码 --databases benet,yunjisuan > 文件路径
Relay-log=relay-bin
log-bin=mysql-bin
max_binlog_size=102400
flush logs;
- 不支持事物,功能单一
- 表级锁定,不支持并发读写
- 读的速度非常快,读写互斥
- 只缓存索引,不缓存数据
- 内存占用少,对服务器要求低
- 支持事物,支持4个事务隔离级别
- 行级锁定但是全表扫描仍然会是表级锁定,单表支持并发写,写支持好
- 读写阻塞与事务隔离级别相关
- 能缓存索引也能缓存数据
- 内存、CPU占用大,对服务器的要求比较高
准备工作:
- Master(主库):
- 开启binlog日志log-bin=mysql-bin
- 创建主从复制账号及密码
- 在主库的MySQL配置文件/etc/my.cnf中的[mysqld]模块中设置
Server-id = 1- Slave(从库):
- 关闭binlog日志,开启中继日志relay-log = relay-bin
- 告诉从库:主库IP地址和端口号、主从复制账号及密码、当前binlog日志名及在当前binlog日志中所处的位置
- 在从库的MySQL配置文件/etc/my.cnf中的[mysqld]模块中设置
Server-id = n (注:n不为1)- 开启从库start slave
原理:
- 在Slave服务器上执行start slave命令开启主从复制开关,开始进行主从复制
- 此时,Slave服务器的I/O线程会通过在Master上已经授权的复制用户权限请求连接Master服务器,并请求从指定binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送binlog日志内容。
- Master服务器接收到来自Slave服务器的I/O线程的请求后,其上负责复制的I/O线程会根据Slave服务器的I/O线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的I/O线程。返回的信息中除了binlog日志内容外,还有在Master服务器端记录的新的binlog文件名称,以及在新的binlog中的下一个指定更新位置。
- 当Slave服务器的I/O线程获取到Master服务器上I/O线程发送的日志内容,日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的Relay Log(即中继日志)文件(MySQL-relay-bin.xxxx)的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取Master端新binlog日志时能够告诉Master服务器从新binlog日志的指定文件及位置开始请求新的binlog日志内容。
- Slave服务器端的SQL线程会实时检测本地Relay Log中I/O线程新增加的日志内容,然后及时地把Relay Log文件中的内容解析成SQL语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这些SQL语句,并在relay-log.info中记录当前应用中继日志的文件名及位置点。
flush table with read lock;
unlock tables;
set global sql_slave_skip_counter=1;
在从库输入
show slave status\G;
看从库的信息
具体的参数second_behind——master=0
慢语句过多,优化慢速语句,还有就是主库的并发数太多,从库是一条一条的执行,优化建议升级到5.7以上。
每周一次全备,可以将之前的二进制日志删了,还有就是在配置文件里直接现在二进制日志的大小,让他不至于太大
mysql 5.6版本以后都变成了一个小库一个线程。
5.7开始变成了一组一组的解析。解决了主从复制延迟时间的问题
MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以独立部署在一台独立的机器上管理多个Master-Slave集群,也可以部署在一台Slave上。把主库master的binlog日志复制,当Master出现故障时,系统会找出relay-log日志最全的从库slave,然后将其relay-log同步到其它从库,提升此从库slave为新的主库,并让所有其余的从库重新指向新的主库,同时把复制出来的binlog日志放到新的主库中。
备份binlog日志,使用全备方式,只保留一个月的数据,超过一个月的数据删除
在每一个mysql服务器上加一个mha管理端
- 浏览器输入域名
- DNS进行域名解析,解析出IP地址
- 浏览器发起一个http协议请求
- web响应用户发的请求,发了一个响应包
- 用户浏览器解析http协议的响应包,出现了网站的具体内容
DNS递归查询:
- 系统先去自己的缓存查找,有没有要访问的IP
- 缓存里没找到,再找本地映射文件hosts
- 如没有就去找本地的LDNS,LDNS先查看自己的缓存记录
- 如没找到,LDNS再去找自己的映射文件
- 接着LDNS去找域名记录本,如果还LDNS找不到域名解析信息,就会请求外援进行迭代查询
迭代查询:
- LDNS会从DNS系统的(.)根服务器开始请求域名的解析,如www.baidu.com。DNS根
服务器先会把.com对应的DNS服务器地址返回给LDNS。- LDNS获取到.com对应的DNS服务器地址后,就会去.com服务器请求www.baidu.com域名的解析,.com服务器会把baidu.com对应的DNS服务器地址返回给LDNS
- LDNS再去baidu.com服务器请求www.baidu.com域名的解析,baidu.com服务器会反馈www.baidu.com对应的IP解析记录,如果此时没有,就表示企业的域名人员没有为www.baidu.com域名做解析,即网站还没架设好。
- LDNS把获取到的www.baidu.com对应的IP解析记录反馈给客户端浏览器,同时LDNS会进行解析记录。至此,整个DNS的解析流程就完成了。
80与443
- 200成功
- 301永久跳转
- 302暂时跳转
- 304拿的是缓存的
- 403权限拒绝
- 404找不到服务器
- 500服务器内部问题
- 502找不到路由
- 503服务器当前不可用
- 504响应超时
GET:读请求,明文。POST:写请求,加密传输。
静态网页(.htm、.html等常见后缀扩展名形式)是只能看,不能交换数据的网页,动态网页(.asp、.php、.js等形式作为后缀的)就是能交换数据,有数据库支持的网页。
伪静态网页就是将内存中临时生成的动态网页写入到硬盘中,当用户下次有相同的访问请求时,直接以静态网页的形式返回给用户。
前端:html、Css、安卓;后端:java、Python
uri:即统一资源标识符,表示页面的存储路径和资源的具体地址。
请求: URL,即网页地址,是Internet上用来描述信息资源的字符串。
报头:即http数据包头部,记录了访问用户和服务端的属性信息。
主体:网页内容,装载了返回给客户端的数据。
- ip是独立ip每个链接web服务器的ip地址。
- Pv是用户点击一次网页就记录一个pv。
- Uv是没个用户访问网页的时候都会发一个cookie,一个cookie是一个uv,有的就不记录,没有的就新发一个并记录一个uv
- Web服务;
- 反向代理负载均衡;
- 前端业务数据缓存服务
Apache是select同步阻塞模型,Nginx是epoll异步模型
- 阻塞:一个调用过程必须完成才返回。对于IO操作,如果IO没有准备好,读取或者写入等函数将一直等待。
- 非阻塞:一个调用过程会立即返回,无论结果怎样。对于IO操作,读取或者写入函数总会立即返回一个状态,要么读取成功,要么读取失败(没有数据或被信号中断等)。
- 同步阻塞:所有动作依次顺序执行。单线程可完成。
- 异步非阻塞:Callback模式,注册回调,等待其他线程利用回调执行后续处理。
一次数据传输完成后,服务器不是立即断开连接,而是会保持数据传输状态一段时间以等待新的数据,不需要进行tcp三次握手四次挥手,这个时间称为联络保持。可避免频繁的socket创建,节省服务器资源。
在域名的后面加上
default_server;
的字段
- 精确匹配(=)
- 特殊匹配(^~)
- 普通匹配(~*,~)
- 字符串
- 默认匹配(/)
- Nginx配置文件里没有配置默认首页参数,或者首页文件在站点目录下没有如下内容:
index index.php index.html index.htm;- 站点目录或内部的程序文件没有Nginx用户访问权限
- Nginx配置文件中设置了allow,deny等权限控制,导致客户端没有访问权限。
- return 403
服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源导致。
- 用户通过浏览器输入域名请求Nginx Web服务,如果请求是静态资源,则由Nginx解析返回给用户;
- 如果是动态请求(.php结尾),那么Nginx就会把它通过FastCGI接口发送给PHP引擎服务(FastCGI进程php-fpm)进行解析;
- 如果这个动态请求要读取数据库数据,那么PHP就会继续向后请求MySQL数据库,以读取需要的数据,并最终通过Nginx服务把获取的数据返回给用户。
FastCGI是一个可伸缩的,高速地在HTTP服务器和动态脚本语言间通信的接口,主要优点是把动态语言和HTTP服务器分离出来。
客户端:fastcgi-pass
服务端:php-fpm
9000
fastcgi_pass 127.0.0.1:9000;
- 集群中一个节点发生故障,导致整个集群服务停止叫做单点故障。
- 高可用:在集群中,任意一个节点出现故障,该节点上的所有任务会自动转移到其他正常的节点上,确保集群不受影响,主要预防单点故障发生。
- lvs四层负载均衡本质是完全转发
- nginx七层反向代理是代替用户重新发起请求
- 服务池的名字www_pools
- RS节点俩个,IP地址为:192.168.200.100 192.168.200.200
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream www_server {
server 192.168.200.100 weight=1;
server 192.168.200.200 weight=1;
}
server {
listen 80;
server_name www.yunjisuan.com;
location / {
proxy_pass http://www_server;
}
}
}
- 用户发送的请求是由nginx代理转发的,所以访问日志里的IP地址是nginx反向代理的IP;
- 反向代理的配置文件里的location里添加以下代码:
Proxy_set_header x-forwarded-for $remote_addr;
当用户访问域名时确实是携带了www.yunjisuan.com主机头请求Nginx反向代理服务器,但是反向代理向下面节点重新发起请求时,默认并没有在请求头里告诉节点服务器要找哪台虚拟主机,所以,Web节点服务器接收到请求后发现没有主机头信息,因此,就把节点服务器的第一个虚拟主机发给了反向代理了。解决这个问题的方法,就是当反向代理向后重新发起请求时,要携带主机头信息,以明确告诉节点服务器要找哪个虚拟主机。在Nginx代理www服务虚拟主机配置里增加如下一行配置
proxy_set_header host $host;
在代理向后端服务器发送的http请求头中加入host字段信息后,若后端服务器配置有多个虚拟主机,它就可以识别代理的是哪个虚拟主机。
就是验证的时候,是一个节点发的验证,回来的时候负载均衡可能会发给别的节点,连接不上就是会话保证不了,回来的时候能验证了就是会话保持。
Ip_hash cookie共享 session共享。
本质就是将别人的资源服务器的url写到自己的主页里,浏览器读图片的时候回去别人的资源服务器找资源
Nginxweb服务器接到用户请求,先去获取所请求数据中文字的信息和图片的URL,接着Nginxweb会根据之前获取的URL去存储服务器中把图片取出来返回给用户。
LVS有四种工作模式:NAT模式、TUN模式、DR模式、FULLNAT模式。
- NAT模式:LVS开始把用户请求包作DNAT转换为后方RS节点的IP,后来通过LVS把RS节点的响应包作SNAT转换发给网关。(两次经过LVS)
- FullNAT模式:请求数据包来回都经过LVS,并同时作DNAT和SNAT地址转换,不过来回经过的是不同的LVS负载均衡器。
- TUN模式:通过IP隧道技术在LVS转发数据包给后方节点时在数据包前边封装一个IP头部,响应包不经过LVS。(只经过一次LVS,并通过IP隧道技术给数据包加装IP头部)
- DR模式:通过修改请求数据包的目标Mac地址,将请求发给RS服务器,RS服务器响应包直接发给网关,而不经过LVS。(只经过一次LVS,通过修改数据包的Mac地址找后方节点)
LVS上有两块网卡,它后方的web节点在DR模式下也需要双网卡。
- 用户请求找到网关的公网IP,网关把请求数据包作DNAT地址转换成VIP;
- 网关通过ARP协议获取到LVS负载均衡器的MAC地址,把请求数据包转发到LVS负载均衡器上;
- 负载均衡服务器LVS根据调度算法选出一台RS服务器,通过ARP协议获取RS服务器的MAC地址,并将数据包发送给RS服务器。
- 需要在RS服务器的lo网卡上绑定VIP,同时抑制RS服务器对VIP做出ARP响应。
- RS服务器将用户的请求数据包处理后,把处理结果直接发给网关;
- 由网关返还数据包给用户
- 管理LVS负载均衡软件 高可用
- 实现对LVS集群节点健康检查功能
- 作为系统网络服务的高可用功能
vrrp 虚拟路由冗余协议,此协议的出现就是为了解决静态路由的单点问题,它利用IP多播的方式实现高可用之间的通信。
- Keepalived高可用服务之间的故障切换转移,是通过VRRP协议来实现的。
- 在Keepalived服务正常工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
- 备节点可以有多个,通过优先级竞选,但一般Keepalived系统运维工作中都是一对。
主节点:
1.守护进程脚本。当Nginx业务有问题时,就停掉本地的Keepalived服务,实现IP漂移到对端继续提供服务。此脚本的基本思想是若没有80端口存在,就停掉Keepalived服务实现释放本地的VIP。
2.可以使用Keepalived的配置文件参数触发写好的监测服务脚本。当停掉Nginx的时候,Keepalived 2秒钟内会被自动停掉,VIP被释放,由对端接管,这样就实现了即使服务宕机也会进行IP漂移,业务切换。
备节点:防脑裂脚本(如果可以ping通主节点并且备节点有VIP就报警)
因为同一局域网中,可能有多组keepalived高可用队。如果不用专门的心跳线,当有keepalived主机发生宕机时,备份服务器却还会收到同网段其他高可用主机发送的广播报,而不会启动接管程序,从而导致服务中止,所以必须要专门的心跳线进行连接,以避免出现上述情况。
- 操作系统环境:Squid可以运行在几乎所有的常见Unix及Linux系统上,也可以在Microsoft Windows上运行。尽管squid的Windows支持在不断改进,但在Unix及Linux系统上运行Squid依然是更简单,安全,更有效率,本章我们就使用Centos6.4 x86_64来运行Squid。
- 服务器硬件环境
- 第一重要资源:内存
squid对硬件的要求最主要的是内存资源。内存短缺会严重影响性能。因为所有的对象都会尽可能的被缓存到内存中,这样才能更快的提升用户的响应及返回数据。- 第二重要资源:磁盘
磁盘空间也是另一个squid能够高效运行的重要因素。更多的磁盘空间意味着更多的缓存目标和更高的命中率。快速的磁盘介质也是必要的。例如:用ssd,sas替代sata磁盘,除了使用过raid外,可以指定多个磁盘路径缓存。- 其他:磁盘与内存的关联
因为squid对每个缓存响应使用少数内存,因此在磁盘空间和内存要求之间有一定联系。基本规则是,每G磁盘空间需要32M内存。这样,512M内存的系统,能支持16G的磁盘缓存。你的情况当然会不同。内存需求依赖于如下事实:缓存目标大小,CPU体系(32位或64位),同时在线的用户数量,和你使用的特殊功能。
squid 作为反向代理服务器,通常工作在一个服务器集群的前端,在用户端看来,squid 服务器就是他说要访问的服务器,而实际意义上 squid 只是接受用户的请求,同时将用过户请求转发给内网真正的WEB服务器,如果 squid 本身有用户要访问的内容,则 squid 直接将数据返回给用户,起到了缓存数据的作用,减少了后端服务的压
8080
安全优化:
- 降权启动
- telnet管理端口保护
- ajp连接端口保护
- 禁用管理端口
性能优化:
- 屏蔽DNS查询
- Jvm调优
1.首先查找进程高的PID号(先找到是哪个PID号的进程导致的)
top –H
2.查看这个进程所有系统调用(再找到是哪个PID号的线程导致的)
strace -p 进程的PID
3.如果是Web应用,可以继续打印该线程的堆栈信息(找出有问题的代码块)
1)将有问题的线程的PID号转换成16进制格式
printf "%x\n" 线程的PID
2)过滤出有问题的线程的堆栈信息,找出问题代码块:
jstack 进程的PID | grep 线程PID号的十六进制格式 -A 30
catalina.out
DevOps是一组过程、方法和系统的统称,用于促进软件开发(应用程序/软件工程)、技术运营和质量保证(QA)部门之间的沟通、协作和整合。
CI/CD流水线指的是DevOps自动化的一个持续构建、持续部署和持续交付的流程。
持续集成(CI) : 代码合并、 构建、 部署、 测试都在一起, 不断地执行这个过程, 并对结果反馈。
持续部署(CD) : 部署到测试、 生产环境。
持续交付(CD) : 部署到生产环境, 给用户使用。
- 开发上传代码到svn服务器
- jenkins抓取到svn服务器中新上传的代码 通过jenkins+ansible roles标准化构建测试服务器,并将新代码发送到测试服务器
- 测试人员在测试服务器上进行测试并将测试结果反馈给开发
看时间生成情况,如果就是简单的几台就可有可无,效果差不多,如果是多台服务就就必须要ansible来管理了,要不会消耗大量的时间
jenkins+svn 通过命令进行,自动上线,代码更新,只能用于少量服务器代码更新,不能更改测试环境
jenkins+svn+ansible 可以根据ansible选用脚本进行批量代码更新,可以部署测试环境
3690
kvm是硬件虚拟化,docker是软件虚拟化。kvm的资源占用高,docker资源占用少,kvm的安全级别较高,有防火墙防护,docker是程序级别的,容器与容器之间没有防火墙防护
- Docker Client 客户端
- Docker Daemon 守护进程
- Docker Image 镜像
- Docker Container 容器
- 隔离环境(系统,网络,文件系统)与应用
- 解决依赖与版本问题
- 易于分发,开箱即用
- 节点与容器快速扩容
- 镜像制作简单便捷,管理方便
#建立镜像
docker build -t su/centos7:1 . (注意需要在有Dockerfile的目录里输入命令)
#启动容器
docker run -dit su/centos7:1 /bin/bash(可以加/bin/bash,也可以不加)
docker run -dit --name sunan su/centos7:1 (启动的时候给容器器个名字叫sunan)
-d :放在后台运行
-i:可以交互输入命令
-t:启动一个伪终端
-c:指定几个cpu来运行内存
-m:指定几个内容。
隐形参数--name 给容器起名。
#看容器的日志
docker logs sunan(可以是名字,也可以是id)
#看启动的容器
docker ps -a(加a是看所有)
#开始运行容器
docker start xxx(可以是容器的名字,也可以是容器的id)
#重启一个容器
docker restart xxx(可以是容器的名字,也可以是id)
#停止运行容器时的输出容器的资源使用状况
docker stats xxx --no-stream(容器的名字或者id,类似top命令)
加参数--no-stream是只输出一次就可
docker stop xxx(可以是容器的名字,也可以是容器的id)
#切进容器的命令
docker attach xxx(可以是容器的名字,也可以是容器的id)
exit是退出容器
#杀容器
docker kill xxx (容器的名字,或者容器的id,直接删掉容器的进程,使其处于停止。)
#删除容器
docker rm xxx(容器的名字,或者容器的id,必须先停止容器以后才能删,)
-f 强删
#删除镜像
docker rmi xxx (容器的名字,或者容器的id)
-f强删
将一个更改过的容器封装成一给性的镜像(先进去一个容器,搭建个项目,退出从封装)
docker commit xxx(原来的容器,更改过的) xxx/xxx(新的镜像叫什么名字)
#不进容器,直接发布命令
docker exec (-dit) xxx(容器的名字,或者id) ls /(想要执行的命令)
参数
-dit直接可以切进去
#容器和属主机直接的复制文件命令
docker cp /tmp/dockerfile(文件的路径)xxx:/tmp(容器的名字或者ip,冒号后面是地址)(也是吧什么复制到哪里的格式)
#创建一个新的容器,
docker create -it xxx(镜像的名字或者id)(用法跟run一样,只是create不启动容器,想要启动还需要用start命令启动下)
#查看容器进程与源镜像做对比看哪里不一样
docker diff xxx(容器的名字或者id)
返回的结果C是多了什么
A是少了什么
#监控容器的变化
docker events
#导出容器
docker export xxx(容器的名字或者id) > yyyy.tar(导出来的容器叫什么名字)
#将导出的容器创建为一个镜像
docker import yyy.tar(导出来的容器的名字)zzz(导入要创建的镜像叫什么名字)
#查看镜像的历史记录
docker history xxx (镜像的名字或者id)
#查看镜像的详细信息
docker inspect xxx(镜像的民族或者id)
#导出镜像
docker save xxx(要导出的镜像的名字或者id) > yyy.tar(导出来叫什么明教)
#导入镜像
docker load < yyy.tar (需要导入的镜像的名字。有相同的镜像是不让导入的)
#暂停容器的命令(unpause是回复暂停的容器)
docker pause xxx(容器的名字或者id)
#查看容器的端口映射协议
docker port xxx(容器的名字或者id)
#想要在启动的时候添加容器的映射端口
docker run -dit --name xx -p 80:80 yy(xx容器起名叫,80:80将属主机的80端口映射到容器里的80端口,yy要启动的镜像的名字)
#给容器改名
docker rename xxx yyy(xxx原来的名字,yyy想要叫的名字)
#用于克隆镜像的
docker tag xxx xxx1(将什么,克隆成什么,可以当场软连接,要删一起删)
#调整启动以后的容器的cpu和内存
docker update -c 2 xxx(需要调整的)
-c调整cpu
-m调整内存。需要多少直接在后边写就可以了
#监控容器的的退出状态
docker wait xxx(容器的名字或者id)
#创建一个自定义网路
docker network creat lnmp (创建个自定义网路叫lnmp)
#查看docker网络
docker network ls查看所有网桥网路
brctl show同上
login用于登陆docker hub官方公有的仓库
logout用于登出官方公有的仓库
push将本地的镜像提交到docker hub
答:在启动run的时候参数-c限制cpu,-m限制内存
docker update -c 2 xxx
(需要调整的)
-c调整cpu
-m调整内存。需要多少直接在后边写就可以了
Pollers进程开启用于ZabbixAgent的被动模式,主动收集agent端数据的进程;
Trappers进程用于ZabbixAgent的主动模式,负责处理agent端推送过来的数据。
- Zabbix-agent主动模式:是Agent端主动把数据推送给Server端,Server端通过端口来接收数据;
- Zabbix-agent被动模式是Zabbixserver端主动找Agent端要数据,这种模式对Server端的压力非常大。
Zabbix-agent默认是被动模式,可以在配置主机监控项中的类型设置里进行修改。/etc/zabbix/zabbix_agent.conf
- Agent监控模式:主要监控操作系统和软件服务的
- SNMP监控模式:主要监控网络设备,例如路由器,交换机
- JMX监控模式: 主要监控类似Tomcat的Java容器式的服务
- IPMI监控模式:主要监控服务器硬件设备的,例如cpu ,mem,radio
通过监控项设置中的数据更新时间来设置,一般不低于60s,在工作中通常设为90s,在特殊时间内可设置不同的监控频率,空闲时间一般为300s。
通过配置-动作-创建动作-操作-默认持续步骤持续时间来设置。一般最少设为60s,即每分钟进行发送。同时在操作细节中设定发送次数,即每分钟发送次数,一般设为3次。
在sever端开启Java pollers,在Zabbix_java中开启java_gateway
Java_gateway用来接收Tomcat JMX提供的数据,并把数据给到server。
监听端口为:10052
server默认的是10051,agent默认的是10050
主要用来接收Java_gateway收集的数据。
- 易于管理
- 监控服务的内部运行状态
- 时间序列(time series)
- 强大的数据模型
- 强大的查询语言PromQL
- 高效
- 可扩展(支持集群)
- 易于集成
- 可视化
- 开放性
- 学习成本大,尤其是其独有的数学命令行,学习起来很吃力;
- 对磁盘资源也是耗费的较大,这个具体要看监控的集群量和监控项的多少和保存时间的长短;
- 有网友称在1.x版本中可能会发生数据丢失的风险,因此生产环境中建议大家使用较新的2.x发行版;
- 数据模型和查询语言:Zabbix使用关系型数据库来存储数据,Prometheus采用的是TSDB的时间序列数据库。TSDB使用一种称为WAL的写前日志,以确保数据的可靠性。Prometheus是支持外部数据库存储的。
- 自动化和配置管理:Prometheus具有自动化和自动配置的能力,它可以自动发现服务和指标,并对它们进行监控。Zabbix也提供了类似的功能,但需要手动配置。
- 可视化和警报:Zabbix和Prometheus都支持可视化和警报功能。Zabbix提供了一个基于Web的前端界面,可以查看监控数据和设置警报。Prometheus通常与Grafana等工具一起使用,以实现更高级的可视化和警报功能。
- 性能和扩展性:Prometheus在性能和扩展性方面表现良好,能够处理大规模的时间序列数据。Zabbix也具有良好的性能和扩展性,但在大规模监控方面可能需要更多的资源和配置。
- zabbix 更加适合用于 本地计算机 的监控,而 Prometheus 更适合在现在流行的 云计算 监控上使用。
- svn是集中式版本,所有的人都下载同一个版本去更新
git是分布式的,安全性高,可以拥有自己想要的分支管理- svn集中式版本系统不但速度慢,而且必须联网才能使用
git不仅仅是个版本系统,它也是个内容管理系统,工作管理系统等- git把内容按元数据方式存储
svn是按文件,所有资源控制系统都是把文件的源信息隐藏在一个类似svn.cvs等文件夹里- 分支在svn中一点不特别,就是版本库中的另外的一个目录
git没有一个全局的版本号,而svn有,目前为止svn相比git缺少的最大的特征- git内容完整性要优于svn:git的内容储存使用的是哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障时和网络问题是降低对版本库的破环
工作区是开发人员在工作的目录,暂存区,可以理解为内存,本地仓库是将内存的代码,写到磁盘上,远程仓库代表是将磁盘的同步到网上
git fetch
是只将内容拉取下来,- 在用
git merge
将版本内容合并到本地。git pull
是一步到位直接拉取和合并
提示:
git reflog
与git log --pretty=oneline
答:用git reflog 查看所有的历史id编码
在用git reset --hard
加id编码直接回滚
冲突了以后,git会给出提示,我们打开冲突的文件,将冲突的2选一,删除一个
有5种guest访客
- 只能发表评论,不能读写
reporter报告者- 只能克隆,不能提交代码,产品测试用的
developer开发人员- 可以进行代码的读写,普通程序员用的
master主程序员- 可以添加项目成员,添加标签,创建和保护分支产品经理用的
owner所有者- 有所有的权限,一般不用
- 备份命令:
gitlab-rake gitlab:backup:create
- 恢复命令:
gitlab-rake gitlab:backup:restore BACKUP=备份文件编号
git --bare init
先在Jenkins web上建立一个流水线,流水线里需要配置的有参数化构建,在流水线选项里选择是自己写配置脚本还是从服务器里取配置,如果从服务器拉取的话,需要先在服务器上写配置脚本,然后上传到git仓库,在告诉流水线配置,脚本在哪里放置,同时还有配置Jenkins到git的免秘钥,和登陆节点服务器的密码,在配置之前需要告诉Jenkins工具git,java,maven在哪里,指定工作目录
先在Jenkins web上建立一个流水线,流水线里需要配置的有参数化构建,在流水线选项里选择是自己写配置脚本还是从服务器里取配置,如果从服务器拉取的话,需要先在服务器上写配置脚本,然后上传到git仓库,在告诉流水线配置,脚本在哪里放置,同时还有配置Jenkins到git的免秘钥,和登陆节点服务器的密码,在配置之前需要告诉Jenkins工具git,java,maven在哪里,指定工作目录
网络带宽限制、小文件存储
gluster volume add-brick
因为磁盘布局结构是静态的,当新的bricks(存储块)加入现有卷,新创建的文件会分布到旧的bricks中,所以需要平衡布局结构,使新加入的bricks生效。
gluster volume rebalance
24007:24011
49152:49162
- IP访问授权
- 条带大小
- 请求等待时间
- 关闭NFS服务
- 剩余磁盘空间阈值
- 读缓存大小
- 客户端等待时间
- IO线程数
- 缓存校验周期
cpu,内存,主机存活,磁盘空间,并发数,系统load,主机运行时间
配置一台和原Glueterfs故障机一样配置的服务器(包括硬盘数量、硬盘大小、安装的系统,配置的IP),安装gluster软件,并修改uuid号为原Glueterfs节点的uuid,然后复制这个UUID给新的服务器
/var/lib/glusterd/glusterd.info
,最后添加新服务器中到集群中代替原Glueterfs节点gluster volume heal gs2 full
6379
启动文件个数,tcp连接数,和ocm开启,巨大化页面缓存关闭
rdb和aof数据流
config set 加config rewrite
keys * ,flushdb flushall
redis-cli slaveof no one
用到一个pip安装的工具rdbtools,先将文件导出
rdb -c memory /data/redis/dump.rdb > /root/memory.csv
,然后用命令抓取数据进行分析cat /root/memory.csv | tr ',' ''| sort -k4rn| head
- Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
- Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
- Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
- redis特性,对小文件支持极高,效率极快,对大文件支持极低,所以我们要关闭内核的大文件缓存,redis是典型的单线程异步模型。
/etc/crontab/var/log/secure /var/log/messages
在配置文件里http段内添加
server_tokens off;
两种方法
1. 在配置文件里添加一下代码
user nginx nginx;
2.直接编译的时候指定用户和组
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
worker_processes 1;
几核就修改成几命令如何通过命令调整到不同的进程或服务到不同的cpu上,让资源平均使用cpu?
worker_cpu_affinity 0001 0010 0100 1000;
Nginx epoll 和Apache select的区别?
在events模块里添加代码 use epoll
;
并发的概念,你的公司网站并发是多大,ip,pv多大?
worker_connections 20480;
特别提醒:配置参不是越大越好,最好设置到服务器承受的极限点
worker_rlimit_nofile 65535;
sendfile on;
keepalive_timeout 60;
client_header_timeout 15;
client_body_timeout 15;
send_timeout 25;
client_max_body_size 8m;
fastcgi_connect_timeout 240; #Nginx允许fcgi连接超时时间
fastcgi_send_timeout 240; #Nginx允许fcgi返回数据的超时时间
fastcgi_read_timeout 240; #Nginx读取fcgi响应信息的超时时间
fastcgi_buffer_size 64k; #Nginx读取响应信息的缓冲区大小
fastcgi_buffers 4 64k; #指定Nginx缓冲区的数量和大小
fastcgi_busy_buffers_size 128k; #当系统繁忙时buffer的大小
fastcgi_temp_file_write_size 128k; #Nginx临时文件的大小
fastcgi_temp_path /data/ngx_fcgi_tmp; #指定Nginx临时文件放置路径
在location里添加expires 3650d;
d是天,表示缓存3650天
gzip on; #开启gzip压缩功能
gzip_min_length 1k; #容许压缩页面的最小字节
gzip_buffers 4 16K; #缓冲4块,单位16k
gzip_http_version 1.1; #压缩版本
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型
gzip_vary on; #vary header支持。该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用Squid缓存经过Nginx压缩的数据。
依次修改3个Nginx源码文件
/usr/src/nginx-1.6.2/src/core/ nginx.h
nginx-1.6.3/src/http/ngx_http_header_filter_module.c
nginx-1.6.3/src/http/nginx_http_special_response.c
第二步是修改后编辑软件,使其生效
日志切割,不记录指定元素日志,最小化日志目录权限
限制上传到资源目录的程序被访问,防止木马入侵
适合内部使用的网址,例如phpmyadmin
robot协议,根据HTTP_USER_AGENT进行控制
单ip并发连接的控制,与连接效率控制
利用webbench压力测试一个网站,
适合内部机密网址