天天看點

運維面試經驗

以下很多東西都是來自網上的分享,我這裡整理以下。我覺得對一些運維來說還是非常有用

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 – 設定它為 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.基本判斷

網卡

高并發、大流量網卡調優

in,cs,r

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 –setra 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' ) {

6、url 參數過濾敏感字,比如

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

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

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

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 

運維工程師的工作需要嚴謹及富有創新精神

不要輕信别人的話,可以借鑒,最根本的是,是現在的情況,你做了改動,是否有不好的影響,在重大時刻一定要慎重,考慮最壞結果和有一個很好的備案,保證現在的通路

本文轉自 liqius 51CTO部落格,原文連結:http://blog.51cto.com/szgb17/1686230,如需轉載請自行聯系原作者