运维面试经验

以下很多东西都是来自网上的分享,我这里整理以下。我觉得对一些运维来说还是非常有用

1.技术需求

apache,nginx,squid,bind,ftp,php,hippop,postfix,jboss,tomcat等

svn,git

mfs(shadow-mfs),fastdfs,glusterfs

lvs,haproxy,keepalived

redis,monogodb,memcached,varnish

shell,python(jinja2,mako,tornado,django),perl,ruby

ansible,puppet,salt

xen,kvm,exsi

lxc,docker,zerovm,vagrant

cloudstack,openstack

oracle,mysql,postgressql

hadoop,hbase,hive

devops,运维2.0

couchbase,rabbimq,erlang,zookeeper,kafaka,0mq,Cassandra

java/C/C++/go

2.技术总结

mysql

工具

mysqlreport,profile,mysqldiff,pt-heartbeat

pt-table-checksum,pt-table-sync,pt-kill

命令

show processlist

show global status

show global variables

show master status

show slave status

show binary logs

show engine innodb status\G

show engine myisam status\G

查看information_schema

show status和应用特点了解各种SQL的执行频率

使用脚本检测  tuning-primer.sh

SLOW QUERIES

BINARY UPDATE LOG

WORKER THREADS

MAX CONNECTIONS

INNODB STATUS

MEMORY USAGE

KEY BUFFER

QUERY CACHE

SORT OPERATIONS

JOINS

OPEN FILES LIMIT

TABLE CACHE

TEMP TABLES

TABLE SCANS

TABLE LOCKING

或者

执行下面的SQL语句查看适合的参数值. (如果有很多表,可能耗时几分钟.)

SELECT  ENGINE,  

        ROUND(SUM(data_length) /1024/1024, 1) AS "Data MB",  

        ROUND(SUM(index_length)/1024/1024, 1) AS "Index MB",  

        ROUND(SUM(data_length + index_length)/1024/1024, 1) AS "Total MB",  

        COUNT(*) "Num Tables"  

    FROM  INFORMATION_SCHEMA.TABLES  

    WHERE  table_schema not in ("information_schema", "performance_schema")  

    GROUP BY  ENGINE;  

调优

淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气

除了用上面的脚本检测你配置参数,还有一下东西会限制数据库的性能

30% + 70%

cpu

当CPU需要的数据超出CPU缓存,主缓存带宽就成为内存的一个瓶颈

io

首先你可以通过命令查询你数据库写入和读写次数,就可以知道是否写压力很大

可以用的一些办法

读写分离,分业务入库,分库分表,/dev/shm,多个磁盘并行读写,使用缓存,比如memcached

如果你的MySQL是主-从结构,可以考虑打开其中一台从服务器的慢查询日志,这样既可以监控慢查询,对系统性能影响又小

线程池和NUMA

thread_handling                 = pool-of-threads

######NUMA #########################

innodb_buffer_pool_populate     = 1

大内存分页(huge pages)

启用 Huge pages

通知操作系统分配适当的数量(和 buffer_pool 个数一致) 

通知MySQL使用huge pages

内存

cat /proc/sys/vm/swappiness 不能设置过低

一些特别注意的参数

max_statement_time    = 1000 #自动杀死超过1s的慢sql,PerconaDB5.6支持,不建议使用

线程池,在高并发高负载情况下表现出出色的数据库性能

query_cache_type = off

query_cache_size = 0

#这两项是禁用缓存,这个使服务器用途而定:写比较多的数据库最好禁用,因为没写一次他要修改缓存中的数据,给数据库带来额外的开销,读比较的可以开启,可以提高查询效率

#一下4个参数是mysql5.6上的新特性

innodb_buffer_pool_dump_at_shutdown = 1 #解释:在关闭时把热数据dump到本地磁盘。

innodb_buffer_pool_dump_now = 1 #解释:采用手工方式把热数据dump到本地磁盘。

innodb_buffer_pool_load_at_startup = 1 #解释:在启动时把热数据加载到内存。

innodb_buffer_pool_load_now = 1 #解释:采用手工方式把热数据加载到内存。

innodb_io_capacity = 20000#根据硬盘的情况修改,stat的用100,sas的200,sas做riad10的为400fision-io的可以设置为20000

innodb_flush_neighbors ―― 默认值为 1. 在SSD存储上应设置为0(禁用) ,因为使用顺序IO没有任何性能收益. 在使用RAID的某些硬件上也应该禁用此设置,因为逻辑上连续的块在物理磁盘上并不能保证也是连续的.

innodb_io_capacity and innodb_io_capacity_max ―― 这些设置会影响InnoDB每秒在后台执行多少操作. 如果你深度了解硬件性能(如每秒可以执行多少次IO操作),则使用这些功能是很可取的,而不是让它闲着

innodb_lru_scan_depth - 默认值为 1024. 这是mysql 5.6中引入的一个新选项. Mark Callaghan  提供了 一些配置建议. 简单来说,如果增大了 innodb_io_capacity 值, 应该同时增加 innodb_lru_scan_depth

performance_schema_max_table_instances=600

table_definition_cache=400

#log-queries-not-using-indexes#这个参数不安全

#relay_log_recovery=1#这个参数在丛库上一定要加上

innodb_buffer_pool_instances - 在 MySQL 5.5, 设置它为 4, 在 MySQL 5.6 �C 设置它为 8 或者甚至是 16

thread_cache_size=4 这个值似乎会影响show global status输出中Threads_created per Connection的hit rate

innodb_read_io_threads, innodb_write_io_threads

innodb_old_blocks_time = 1000 - 这个可以帮助你防止 由于偶尔的 scans 造成的 buffer pool 污染

skip-locking  避免MySQL的外部锁定,减少出错几率增强稳定性

tmpdir - 有时候指定 tmpdir 为 /dev/shm 是一个好注意,以至于 on-disk temporary 表实际是写入内存中,但是在 MySQL 5.5 有一个重要的警告:如果你这样做了,它禁用了 AIO acorss the board,因为 tmpfs 不支持 AIO。因此我将监控在当前 tmpdir(/tmp) 的活跃性,并且如果我发现它有问题的时候,切换到 /dev/shm

back_log = 384  系统在一个短时间内有很多连接,则需要增大该参数的值

max_connections = 1000,那大概就需要 200 MB,或者更多. 同时连接数太大可能会引起其他某些问题,这点需要注意. Max_used_connections / max_connections   * 100% ≈ 85%

在5.6(或 MariaDB5.5)中,可以选择线程池与 max_connections 交互. 这是一个高级话题. 

线程栈溢出很少出现. 如果确实发生了,可以设置: thread_stack = 256K

innodb_file_per_table=1  表会增大

innodb_flush_method = O_DIRECT  直接写入磁盘,sync

对于事务型的应用,通过Com_commit和Com_rollback可以了解事务提交和回滚的情况,对于回滚操作非常频繁的数据库,可能意味着应用编写存在问题

Slow_queries 慢查询的次数,定位执行效率较低的SQL语句


数据库设置concurrent_insert直接从表尾并发插入,这样可以有效降低大量注册与登录的锁竞争

query_cache_size由于查询缓存的互斥竞争

要想合理利用Innodb 的行级锁定,做到扬长避短,我们必须做好以下工作:

a) 尽可能让所有的数据检索都通过索引来完成,从而避免Innodb 因为无法通过索引键加锁而升级为表级锁定;

b) 合理设计索引,让Innodb 在索引键上面加锁的时候尽可能准确,尽可能的缩小锁定范围,避免造成不必要的锁定而影响其他Query 的执行;

c) 尽可能减少基于范围的数据检索过滤条件,避免因为间隙锁带来的负面影响而锁定了不该锁定的记录;

d) 尽量控制事务的大小,减少锁定的资源量和锁定时间长度;

e) 在业务环境允许的情况下,尽量使用较低级别的事务隔离,以减少MySQL 因为实现事务隔离级别所带来的附加成本;

由于Innodb 的行级锁定和事务性,所以肯定会产生死锁,下面是一些比较常用的减少死锁产生概率的的小建议,读者朋友可以根据各自的业务特点针对性的尝试:

a) 类似业务模块中,尽可能按照相同的访问顺序来访问,防止产生死锁;

b) 在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;

c) 对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;

系统锁定争用情况查询

对于两种锁定级别,MySQL 内部有两组专门的状态变量记录系统内部锁资源争用情况

MySQL提供了几个语句调节符,允许你修改它的调度策略:

・ LOW_PRIORITY关键字应用于DELETE、INSERT、LOAD DATA、REPLACE和UPDATE。

・ HIGH_PRIORITY关键字应用于SELECT和INSERT语句。

・ DELAYED关键字应用于INSERT和REPLACE语句

分区or分片

如果你已经通过 date 来 partitions,实际上是 subpartitions

我将鼓励你尝试分片(如果你还没有使用分片)或者是通过 BASH subpartitions,正如我们在 partitioning in some cases can increase the throughput of InnoDB 发现的那样

依然没有得到足够的 new values per second (并且这不是你的硬件限制)。尝试通过 hash partitioning 或 subpartitioning 表的 key

分库分表

那么分库分表多少合适呢? 

经测试在单表1000万条记录一下,写入读取性能是比较好的. 这样在留点buffer,那么单表全是数据字型的保持在 

800万条记录以下, 有字符型的单表保持在500万以下. 

如果按 100库100表来规划,如用户业务: 

500万*100*100 = 50000000万 = 5000亿记录. 

sql优化

show explain

1.少作计算

2.少join  优化器效率低,join复杂性能低

3.少排序  索引,减少排序的记录条数,非必要不对数据进行排序

4.不要select *

5.用join代替子查询

6.少 or  用union all 或者union代替

7.尽量用 union all 代替 union

8.早过滤

9.避免类型转换

10.优先优化高并发的 SQL,而不是执行频率低某些“大”SQL

11.从全局出发优化,而不是片面调整  不能顾此失彼,因小失大

12.尽可能对每一条运行在数据库中的SQL进行 explain

13.内存排序

14.增加索引

列出几篇参考文章

MySQL查询优化器--逻辑查询优化技术(一)--视图重写 

一个20秒SQL慢查询优化的经历与处理方案

生产环境高并发MySQL SQL语句优化10条案例

MySQL 性能优化的最佳20多条经验分享

10 MySQL settings to tune after installation

关于MYSQL的优化全面详解

阿里巴巴MySQL DBA面试题

中间件

atlas,mycat,oneproxy,myproxy,amoeba

主从

先差主从数据库表结构是否一致mysqldiff

不停止MySQL服务增加从库

Seconds_Behind_Master 为 0,不代表主从数据一致,原因是从不会主动去主上同步数据

预防:正确设置 --master-retry-count,--master-connect-retry,--slave-net-timeout 复制重试参数

半同步复制

5.7的新特性

如何缓解主写的压力

1.硬件,xfs,ssd,内核deadline

2.采用MariaDB发行版,它实现了相对真正意义上的并行复制,其效果远比ORACLE MySQL好的很多。在我的场景中,采用MariaDB作为slave的实例,几乎总是能及时跟上master。如果不想用这个版本的话,那就老实等待官方5.7大版本发布吧

3.一般而言,slave相对master延迟较大,其根本原因就是slave上的复制线程没办法真正做到并发

4.ORACLE MySQL 5.6版本开始支持多线程复制,配置选项 slave_parallel_workers 即可实现在slave上多线程并发复制。不过,它只能支持一个实例下多个 database 间的并发复制,并不能真正做到多表并发复制。因此在较大并发负载时,slave还是没有办法及时追上master

5.调整业务

6.将统计分析类型的SQL语句在单独的BI数据库服务器上做查询,不要在主库和从库上,因为这种类型的SQL都比较复杂,执行的时间也很长

7.pt-kill部署线上环境,定义5-10秒,杀死耗时很长的SQL,这样在读写分离时,从库不会因为一条SQL卡在那里,出现延迟

测试读写分离

tcpdump -i eth0 -s0 -nn -A tcp dst port 3306 and dst host 192.168.18.202

tcpdump  -i eth0 -s0 -nn -A tcp  dst port 3306 and dst host 192.168.18.1

tcpdump  -i eth0 -s0 -nn -A tcp  dst port 3306 and dst host 192.168.18.2

高可用分案,比较靠谱的

mmm,mha,mysql cluster(限制为ndb引擎)

MySQL 高可用架构在业务层面的分析研究

Mysql Fabric HA配置测试

双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

mysql基于RHCS、Gtid主从复制的高性能、LB、HA集群架构

探索MySQL高可用架构之MHA

Mysql中间件代理 Atlas

再谈Mysql MHA

利用MariaDB Galera Cluster(无引擎限制)实现mariadb的多主复制

使用haproxy+keepalived来实现mariadb galera cluster的高可用架构

推荐的书

《MySQL高性能》第三版

数据库的回滚

以上参考hcymysql和其他作者的博文

任何发生于数据库上的操作一定要三思而后回车,血的教训数不胜数,所以验证无误的固定操作,用脚本来实现是个不错的选择

最后就是有的公司选择PostgreSQL,不用mysql,说PostgreSQL比mysql性能好

2.shell

多写,即使你照着别人的敲都行,可以学到很多,比如数组

比如常用的

nc -w2 -z 192.168.28.$i 80 

curl -I -H “Host:www.XXX.com” -o /dev/null -s -w “%{http_code}\n

3.性能调优

1.基本调优原则

不要让资源争用,比如进程竞争

优化方向是不是错了

2.基本判断

网卡

高并发、大流量网卡调优

cpu

in,cs,r

io

r/s+w/s数量

svctm<20ms,不是磁盘性能的问题

await一般系统IO响应时间应低于5ms,如果大于10ms就比较大了(有的说大于15)

raid卡加大缓存

内核修改为 deadline 调度模式

echo deadline > /sys/block/sda/queue/scheduler

修改完这个后 还需要修改 deadline的一些参数 什么 write_expire 跟  read_expire

好像网上的建议 是 read_expire = 1/2 write_expire

ext3  data=writeback 方式

barrier=0  (前面已经采用witeback  得关闭这个 )

改下磁盘的IO调度 算法

cat /sys/block/sda/queue/scheduler (查看 sda盘的算法) 有 noop(fifo), as, cfq 这3种

noop多用于SAN/RAID存储系统

as多用于大文件顺序读写

cfq适于桌面应用

如果使用ats,那么上面调优参数很多没用的。

关闭ext3 日志记录功能(来着网上 线上未测试)

tune2fs -O^has_journal /dev/sdb1

磁盘预读  (线上未测试)

blockdev �Csetra 256 /dev/sdb   256为sectors

碎片化IO是否可以缓存批量读写,需要频繁读入的文件可以考虑放入/dev/shm

bi,bo

内存

修改swappiness  值(默认为60)

3.缓存

4.网络和内核优化

netstat -nat发现诸如TIME_WAIT过多,连接数不够用,连接数一直上不来,打开文件数过多等,通过修改/etc/sysctl.conf优化、该apache/nginx配置优化,修改TCP buffer,backlog等

net.core.netdev_max_backlog

5.connect sock连接时间,具体的tcp连接时间

例子 记一次tps提升,做的配置变更

故障排除

从下到上 ping,route,ss,iftop,ifstat,nethogs,mpstat,tsar,iotop,lsof,starce,xhprof,gdb

集群情况

日志跟踪

网络转包-->tcpdump

应用程序的性能,处理能力,缓存命中率,tcp的复用,连接池的使用

例子 OOM killer


一些web缓存相关的概念.cache-control expires no-cache no-store maxage

nginx

1.

server {

        listen  80 default;

        server_name _;

        return  403;

}

2.location / {  

            root   /var/www/w1;  

            index  index.html index.htm;  

            autoindex on;        #开启自动index功能,在没有index文件时,自动显示目录  

            autoindex_exact_size on   #让nginx设置按照什么单位显示目录大小  

        }

3.开启nginx的gzip功能

gzip  on;   开启gzip压缩的功能  

    gzip_buffers 32 4k;   设置系统的缓存大小,以存储GZIP压缩结果的数据流,它可以避免nginx频烦向系统申请压缩空间大小  

    gzip_comp_level 1;  压缩级别为1  

    gzip_min_length 1024; 最小长度为1K字节数  

    gzip_types text/html text/css application/xml;   压缩的类型 

4.实现nginx本地浏览器缓存

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  

   {  

    expires 30d;  

    }  

 

   location ~.*\.(js|css)?$  

   {  

    expires 1h;  

   } 


模块

nginx_tcp_proxy_module代理sshd服务

GeoIP,http_realip_module,Lua,mod_security,nginx-upstream-jvm-route

nginx_substitutions_filter

ngx_http_limit_conn_module

ngx_http_limit_req_module

ngx_http_upstream_module

sticky

tfs

nginx_flv

nginx_moglifes

nginx_upstream_check_module

http://wiki.nginx.org/3rdPartyModules

http://rmingwang.com/install-nginx-third-modules-http_sub_module.html

open files数量优化

Worker Processes数量优化

CPU Affinity

Keep Alive

tcp_nodelay 和 tcp_nopush优化

Buffers size优化

fastcgi_buffers,proxy_buffers 处理后端(PHP,Apache)响应

nginx的gzip模块

client_header_buffer_size 4k;   分页大小可以用命令getconf PAGESIZE

nginx事件驱动适合于IO密集型服务


nginx安全加固

1、屏蔽IP

if ( $geoip_country_code !~  ^(CN|US)$ ) {

        return 403;

}

2、封杀各种user-agent

if ($http_user_agent ~* "java|python|perl|ruby|bash|echo|uname|base64|md5sum|select|concat|HttpRequest|nmap|scan" ) {

    return 403;

}

3、封杀特定的url

location ~* \.(bak|save|sh|sql|mdb|svn|git|old)$ {

rewrite ^/(.*)$  $host  permanent;

}

location /(admin|phpadmin|status)  { deny all; }

4、封杀特定的http方法和行为

if ($request_method !~ ^(GET|POST|HEAD)$ ) {

    return 405;

}

5、强制网站使用域名访问,可以逃过IP扫描,比如

if ($http_range ~ "\d{9,}") {

    return 444;

}

if ( $host !~* 'abc.com' ) {

    return 403;

}

6、url 参数过滤敏感字,比如

if ($query_string ~* "union.*select.*\(") { 

    rewrite ^/(.*)$  $host  permanent;

if ($query_string ~* "concat.*\(") { 

    rewrite ^/(.*)$  $host  permanent;

}

7、封杀IP

定时做日志分析,手动将恶意IP加入iptables拒绝名单,推荐使用ipset模块

8、定时总结和丰富过滤规则


apache

/usr/local/apache/bin/apxs -c mod_rewrite.c

/usr/local/apache/bin/apxs -i -a -n mod_rewrite 

LoadModule rewrite_module modules/mod_rewrite.so

调优

perfork、worker、event

KeepAlive

不需要的LoadModule注释掉

Timeout

netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

使用 mod_gzip/mod_deflate

禁用 .htaccess

mod_deflate

apachectl -M | grep deflate

/usr/local/apache/bin/apxs -c -I -A apache

mod_expires

httpd.conf启用模块:loadmodule expires_module modules/mod_expires.so

缓存机制

全局、目录和虚拟主机

apache,re.sin多进程或线程适合于CPU密集型服务

lnmp

LNAMP第二版(nginx 1.2.0+apache 2.4.2+php 5.4)

Tcmalloc

mysql-5.5.23.tar.gz

隐藏apache版本信息

php打入补丁.有助于防止邮件发送被滥用

安装php扩展模块memcache-3.0.6.tgz

php的扩展memcache,不支持cas,所以我们要装memcached扩展,memcached扩展是基于libmemcached,所以要先安装libmemcached

因eaccelerator-0.9.6.1不支持php 5.4.0,所以就改用XCache 2.0.0

php安全设置,禁用函数

为apache安装rpaf模块,该模块用于apache做后端时获取访客真实的IP

使用apxs安装模块.这里要使用此前apache编译安装后的apxs

全面优化―配置高性能lnmp架构

2.nginx-1.0.14.tar 

3.php-5.3.6.tar.bz2 

4.xcache-1.3.2.tar.gz 

5. mysql-5.5.22-linux2.6-i686.tar.gz 

6.gperftools-2.0.tar.gz

7.最新的libevent库 

8.php额外的一些插件

lnmp或者lamp

调优

1.利用fastcgi_cache缓存,减少nginx与PHP交互,减轻php和数据库(mysql)的压力

2.为zend引擎缓存opcode,使用X-cache缓存opcode,减少php脚本语句转换中间代码的次数

3.利用TCMalloc优化Nginx和mysql的内存分配效率访问性能,提高高并发的性能(nginx本身对内存优化就很好,这里主要是针对mysql优化)

4.安装最新的libevent提高nginx和php的事件触发性能

5.开启gzip压缩网页文件

6.优化nginx中fastcgi参数

7.优化php-fpm参数

xcache,为php加速

# /usr/local/php/bin/phpize 

# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config 

# make && make install

lnmpa并不是说nginx不行,而是php-fpm不行,为了避免502所以才转由apache来处理php

整体写的很不错,php这块可以在完善下。

nginx+php-fpm 最大的瓶颈不在nginx,而是在php。

1、如果是php ,nginx缓存php 最好别开。

2、EA的最新版本性能比Xcache要好。且对新的PHP支持较好

3、pm.max_children = 50 #最大进程数 

pm.start_servers = 5 #初始进程数 

pm.min_spare_servers = 2 #最小空闲进程 

pm.max_spare_servers = 8 #最大空闲进程 

php-fpm的模式分静态跟动态,静态的话只第一个参数生效,动态后面设置才有用


python


redis和mongodb比较多得公司在用


QPS

1、QPS:系统每秒处理的请求数(query per second)

2、RT:系统的响应时间,一个请求的响应时间,也可以是一段时间的平均值

3、最佳线程数量:刚好消耗完服务器瓶颈资源的临界线程数

?

QPS和RT的关系:

对于单线程:QPS=1000/RT

对于多线程:QPS=1000*线程数量/RT


QPS(TPS)= 并发数/平均响应时间

通常的技术方法:


        1. 找出系统的最高TPS和日PV,这两个要素有相对比较稳定的关系(除了放假、季节性因素影响之外)


        2. 通过压力测试或者经验预估,得出最高TPS,然后跟进1的关系,计算出系统最高的日吞吐量。B2B中文和淘宝面对的客户群不一样,这两个客户群的网络行为不应用,他们之间的TPS和PV关系比例也不一样


tomcat

屏蔽DNS查询

修改的属性是enableLoopups="false"

调整线程数

调整最大连接数 一般设置为maxProcessors的1.5倍即可

调整网络超时

一般设置成connectionTimeout="30000"

压缩管理

compression="on"            # 打开压缩功能

compressionMinSize="50"     # 启用压缩的输出内容大小,默认为2KB

noCompressionUserAgents="gozilla, traviata"      # 对于以下的浏览器,不启用压缩

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

JVM内存调优

比如其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4

参考文章

tomcat配置调优与安全总结

深入理解JVM性能调优


ddos,cc

屏蔽ICMP,服务器缩短SYN等待时间,限制单个IP打开SYN最大数量

syn flood  、DNS Query Flood  、HTTP Flood   、 CC、慢速连接攻击


服务器被入侵后,该怎么做

登录系统查看可疑用户

锁定可疑用户

查看系统日志

检查并关闭系统可疑进程

chkrootkit

rpm -Va

安装Tripwire进行系统文件,web静态文件,php文件,以及各种配置文件的签名保护,设置好安全密码。定期运行tripwire经行验证,如果服务器可以承受,同时进行rootkit扫描



同步文件

rsync+inotify或者sersync或者svn+puppet 300s

rsync-vzrtopgl --progress --delete --exclude=.svn /data/web/a.test.cn/[email protected]::a.test.cn --password-file=/shell/rsync-passwd/rsync.passwd

rsync -az --delete --exclude "file10" /null/ /xx/

将dirA的所有文件同步到dirB内,并保留文件的属主,属组,文件权限等信息

rsync -avz dirA/ dirB/

将dirA的所有文件同步到dirB内,并删除dirB内多余的文件

rsync -avz --delete /dirA dirB/

将dirA的所有文件同步到dirB,但是在dirB内除了fileB3.txt这个文件不删之外,其他的都删除

rsync -avz --delete --exclude "fileB3.txt"  dirA/  dirB/

将dirA目录内的fileA1.txt和fileA2.txt不同步到dirB目录内

rsync -avz --exclude="fileA1.txt" --exclude="fileA2.txt" dirA/ dirB/

将dirA目录内的fileA1.txt和fileA2.txt不同步到dirB目录内,并且在dirB目录内删除多余的文件

rsync -avz --exclude="fileA1.txt" --exclude="fileA2.txt" --delete  dirA/ dirB/

将dirA目录内的fileA1.txt和fileA2.txt不同步到dirB目录内,并且在dirB目录内删除多余的文件,同时,如果dirB内有fileA2.txt和fileA1.txt这两个被排除同步的文件,仍然将其删除

rsync -avz --exclude="fileA1.txt" --exclude="fileA2.txt"  --delete-excluded  dirA/ dirB/


监控

基于Linux的系统监控或性能监控,写下你熟悉的一种监控软件(nagios,cacti,nmon或者其他工具或命令)能控制哪些性能指标,报警有哪些级别,有哪些报警方式


Apache性能监控支持以下指标:

Apache吞吐率

Apache并发连接数

Apache并发连接数详细统计,包括读取请求、持久连接、发送响应内容、关闭连接、等待连接



Lighttpd性能监控支持以下指标:


Lighttpd吞吐率

Lighttpd并发连接数

Lighttpd并发连接数详细统计,包括建立连接、读取请求、读取POST数据、处理请求、发送响应内容、关闭连接

Nginx性能监控支持以下指标:


Nginx吞吐率

Nginx并发连接数

Nginx并发连接数详细统计,包括读取请求、处理请求和发送响应、持久连接

Nginx持久连接利用率

MySQL性能监控支持以下指标:


MySQL查询吞吐率,包括Change DB、Select、Insert、Update、Delete

MySQL持久连接利用率

MySQL查询缓存空间使用率

MySQL查询缓存命中率

MySQL缓存查询数

MySQL索引缓存命中率

MySQL索引读取统计

MySQL连接吞吐率

MySQL连接缓存命中率

MySQL并发连接数,包括最大允许连接数、实际最大连接数、当前连接数、活跃连接数、缓存连接数

MySQL流量统计

MySQL表统计锁定


今天来看看zabbix如何监控mysql性能,这边使用mysql自带的模板,可以监控如下内容:OPS(增删改查)、mysql请求流量带宽,mysql响应流量带宽

参考文章 使用zabbix全方位监控MySQL


MongoDB性能监控支持以下指标:


MongoDB全局锁时间比例。此指标反映MongoDB进入锁状态的时间比例。

MongoDB当前等待锁总数。是读锁数和写锁数的总和。

MongoDB当前等待读锁数。因读请求过高时触发的锁数。

MongoDB当前等待写锁数。因写请求过高时触发的锁数。

MongoDB查询吞吐率。也就是MongoDB每秒处理的请求数,根据请求类别的不一样细分有query,update,delete,getmore吞吐率。

MongoDB使用内存,使用磁盘空间。此指标能反映MongoDB使用内存,磁盘空间的状况。

MongoDB分页次数,此指标反映内存分页的次数,有助于对MongoDB的性能分析。

MongoDB索引命中率,即单位总命中次数除以总命中次数与未命中次数之和。

MongoDB索引访问次数每秒,此指标反映索引的使用频率。

MongoDB当前链接数,可用链接数。

 


Memcache性能监控支持以下指标:


Memcache缓存命中率,即单位总命中次数除以总命中次数与未命中次数之和;

Memcache当前链接数,即当前已经建立的链接数量;

Memcache链接数每秒,即单位时间内新建立的链接数量;

Memcache使用内存,即当前存储的items所占用的字节数;

Memcache当前条目数量,即当前存储的items数量;

Memcache读写每秒,分为读每秒和写每秒,读每秒是指单位时间内新增的读的次数,写每秒是指单位时间内新增的写的次数;

Memcache空间使用率,当前存储的items所占用的字节数除以系统分配给Memcache的内存大小

 

Redis性能监控支持以下指标:


Redis链接客户数。

Redis链接从库数。此指标反映Redis的从库链接数。

Redis链接数每分钟。此指标反映Redis的请求频率。

Redis阻塞客户数。当并发请求数过高时触发阻塞。此指标反映Redis的并发请求状况。

Redis Pub/Sub通道数。

Redis Pub/Sub模式数。

Redis命中率。即单位总命中次数除以总命中次数与未命中次数之和。

Redis使用内存。此指标反映Redis当前占用内存量。

Redis执行命令数每分钟。此指标反映Redis执行命令频率。

 


Tomcat性能监控支持以下指标:


JVM内存,包括JVM可使用内存、JVM所使用内存、JVM最大可使用内存;

Tomcat请求数,包括每秒请求数,每秒出错数;

Tomcat网络流量统计,包括进流量统计,出流量统计;

Tomcat线程,包括最大线程数,当前线程数,当前繁忙线程数;

Tomcat处理时间,包括最大处理时间,平均处理时间;


监控以下硬件信息:

1、cpu处理器状态

2、cpu省电模式状态(如果开启了省电模式,在压力大的时候,会很卡的)

3、raid状态(比如做了哪个raid模式,raid状态是否正常)

4、内存状态(可以查看当前服务器最大支持多少内存,当前多少内存,如果内存有问题,可以显示哪个位置内存故障)

5、机器温度状态(监控机器的温度是否超过阀值)

6、物理硬盘状态(监控物理硬盘是否有故障)

7、电源状态(是单电还是双电,是否有故障)

8、系统面板CMOS电池(cmos电池是否有故障)

9、网卡状态(当前的网卡数量,以及网卡是否有问题)

10、风扇(当前的风扇数量,以及是否有故障)


Omsa来监控Dell服务器,or Ipmi、Megacli、Smart


LSI 芯片的监控  openmanager 


运维工程师的工作需要严谨及富有创新精神

不要轻信别人的话,可以借鉴,最根本的是,是现在的情况,你做了改动,是否有不好的影响,在重大时刻一定要慎重,考虑最坏结果和有一个很好的备案,保证现在的访问


你可能感兴趣的:(技术,面试)