Linux 2017年企業(yè)運維經(jīng)典面試題匯總

2018-07-31 14:45 更新

防偽碼:寶劍鋒從磨礪出,梅花香自苦寒來。

1.如何判斷mysql主從是否同步?該如何使其同步?

1
2
3
Slave_IO_Running
Slave_SQL_Running;

2.mysql的innodb如何定位鎖問題,mysql如何減少主從復制延遲?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql的innodb如何定位鎖問題:
在使用 show engine innodb status檢查引擎狀態(tài)時,發(fā)現(xiàn)了死鎖問題
在5.5中,information_schema 庫中增加了三個關于鎖的表(MEMORY引擎):innodb_trx         ## 當前運行的所有事務innodb_locks       ## 當前出現(xiàn)的鎖innodb_lock_waits  ## 鎖等待的對應關系
mysql如何減少主從復制延遲:
如果延遲比較大,就先確認以下幾個因素:
1. 從庫硬件比主庫差,導致復制延遲
2. 主從復制單線程,如果主庫寫并發(fā)太大,來不及傳送到從庫,就會導致延遲。更高版本的mysql可以支持多線程復制
3. 慢SQL語句過多
4. 網(wǎng)絡延遲5. master負載
主庫讀寫壓力大,導致復制延遲,架構的前端要加buffer及緩存層6. slave負載
一般的做法是,使用多臺slave來分攤讀請求,再從這些slave中取一臺專用的服務器,只作為備份用,不進行其他任何操作.
另外, 2個可以減少延遲的參數(shù):
–slave-net-timeout=seconds 單位為秒 默認設置為 3600秒
#參數(shù)含義:當slave從主數(shù)據(jù)庫讀取log數(shù)據(jù)失敗后,等待多久重新建立連接并獲取數(shù)據(jù)
–master-connect-retry=seconds 單位為秒 默認設置為 60秒
#參數(shù)含義:當重新建立主從連接時,如果連接建立失敗,間隔多久后重試。
通常配置以上2個參數(shù)可以減少網(wǎng)絡問題導致的主從數(shù)據(jù)同步延遲
MySQL數(shù)據(jù)庫主從同步延遲解決方案
最簡單的減少slave同步延時的方案就是在架構上做優(yōu)化,盡量讓主庫的DDL快速執(zhí)行。還有就是主庫是寫,對數(shù)據(jù)安全性較高,比如sync_binlog=1,innodb_flush_log_at_trx_commit
= 1 之類的設置,而slave則不需要這么高的數(shù)據(jù)安全,完全可以講sync_binlog設置為0或者關閉binlog,innodb_flushlog也可以設置為0來提高sql的執(zhí)行效率。另外就是使用比主庫更好的硬件設備作為slave。

3.osi七層模型,tcp三次握手過程,tcp連接斷開過程,什么情況下tcp進入time_wait?

1
2
3
4
5
6
答:其他問題答案略
什么情況下tcp進入time_wait?
當關閉一個 socket 連接時,主動關閉一端的 socket 將進入TIME_WAIT狀態(tài),而被動關閉一方則轉入CLOSED狀態(tài)。
具體過程如下:1、 客戶端發(fā)送FIN報文段,進入FIN_WAIT_1狀態(tài)。2、 服務器端收到FIN報文段,發(fā)送ACK表示確認,進入CLOSE_WAIT狀態(tài)。3、 客戶端收到FIN的確認報文段,進入FIN_WAIT_2狀態(tài)。4、
服務器端發(fā)送FIN報文端,進入LAST_ACK狀態(tài)。5、 客戶端收到FIN報文端,發(fā)送FIN的ACK,同時進入TIME_WAIT狀態(tài),啟動TIME_WAIT定時器,超時時間設為2MSL。6、 服務器端收到FIN的ACK,進入CLOSED狀態(tài)。7、
客戶端在2MSL時間內沒收到對端的任何響應,TIME_WAIT超時,進入CLOSED狀態(tài)。

4.什么是跨站腳本攻擊,有何危害,sql注入攻擊如何防范?

1
答:略

5.海量文件如何存儲?

1
答:使用分布式存儲,如mfs、hadoop等

6.如何重置mysql root密碼?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
答:一、 在已知MYSQL數(shù)據(jù)庫的ROOT用戶密碼的情況下,修改密碼的方法:
1、 在SHELL環(huán)境下,使用mysqladmin命令設置:mysqladmin –u root –p password “新密碼”   回車后要求輸入舊密碼
2、 在mysql>環(huán)境中,使用update命令,直接更新mysql庫user表的數(shù)據(jù):
Update  mysql.user  set  password=password(‘新密碼’)  where  user=’root’;
flush   privileges;
注意:mysql語句要以分號”;”結束
3、 在mysql>環(huán)境中,使用grant命令,修改root用戶的授權權限。
grant  all  on  *.*  to   root@’localhost’  identified  by  ‘新密碼’;
二、 如查忘記了mysql數(shù)據(jù)庫的ROOT用戶的密碼,又如何做呢?方法如下:
1、 關閉當前運行的mysqld服務程序:service  mysqld  stop(要先將mysqld添加為系統(tǒng)服務)
2、 使用mysqld_safe腳本以安全模式(不加載授權表)啟動mysqld 服務
/usr/local/mysql/bin/mysqld_safe  --skip-grant-table  &
3、 使用空密碼的root用戶登錄數(shù)據(jù)庫,重新設置ROOT用戶的密碼
#mysql  -u   root
Mysql> Update  mysql.user  set  password=password(‘新密碼’)  where  user=’root’;
Mysql> flush   privileges;

7.把/data目錄及其子目錄下所有以擴展名.txt結尾的文件中包含oldgirl的字符串全部替換為oldboy

1
2
答:
find /data/ -type f -name "*.txt" xargs sed -i 's/oldgirl/oldboy/g'

8.創(chuàng)建目錄/data/oldboy,并且在該目錄下創(chuàng)建文件oldboy.txt,然后在文件“oldboy.txt”里寫入內容“inet  addr : 10.0.0.8   Bcast : 10.0.0.255  Mask :  255.255.255.0 ”(不包含引號)

1
2
答:# mkdir -p /data/oldboy
# echo "inet addr: 10.0.0.8 Bcast: 10.0.0.255 Mask:255.255.255.0" >> /data/oldboy/oldboy.txt

9.腳本計算1+2+3…. +100=?

1
2
3
4
5
6
7
8
9
10
11
12
13
答:
[root@localhost ~]# cat sum.sh 
#!/bin/bash
num=1
sum=0
while [ $num -le 100 ]
do
   sum=$(expr $sum + $num)
   let num++
done
echo "1+2+3...+100="$sum
[root@localhost ~]# sh sum.sh 
1+2+3...+100=5050

 1.Apache和MySQL 兩種服務能否裝在同一臺機器上,如何查看Apache和mysql端口和進程?

1
答案略

2.如何在一臺虛擬機上同時部署4個網(wǎng)站,訪問域名分別是 www.test1.net   www.test2.net  test1.jjwxc.net   test2.jjwxc.net  

1
答案略

3.統(tǒng)計一下/var/log/nginx/access.log 日志中訪問量最多的前十個IP?

1
2
3
cat access_log | awk ‘{print $1}’ | uniq -c|sort -rn|head -10
awk '{print $1}' /var/log/nginx/access.log | sort uniq -c | sort -nr -k1 | head -n 10

4.怎么查看當前系統(tǒng)中每個IP的連接數(shù),怎么查看當前磁盤的IO,怎么查看當前網(wǎng)絡的IO?

答:

怎么查看當前系統(tǒng)中每個IP的連接數(shù):

1
2
3
4
# netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c| sort –rn
sort命令:進行排序,-r 反向排序 -n 使用純數(shù)字進行排序
uniq 將重復的數(shù)據(jù)僅僅列出一個來顯示,uniq -c,進行計數(shù)
awk -F: '{print $1}'  以F 為分界符,取出第一個:之前的數(shù)據(jù)

怎么查看當前磁盤的IO:

1) iostat可以提供豐富的IO狀態(tài)數(shù)據(jù)。

iostat 是 sysstat 工具集的一個工具,需要安裝。

1
2
3
4
5
6
7
[root@localhost ~]# iostat -d -k 1 10
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain) 03/23/2017 _x86_64_(2 CPU)
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              16.60       597.83        29.44     384048      18909
scd0              0.03         0.10         0.00         66          0
dm-0             15.78       551.54        26.20     354311      16831
dm-1              0.22         1.97         0.00       1268          0

參數(shù) -d 表示,顯示設備(磁盤)使用狀態(tài);-k某些使用block為單位的列強制使用Kilobytes為單位;1 10表示,數(shù)據(jù)顯示每隔1秒刷新一次,共顯示10次。

tps:該設備每秒的傳輸次數(shù)。

kB_read/s:每秒從設備讀取的數(shù)據(jù)量;kB_wrtn/s:每秒向設備寫入的數(shù)據(jù)量;kB_read:讀取的總數(shù)據(jù)量;kB_wrtn:寫入 的總數(shù)量數(shù)據(jù)量;這些單位都為Kilobytes。

 -x 參數(shù):使用-x參數(shù)我們可以獲得更多統(tǒng)計信息。

iostat -d -x -k 1 10 #查看設備使用率(%util)、響應時間(%await)

await:每一個IO請求的處理的平均時間(單位是微秒)。這里可以理解為IO的響應時間,一般地系統(tǒng)IO響應時間應該低于5ms,如果大于10ms就比較大了。

%util:在統(tǒng)計時間內所有處理IO時間,除以總共統(tǒng)計時間。例如,如果統(tǒng)計間隔1秒,該 設備有0.8秒在處理IO,而0.2秒閑置,那么該設備的%util = 0.8/1 = 80%,所以該參數(shù)暗示了設備的繁忙程度。一般地,如果該參數(shù)是100%表示設備已經(jīng)接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因為磁盤的并發(fā)能力,所以磁盤使用未必就到了瓶頸)。

2)使用iotop命令

要安裝iotop軟件包

iotop命令是一個用來監(jiān)視磁盤I/O使用狀況的top類工具。iotop具有與top相似的UI。Linux下的IO統(tǒng)計工具如iostat,nmon等大多數(shù)是只能統(tǒng)計到per設備的讀寫情況,如果你想知道每個進程是如何使用IO的就比較麻煩,使用iotop命令可以很方便的查看。

怎么查看當前網(wǎng)絡的IO:

iftop 查看網(wǎng)絡帶寬情況(必須從epel源安裝)

sar看看當前網(wǎng)絡流量 ,sar -n DEV1 999 表示取樣間隔為1秒,取樣999次


5.寫一個腳本,實現(xiàn)批量添加20個用戶,用戶名為:user1-20,密碼為user后面跟著5個隨機字符或數(shù)字

答:

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# cat useradd.sh 
#!/bin/bash
name="user"
for number in $(seq 1 20)
do
   password=$(cat /dev/urandom head -1 | md5sum | head -c 5)
   useradd $name$number
   echo "user$password" passwd --stdin user$number &> /dev/null
   echo "$name$number user$password" >> userinfo.txt
done

 6.dmesg命令中看到ip-conntrack:table full,dropping packet,如何解決?

答:

線上web服務器在訪問量很大時,就會出現(xiàn)網(wǎng)絡連接丟包的問題,通過dmesg命令查看日志,發(fā)現(xiàn)如下信息:

ip_conntrack: table full, dropping packet.

為什么會出現(xiàn) ip_conntrack: table full, dropping packet 呢?這里面關鍵的信息是"ip_conntrack: table full, dropping packet",從這里可以判斷出這跟iptables有關系了,因為iptables防火墻使用了ip_conntrack內核模塊實現(xiàn)連接跟蹤功能,所有的進出數(shù)據(jù)包都會記錄在連接跟蹤表中,包括tcp,udp,icmp等,一旦連接跟蹤表被填滿以后,就會發(fā)生丟包,導致網(wǎng)絡不穩(wěn)定。當這張表滿了,就會在日志里面寫入該信息(執(zhí)行命令dmesge | more查看)。

而當我們的服務器確實打開了iptables防火墻,并且都是在網(wǎng)站流量非常高的時候經(jīng)常會出現(xiàn)這個問題。這個問題的原因是由于web服務器收到了大量的連接,在啟用了iptables的情況下,iptables會把所有的連接都做鏈接跟蹤處理,這樣iptables就會有一個鏈接跟蹤表,當這個表滿的時候,就會出現(xiàn)上面的錯誤。

查看當前連接數(shù):

1
2
[root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_count 
0

iptables的鏈接跟蹤表最大容量配置文件如下:

1
2
[root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_max 
65536

注:

由于nf_conntrack 工作在3層,支持IPv4和IPv6,而ip_conntrack只支持IPv4,因此nf_conntrack模塊在Linux的2.6.15內核中被引入,而ip_conntrack在Linux的2.6.22內核被移除(centos6.x版本),因此不同版本的系統(tǒng),配置文件也就不盡相同了。目前大多的ip_conntrack_*已被 nf_conntrack_* 取代,很多ip_conntrack_*僅僅是個軟鏈接,原先的ip_conntrack配置目錄/proc/sys/net/ipv4/netfilter/ 仍然存在,但是新的nf_conntrack在/proc/sys/net/netfilter/中,這樣做是為了能夠向下的兼容。

這個問題該如何解決,解決方法一般有兩個:

方法1:

1
2
3
4
5
[root@localhost ~]# sysctl -w net.nf_conntrack_max=100000
net.nf_conntrack_max = 100000
[root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_max 
100000
sysctl-p

注:

嚴格來看重啟 iptables/ip6tables 會重新加載 nf_conntrack 相關的模塊, 引起參數(shù)恢復成默認值。

以免重啟 iptables 引起參數(shù)失效. 也可以在 /etc/sysconfig/iptables-config 文件中開啟選項 IPTABLES_SYSCTL_LOAD_LIST=”.nf_conntrack”, iptables 重啟后會進行 sysctl 操作.

方法2:

不使用ip_conntrack,nf_conntrack_ipv4,xt_state模塊

7、varnish  nginx squid各自緩存的優(yōu)缺點

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
要做cache服務的話,我們肯定是要選擇專業(yè)的cache服務,優(yōu)先選擇squid和varnish。
Varnish
高性能、開源的反向代理服務器和內存緩存服務器。
優(yōu)點:
1. 高性能; 
2. 多核支持; 
3. 支持0-60秒的精確緩存時間。 
缺點:
1. 不具備自動容錯和恢復功能,重啟后數(shù)據(jù)丟失; 
2. 在線擴容比較難。 
3. 32位機器上緩存文件大小為最大2GB; 
4. 不支持集群。
應用場景:
并發(fā)要求不是很大的小型系統(tǒng)和應用
nginx
1不支持帶參數(shù)的動態(tài)鏈接  
2Nginx緩存內部沒有緩存過期和清理的任何機制,這些緩存的文件會永久性地保存在機器上,如果要緩存的東西非常多,那就會撐暴整個硬盤空間。
3只能緩存200狀態(tài)碼,因此后端返回301/302/404等狀態(tài)碼都不會緩存,假如恰好有一個訪問量很大的偽靜態(tài)鏈接被刪除,那就會不停穿透導致后端承載不小壓力
4Nginx不會自動選擇內存或硬盤作為存儲介質,一切由配置決定,當然在當前的操作系統(tǒng)里都會有操作系統(tǒng)級的文件緩存機制,所以存在硬盤上也不需要過分擔心大并發(fā)讀取造成的io性能問題。
Squid
Squid,很古老的反向代理軟件,擁有傳統(tǒng)代理、身份驗證、流量管理等高級功能,但是配置太復雜。它算是目前互聯(lián)網(wǎng)應用得最多的反向緩存代理服務器,工作于各大古老的cdn上
squid的優(yōu)勢在于完整的龐大的cache技術資料,和很多的應用生產(chǎn)環(huán)境

8、查詢DNS的深層結構

當 DNS 客戶機需要查詢程序中使用的名稱時,它會查詢本地DNS 服務器來解析該名稱??蛻魴C發(fā)送的每條查詢消息都包括3條信息,以指定服務器應回答的問題。
● 指定的 DNS 域名,表示為完全合格的域名 (FQDN) 。
● 指定的查詢類型,它可根據(jù)類型指定資源記錄,或作為查詢操作的專門類型。
● DNS域名的指定類別。
    對于DNS 服務器,它始終應指定為 Internet 類別。例如,指定的名稱可以是計算機的完全合格的域名,如im.qq.com,并且指定的查詢類型用于通過該名稱搜索地址資源記錄。
    DNS 查詢以各種不同的方式進行解析。客戶機有時也可通過使用從以前查詢獲得的緩存信息就地應答查詢。DNS 服務器可使用其自身的資源記錄信息緩存來應答查詢,也可代表請求客戶機來查詢或聯(lián)系其他 DNS 服務器,以完全解析該名稱,并隨后將應答返回至客戶機。這個過程稱為遞歸。
    另外,客戶機自己也可嘗試聯(lián)系其他的 DNS 服務器來解析名稱。如果客戶機這么做,它會使用基于服務器應答的獨立和附加的查詢,該過程稱作迭代,即DNS服務器之間的交互查詢就是迭代查詢。
DNS 查詢的過程如下圖所示。

1
2
3
4
5
6
7
1、在瀏覽器中輸入www.qq.com域名,操作系統(tǒng)會先檢查自己本地的hosts文件是否有這個網(wǎng)址映射關系,如果有,就先調用這個IP地址映射,完成域名解析。 
2、如果hosts里沒有這個域名的映射,則查找本地DNS解析器緩存,是否有這個網(wǎng)址映射關系,如果有,直接返回,完成域名解析。 
3、如果hosts與本地DNS解析器緩存都沒有相應的網(wǎng)址映射關系,首先會找TCP/ip參數(shù)中設置的首選DNS服務器,在此我們叫它本地DNS服務器,此服務器收到查詢時,如果要查詢的域名,包含在本地配置區(qū)域資源中,則返回解析結果給客戶機,完成域名解析,此解析具有權威性。 
4、如果要查詢的域名,不由本地DNS服務器區(qū)域解析,但該服務器已緩存了此網(wǎng)址映射關系,則調用這個IP地址映射,完成域名解析,此解析不具有權威性。 
5、如果本地DNS服務器本地區(qū)域文件與緩存解析都失效,則根據(jù)本地DNS服務器的設置(是否設置轉發(fā)器)進行查詢,如果未用轉發(fā)模式,本地DNS就把請求發(fā)至13臺根DNS,根DNS服務器收到請求后會判斷這個域名(.com)是誰來授權管理,并會返回一個負責該頂級域名服務器的一個IP。本地DNS服務器收到IP信息后,將會聯(lián)系負責.com域的這臺服務器。這臺負責.com域的服務器收到請求后,如果自己無法解析,它就會找一個管理.com域的下一級DNS服務器地址(qq.com)給本地DNS服務器。當本地DNS服務器收到這個地址后,就會找qq.com域服務器,重復上面的動作,進行查詢,直至找到www.qq.com主機。 
6、如果用的是轉發(fā)模式,此DNS服務器就會把請求轉發(fā)至上一級DNS服務器,由上一級服務器進行解析,上一級服務器如果不能解析,或找根DNS或把轉請求轉至上上級,以此循環(huán)。不管是本地DNS服務器用是是轉發(fā),還是根提示,最后都是把結果返回給本地DNS服務器,由此DNS服務器再返回給客戶機。    
從客戶端到本地DNS服務器是屬于遞歸查詢,而DNS服務器之間就是的交互查詢就是迭代查詢。

9、lvs的三種模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
一、NAT模式(VS-NAT)
 原理:就是把客戶端發(fā)來的數(shù)據(jù)包的IP頭的目的地址,在負載均衡器上換成其中一臺RS的IP地址,并發(fā)至此RS來處理,RS處理完成后把數(shù)據(jù)交給經(jīng)過負載均衡器,負載均衡器再把數(shù)據(jù)包的原IP地址改為自己的IP,將目的地址改為客戶端IP地址即可期間,無論是進來的流量,還是出去的流量,都必須經(jīng)過負載均衡器
  
優(yōu)點:集群中的物理服務器可以使用任何支持TCP/IP操作系統(tǒng),只有負載均衡器需要一個合法的IP地址。
  
缺點:擴展性有限。當服務器節(jié)點(普通PC服務器)增長過多時,負載均衡器將成為整個系統(tǒng)的瓶頸,因為所有的請求包和應答包的流向都經(jīng)過負載均衡器。當服務器節(jié)點過多時,大量的數(shù)據(jù)包都交匯在負載均衡器那,速度就會變慢!
  
二、IP隧道模式(VS-TUN)
  
原理:首先要知道,互聯(lián)網(wǎng)上的大多Internet服務的請求包很短小,而應答包通常很大。那么隧道模式就是,把客戶端發(fā)來的數(shù)據(jù)包,封裝一個新的IP頭標記(僅目的IP)發(fā)給RS,RS收到后,先把數(shù)據(jù)包的頭解開,還原數(shù)據(jù)包,處理后,直接返回給客戶端,不需要再經(jīng)過負載均衡器注意,由于RS需要對負載均衡器發(fā)過來的數(shù)據(jù)包進行還原,所以說必須支持IPTUNNEL協(xié)議所以,在RS的內核中,必須編譯支持IPTUNNEL這個選項
  
優(yōu)點:負載均衡器只負責將請求包分發(fā)給后端節(jié)點服務器,而RS將應答包直接發(fā)給用戶。所以,減少了負載均衡器的大量數(shù)據(jù)流動,負載均衡器不再是系統(tǒng)的瓶頸,就能處理很巨大的請求量,這種方式,一臺負載均衡器能夠為很多RS進行分發(fā)。而且跑在公網(wǎng)上就能進行不同地域的分發(fā)。
  
缺點:隧道模式的RS節(jié)點需要合法IP,這種方式需要所有的服務器支持”IP Tunneling”(IP Encapsulation)協(xié)議,服務器可能只局限在部分Linux系統(tǒng)上。
  
三、直接路由模式(VS-DR)
  
原理:負載均衡器和RS都使用同一個IP對外服務但只有DR對ARP請求進行響應,所有RS對本身這個IP的ARP請求保持靜默也就是說,網(wǎng)關會把對這個服務IP的請求全部定向給DR,而DR收到數(shù)據(jù)包后根據(jù)調度算法,找出對應的RS,把目的MAC地址改為RS的MAC(因為IP一致)并將請求分發(fā)給這臺RS這時RS收到這個數(shù)據(jù)包,處理完成之后,由于IP一致,可以直接將數(shù)據(jù)返給客戶,則等于直接從客戶端收到這個數(shù)據(jù)包無異,處理后直接返回給客戶端由于負載均衡器要對二層包頭進行改換,所以負載均衡器和RS之間必須在一個廣播域,也可以簡單的理解為在同一臺交換機上
  
優(yōu)點:和TUN(隧道模式)一樣,負載均衡器也只是分發(fā)請求,應答包通過單獨的路由方法返回給客戶端。與VS-TUN相比,VS-DR這種實現(xiàn)方式不需要隧道結構,因此可以使用大多數(shù)操作系統(tǒng)做為物理服務器。
  
缺點:(不能說缺點,只能說是不足)要求負載均衡器的網(wǎng)卡必須與物理網(wǎng)卡在一個物理段上。

10、lvs/nginx/haproxy優(yōu)缺點

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Nginx的優(yōu)點是:
 1、工作在網(wǎng)絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構,它的正則規(guī)則比HAProxy更為強大和靈活,這也是它目前廣泛流行的主要原因之一,Nginx單憑這點可利用的場合就遠多于LVS了。
2、Nginx對網(wǎng)絡穩(wěn)定性的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優(yōu)勢之一;相反LVS對網(wǎng)絡穩(wěn)定性依賴比較大,這點本人深有體會;
3、Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日志打印出來。LVS的配置、測試就要花比較長的時間了,LVS對網(wǎng)絡依賴比較大。
3、可以承擔高負載壓力且穩(wěn)定,在硬件不差的情況下一般能支撐幾萬次的并發(fā)量,負載度比LVS相對小些。
4、Nginx可以通過端口檢測到服務器內部的故障,比如根據(jù)服務器處理網(wǎng)頁返回的狀態(tài)碼、超時等等,并且會把返回錯誤的請求重新提交到另一個節(jié)點,不過其中缺點就是不支持url來檢測。比如用戶正在上傳一個文件,而處理該上傳的節(jié)點剛好在上傳過程中出現(xiàn)故障,Nginx會把上傳切到另一臺服務器重新處理,而LVS就直接斷掉了,如果是上傳一個很大的文件或者很重要的文件的話,用戶可能會因此而不滿。
5、Nginx不僅僅是一款優(yōu)秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器。LNMP也是近幾年非常流行的web架構,在高流量的環(huán)境中穩(wěn)定性也很好。
6、Nginx現(xiàn)在作為Web反向加速緩存越來越成熟了,速度比傳統(tǒng)的Squid服務器更快,可以考慮用其作為反向代理加速器。
7、Nginx可作為中層反向代理使用,這一層面Nginx基本上無對手,唯一可以對比Nginx的就只有l(wèi)ighttpd了,不過lighttpd目前還沒有做到Nginx完全的功能,配置也不那么清晰易讀,社區(qū)資料也遠遠沒Nginx活躍。
8、Nginx也可作為靜態(tài)網(wǎng)頁和圖片服務器,這方面的性能也無對手。還有Nginx社區(qū)非?;钴S,第三方模塊也很多。
Nginx的缺點是:
1、Nginx僅能支持http、https和Email協(xié)議,這樣就在適用范圍上面小些,這個是它的缺點。
2、對后端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測。不支持Session的直接保持,但能通過ip_hash來解決。
 LVS
LVS:使用Linux內核集群實現(xiàn)一個高性能、高可用的負載均衡服務器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。
  
LVS的優(yōu)點是:
1、抗負載能力強、是工作在網(wǎng)絡4層之上僅作分發(fā)之用,沒有流量的產(chǎn)生,這個特點也決定了它在負載均衡軟件里的性能最強的,對內存和cpu資源消耗比較低。
2、配置性比較低,這是一個缺點也是一個優(yōu)點,因為沒有可太多配置的東西,所以并不需要太多接觸,大大減少了人為出錯的幾率。
3、工作穩(wěn)定,因為其本身抗負載能力很強,自身有完整的雙機熱備方案,如LVS+Keepalived,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived。
4、無流量,LVS只分發(fā)請求,而流量并不從它本身出去,這點保證了均衡器IO的性能不會收到大流量的影響。
5、應用范圍比較廣,因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、數(shù)據(jù)庫、在線聊天室等等。
  
LVS的缺點是:
1、軟件本身不支持正則表達式處理,不能做動靜分離;而現(xiàn)在許多網(wǎng)站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優(yōu)勢所在。
2、如果是網(wǎng)站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較復雜了,特別后面有Windows
Server的機器的話,如果實施及配置還有維護過程就比較復雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。
HAProxy
HAProxy的特點是:
1、HAProxy也是支持虛擬主機的。
2、HAProxy的優(yōu)點能夠補充Nginx的一些缺點,比如支持Session的保持,Cookie的引導;同時支持通過獲取指定的url來檢測后端服務器的狀態(tài)。
3、HAProxy跟LVS類似,本身就只是一款負載均衡軟件;單純從效率上來講HAProxy會比Nginx有更出色的負載均衡速度,在并發(fā)處理上也是優(yōu)于Nginx的。
4、HAProxy支持TCP協(xié)議的負載均衡轉發(fā),可以對MySQL讀進行負載均衡,對后端的MySQL節(jié)點進行檢測和負載均衡,大家可以用LVS+Keepalived對MySQL主從做負載均衡。
5、HAProxy負載均衡策略非常多,HAProxy的負載均衡算法現(xiàn)在具體有如下8種:
①roundrobin,表示簡單的輪詢,這個不多說,這個是負載均衡基本都具備的;
② static-rr,表示根據(jù)權重,建議關注;
③leastconn,表示最少連接者先處理,建議關注;
④ source,表示根據(jù)請求源IP,這個跟Nginx的IP_hash機制類似,我們用其作為解決session問題的一種方法,建議關注;
⑤ri,表示根據(jù)請求的URI;
⑥rl_param,表示根據(jù)請求的URl參數(shù)’balance url_param’ requires an URL parameter name;
⑦hdr(name),表示根據(jù)HTTP請求頭來鎖定每一次HTTP請求;
⑧rdp-cookie(name),表示根據(jù)據(jù)cookie(name)來鎖定并哈希每一次TCP請求。

11、linux系統(tǒng)監(jiān)控命令,查看cpu負載內存等情況

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
top命令是Linux下常用的性能分析工具,比如cpu、內存的使用,能夠實時顯示系統(tǒng)中各個進程的資源占用狀況,類似于Windows的任務管理器。 top顯示系統(tǒng)當前的進程和其他狀況,是一個動態(tài)顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態(tài).如果在前臺執(zhí)行該命令,它將獨占前臺,直到用戶終止該程序為止.
比較準確的說,top命令提供了實時的對系統(tǒng)處理器的狀態(tài)監(jiān)視.它將顯示系統(tǒng)中CPU最“敏感”的任務列表.該命令可以按CPU使用.內存使用和執(zhí)行時間對任務進行排序;而且該命令的很多特性都可以通過交互式命令或者在個人定制文件中進行設定。
top命令參數(shù)
d 指定每兩次屏幕信息刷新之間的時間間隔。當然用戶可以使用s交互命令來改變之。
p通過指定監(jiān)控進程ID來僅僅監(jiān)控某個進程的狀態(tài)。
q該選項將使top沒有任何延遲的進行刷新。如果調用程序有超級用戶權限,那么top將以盡可能高的優(yōu)先級運行。
S 指定累計模式
s 使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險。
i使top不顯示任何閑置或者僵死進程。
c 顯示整個命令行而不只是顯示命令名
常用操作
top   //每隔5秒顯式所有進程的資源占用情況
top -d2//每隔2秒顯式所有進程的資源占用情況
top -c//每隔5秒顯式進程的資源占用情況,并顯示進程的命令行參數(shù)(默認只有進程名)
top -p12345-p6789//每隔5秒顯示pid是12345和pid是6789的兩個進程的資源占用情況
top -d2-c-p123456//每隔2秒顯示pid是12345的進程的資源使用情況,并顯式該進程啟動的命令行參數(shù)

三、查看網(wǎng)絡流量的命令

1
watch -n 1 "/sbin/ifconfig eth0 | grep bytes"

四、docker四中網(wǎng)絡模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1 host模式
眾所周知,Docker使用了Linux的Namespaces技術來進行資源隔離,如PID Namespace隔離進程,Mount
Namespace隔離文件系統(tǒng),Network Namespace隔離網(wǎng)絡等。一個Network Namespace提供了一份獨立的網(wǎng)絡環(huán)境,包括網(wǎng)卡、路由、Iptable規(guī)則等都與其他的Network Namespace隔離。一個Docker容器一般會分配一個獨立的Network
Namespace。但如果啟動容器的時候使用host模式,那么這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機的IP和端口。
例如,我們在10.10.101.105/24的機器上用host模式啟動一個含有web應用的Docker容器,監(jiān)聽tcp80端口。當我們在容器中執(zhí)行任何類似ifconfig命令查看網(wǎng)絡環(huán)境時,看到的都是宿主機上的信息。而外界訪問容器中的應用,則直接使用10.10.101.105:80即可,不用任何NAT轉換,就如直接跑在宿主機中一樣。但是,容器的其他方面,如文件系統(tǒng)、進程列表等還是和宿主機隔離的。
 2 container模式
在理解了host模式后,這個模式也就好理解了。這個模式指定新創(chuàng)建的容器和已經(jīng)存在的一個容器共享一個Network
Namespace,而不是和宿主機共享。新創(chuàng)建的容器不會創(chuàng)建自己的網(wǎng)卡,配置自己的IP,而是和一個指定的容器共享IP、端口范圍等。同樣,兩個容器除了網(wǎng)絡方面,其他的如文件系統(tǒng)、進程列表等還是隔離的。兩個容器的進程可以通過lo網(wǎng)卡設備通信。
 3 none模式
這個模式和前兩個不同。在這種模式下,Docker容器擁有自己的Network Namespace,但是,并不為Docker容器進行任何網(wǎng)絡配置。也就是說,這個Docker容器沒有網(wǎng)卡、IP、路由等信息。需要我們自己為Docker容器添加網(wǎng)卡、配置IP等。
 4 bridge模式
bridge模式是Docker默認的網(wǎng)絡設置,此模式會為每一個容器分配Network Namespace、設置IP等,并將一個主機上的Docker容器連接到一個虛擬網(wǎng)橋上。下面著重介紹一下此模式。host模式
使用Docker run時使用–net=host指定 Docker使用的網(wǎng)絡實際上和宿主機一樣,在容器內看到的網(wǎng)卡ip是宿主機上的ip。
docker常用命令
1. docker version  查看docker的版本號,包括客戶端、服務端、依賴的Go等
2. docker info  查看系統(tǒng)(docker)層面信息,包括管理的images, containers數(shù)等
3. docker search <image>在docker index中搜索image 
4. docker pull <image>從docker registry server 中下拉image 
5. docker push <image|repository>推送一個image或repository到registry 
6. docker push <image|repository>:TAG  同上,指定tag  
7. docker inspect <image|container>查看image或container的底層信息
8. docker images  查看本機images 
9. docker images –a  列出所有的images 
10. dockerps默認顯示正在運行中的container 
六、docker怎么實現(xiàn)容器間的獨立

12、實現(xiàn)高可用工具有哪些

1
2
hearbeat
keepalived

13、mysql數(shù)據(jù)備份工具

1
2
3
4
5
6
7
8
mysqldump工具
Mysqldump是mysql自帶的備份工具,目錄在bin目錄下面:/usr/local/mysql/bin/mysqldump,支持基于innodb的熱備份。但是由于是邏輯備份,所以速度不是很快,適合備份數(shù)據(jù)比較小的場景。Mysqldump完全備份+二進制日志可以實現(xiàn)基于時間點的恢復。
基于LVM快照備份
在物理備份中,有基于文件系統(tǒng)的物理備份(LVM的快照),也可以直接用tar之類的命令對整個數(shù)據(jù)庫目錄進行打包備份,但是這些只能進行泠備份,不同的存儲引擎?zhèn)浞莸囊膊灰粯?,myisam自動備份到表級別,而innodb不開啟獨立表空間的話只能備份整個數(shù)據(jù)庫。
tar包備份
percona提供的xtrabackup工具
支持innodb的物理熱備份,支持完全備份,增量備份,而且速度非???,支持innodb存儲引起的數(shù)據(jù)在不同數(shù)據(jù)庫之間遷移,支持復制模式下的從機備份恢復備份恢復
,為了讓xtrabackup支持更多的功能擴展,可以設立獨立表空間,打開 innodb_file_per_table功能,啟用之后可以支持單獨的表備份。

14、awk和sed的區(qū)別

1
2
3
4
5
6
7
8
9
10
11
12
13
14
awk是一種程序語言,對文檔資料的處理具有很強的功能。awk擅長從格式化報文或從一個大的文本文件中抽取數(shù)據(jù)。
awk的命令格式為:
awk [-F filed-separator] “commands” input-file(s)
awk將一行文字按分隔符(filed-separator)分為多個域,依次記為$ 1,$ 2 . . . $ n。$0代表所有域值。因此awk更適合于以域為單位來處理文件。加之ARGIND等內置變量,使awk能處理多個文件。典型的應用為查找一個文件中的某個字段是否在另一個文件中出現(xiàn)
sed是一個精簡的、非交互式的編輯器。它能執(zhí)行與編輯vi和emacs相同的編輯任務,但sed編輯器不提供交互使用方式,只能在命令行下輸入編輯命令。
sed的命令格式為:
sed [options] 'command' file(s)  
sed [options] -f scrīptfile file(s)  
  
作為編輯器,當然少不了插入(a/、i/)、刪除(d)、查找替換(s)等命令。
  
如果文件是格式化的,即由分隔符分為多個域的,優(yōu)先使用awk
awk適合按列(域)操作,sed適合按行操作
awk適合對文件的抽取整理,sed適合對文件的編輯。

15、介紹CDN的作用

   

1
2
3
CDN加速簡單的來說,就是把原服務器上數(shù)據(jù)復制到其他服務器上,用戶訪問時,那臺服務器近訪問到的就是那臺服務器上的數(shù)據(jù)。CDN加速優(yōu)點是成本低,速度快??梢杂肅DN best的CDN進行加速,免費,可部署私有,公有CDN系統(tǒng)。可以實現(xiàn)宕機檢測,自動切換ip,分線路,分組解析。也就是
CDN加速
的主要作用就是保證網(wǎng)站的正常訪問,及加快網(wǎng)站訪問速度和響應速度,防止網(wǎng)站因黑客攻擊,DNS解析劫持故障等導致的網(wǎng)站服務器的宕機狀況的出現(xiàn)。

16、 keepalive的工作原理和如何做到健康檢查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
keepalived是以VRRP協(xié)議為實現(xiàn)基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協(xié)議。
虛擬路由冗余協(xié)議,可以認為是實現(xiàn)路由器高可用的協(xié)議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網(wǎng)內其他機器的默認路由為該vip),master會發(fā)組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據(jù)VRRP的優(yōu)先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。
keepalived主要有三個模塊,分別是core、check和vrrp。core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。vrrp模塊是來實現(xiàn)VRRP協(xié)議的。
Keepalived健康檢查方式配置
HTTP_GET|SSL_GET
HTTP_GET | SSL_GET
{
url {
path /# HTTP/SSL 檢查的url可以是多個
digest <STRING> # HTTP/SSL 檢查后的摘要信息用工具genhash生成
status_code 200# HTTP/SSL 檢查返回的狀態(tài)碼
}
connect_port 80 # 連接端口
bindto<IPADD>
connect_timeout 3 # 連接超時時間
nb_get_retry 3 # 重連次數(shù)
delay_before_retry 2 #連接間隔時間
}

17、 squid的默認緩存大小是多少?

1
1024MB

18、查看Linux系統(tǒng)的所有配置的命令(除了cpuinfo和meinfo)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
查看主板的序列號: dmidecode | grep -i ’serial number’
用硬件檢測程序kuduz探測新硬件:service kudzu start ( or restart)
查看CPU信息:cat /proc/cpuinfo [dmesg | grep -i 'cpu'][dmidecode -t processor]
查看內存信息:cat /proc/meminfo [free -m][vmstat]
查看板卡信息:cat /proc/pci
查看顯卡/聲卡信息:lspci |grep -i ‘VGA’[dmesg | grep -i 'VGA']
查看網(wǎng)卡信息:dmesg | grep -i ‘eth’[cat /etc/sysconfig/hwconf grep -i eth][lspci | grep -i 'eth']  www.2cto.com  
<!--more-->
查看PCI信息:lspci (相比cat /proc/pci更直觀)
查看USB設備:cat /proc/bus/usb/devices
查看鍵盤和鼠標:cat /proc/bus/input/devices
查看系統(tǒng)硬盤信息和使用情況:fdisk& disk – l &df
查看各設備的中斷請求(IRQ):cat /proc/interrupts
查看系統(tǒng)體系結構:uname -a

19、shell腳本或命令將/opt目錄下的大于15KB的文件都移到/tmp目錄下

find /opt -size +15k -exec mv {} /tmp/ \;

20、寫過哪些python腳本?

這個程序的作用是跳過最新的7*24個備份,刪除其他的時間更長的

          # -*- coding: cp936 -*-

import os  #os是python自帶的一個擴展庫,用來進行跟系統(tǒng)相關的操作

skipNum = 24 * 7    #保留文件夾的數(shù)目(小時 * 天)

print '\n*************清除時間超過 ' + str(skipNum /24) + ' 天的自動備份文件**************\n\n'

backupDir = os.path.abspath(__file__) + '\\..\\..' + '\\servedatabase_autobackup'
for dir in os.listdir(backupDir):   #os.listdir(xxx)函數(shù)返回的是一個文件列表
    if dir[-4:] == '.map':
        mapDir = backupDir + '\\' + dir
        print '正在清除備份目錄:' + os.path.abspath(mapDir)
        subDirs = os.listdir(mapDir) #獲取文件列表
        subDirs.reverse()            #逆序
        i = 0
        for subDir in subDirs:
            i+=1
            if i>skipNum:
                print '正在清除備份: ' + subDir 
                os.system('rmdir ' + mapDir + '\\' + subDir + ' /s/q') #相當于執(zhí)行控制臺命令

 

 歡迎加技術群:323779636(Shell/Python運維開發(fā)群)

 

 

 

 


本文出自 “一盞燭光” 博客,謝絕轉載!

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號