【就業福利-251期】2017年企業版高薪運維經典面試題匯總

2017年企業對運維的要求也提高,隨之帶來的對人員基礎能力的考核也更多了,下面我們整理了企業高薪運維經面試的匯總,給準備求職的您一些幫助:

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檢查引擎狀態時,發現了死鎖問題
在5.5中,information_schema?庫中增加了三個關于鎖的表(MEMORY引擎):innodb_trx?????????##?當前運行的所有事務innodb_locks???????##?當前出現的鎖innodb_lock_waits??##?鎖等待的對應關系
mysql如何減少主從復制延遲:
如果延遲比較大,就先確認以下幾個因素:
1.?從庫硬件比主庫差,導致復制延遲
2.?主從復制單線程,如果主庫寫并發太大,來不及傳送到從庫,就會導致延遲。更高版本的mysql可以支持多線程復制
3.?慢SQL語句過多
4.?網絡延遲5.?master負載
主庫讀寫壓力大,導致復制延遲,架構的前端要加buffer及緩存層6.?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。

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

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

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數據庫的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??*.*[email protected]’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;

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

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

8.創建目錄/data/oldboy,并且在該目錄下創建文件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
答:
[[email protected]?~]#?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
[[email protected]?~]#?sh?sum.sh?
1+2+3...+100=5050

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

1
答案略

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

1
答案略

3.統計一下/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.怎么查看當前系統中每個IP的連接數,怎么查看當前磁盤的IO,怎么查看當前網絡的IO?

答:

怎么查看當前系統中每個IP的連接數:

1
2
3
4
#?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?為分界符,取出第一個:之前的數據

怎么查看當前磁盤的IO:

1)?iostat可以提供豐富的IO狀態數據。

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

1
2
3
4
5
6
7
[[email protected]?~]#?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

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

tps:該設備每秒的傳輸次數。

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

?-x 參數:使用-x參數我們可以獲得更多統計信息。

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

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

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

2)使用iotop命令

要安裝iotop軟件包

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

怎么查看當前網絡的IO:

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

sar看看當前網絡流量?,sar -n?DEV1 999 表示取樣間隔為1秒,取樣999次

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

答:

1
2
3
4
5
6
7
8
9
10
[[email protected]?~]#?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服務器在訪問量很大時,就會出現網絡連接丟包的問題,通過dmesg命令查看日志,發現如下信息:

ip_conntrack: table full, dropping packet.

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

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

查看當前連接數:

1
2
[[email protected]?~]#?cat?/proc/sys/net/netfilter/nf_conntrack_count?
0

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

1
2
[[email protected]?~]#?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版本),因此不同版本的系統,配置文件也就不盡相同了。目前大多的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
[[email protected]?~]#?sysctl?-w?net.nf_conntrack_max=100000
net.nf_conntrack_max?=?100000
[[email protected]?~]#?cat?/proc/sys/net/netfilter/nf_conntrack_max?
100000
sysctl-p

注:

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

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

方法2:

不使用ip_conntrack,nf_conntrack_ipv4,xt_state模塊

7、varnish ?nginx squid各自緩存的優缺點

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

8、查詢DNS的深層結構

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

1
2
3
4
5
6
7
1、在瀏覽器中輸入www.qq.com域名,操作系統會先檢查自己本地的hosts文件是否有這個網址映射關系,如果有,就先調用這個IP地址映射,完成域名解析。?
2、如果hosts里沒有這個域名的映射,則查找本地DNS解析器緩存,是否有這個網址映射關系,如果有,直接返回,完成域名解析。?
3、如果hosts與本地DNS解析器緩存都沒有相應的網址映射關系,首先會找TCP/ip參數中設置的首選DNS服務器,在此我們叫它本地DNS服務器,此服務器收到查詢時,如果要查詢的域名,包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析,此解析具有權威性。?
4、如果要查詢的域名,不由本地DNS服務器區域解析,但該服務器已緩存了此網址映射關系,則調用這個IP地址映射,完成域名解析,此解析不具有權威性。?
5、如果本地DNS服務器本地區域文件與緩存解析都失效,則根據本地DNS服務器的設置(是否設置轉發器)進行查詢,如果未用轉發模式,本地DNS就把請求發至13臺根DNS,根DNS服務器收到請求后會判斷這個域名(.com)是誰來授權管理,并會返回一個負責該頂級域名服務器的一個IP。本地DNS服務器收到IP信息后,將會聯系負責.com域的這臺服務器。這臺負責.com域的服務器收到請求后,如果自己無法解析,它就會找一個管理.com域的下一級DNS服務器地址(qq.com)給本地DNS服務器。當本地DNS服務器收到這個地址后,就會找qq.com域服務器,重復上面的動作,進行查詢,直至找到www.qq.com主機。?
6、如果用的是轉發模式,此DNS服務器就會把請求轉發至上一級DNS服務器,由上一級服務器進行解析,上一級服務器如果不能解析,或找根DNS或把轉請求轉至上上級,以此循環。不管是本地DNS服務器用是是轉發,還是根提示,最后都是把結果返回給本地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)
?原理:就是把客戶端發來的數據包的IP頭的目的地址,在負載均衡器上換成其中一臺RS的IP地址,并發至此RS來處理,RS處理完成后把數據交給經過負載均衡器,負載均衡器再把數據包的原IP地址改為自己的IP,將目的地址改為客戶端IP地址即可期間,無論是進來的流量,還是出去的流量,都必須經過負載均衡器
??
優點:集群中的物理服務器可以使用任何支持TCP/IP操作系統,只有負載均衡器需要一個合法的IP地址。
??
缺點:擴展性有限。當服務器節點(普通PC服務器)增長過多時,負載均衡器將成為整個系統的瓶頸,因為所有的請求包和應答包的流向都經過負載均衡器。當服務器節點過多時,大量的數據包都交匯在負載均衡器那,速度就會變慢!
??
二、IP隧道模式(VS-TUN)
??
原理:首先要知道,互聯網上的大多Internet服務的請求包很短小,而應答包通常很大。那么隧道模式就是,把客戶端發來的數據包,封裝一個新的IP頭標記(僅目的IP)發給RS,RS收到后,先把數據包的頭解開,還原數據包,處理后,直接返回給客戶端,不需要再經過負載均衡器注意,由于RS需要對負載均衡器發過來的數據包進行還原,所以說必須支持IPTUNNEL協議所以,在RS的內核中,必須編譯支持IPTUNNEL這個選項
??
優點:負載均衡器只負責將請求包分發給后端節點服務器,而RS將應答包直接發給用戶。所以,減少了負載均衡器的大量數據流動,負載均衡器不再是系統的瓶頸,就能處理很巨大的請求量,這種方式,一臺負載均衡器能夠為很多RS進行分發。而且跑在公網上就能進行不同地域的分發。
??
缺點:隧道模式的RS節點需要合法IP,這種方式需要所有的服務器支持”IP?Tunneling”(IP?Encapsulation)協議,服務器可能只局限在部分Linux系統上。
??
三、直接路由模式(VS-DR)
??
原理:負載均衡器和RS都使用同一個IP對外服務但只有DR對ARP請求進行響應,所有RS對本身這個IP的ARP請求保持靜默也就是說,網關會把對這個服務IP的請求全部定向給DR,而DR收到數據包后根據調度算法,找出對應的RS,把目的MAC地址改為RS的MAC(因為IP一致)并將請求分發給這臺RS這時RS收到這個數據包,處理完成之后,由于IP一致,可以直接將數據返給客戶,則等于直接從客戶端收到這個數據包無異,處理后直接返回給客戶端由于負載均衡器要對二層包頭進行改換,所以負載均衡器和RS之間必須在一個廣播域,也可以簡單的理解為在同一臺交換機上
??
優點:和TUN(隧道模式)一樣,負載均衡器也只是分發請求,應答包通過單獨的路由方法返回給客戶端。與VS-TUN相比,VS-DR這種實現方式不需要隧道結構,因此可以使用大多數操作系統做為物理服務器。
??
缺點:(不能說缺點,只能說是不足)要求負載均衡器的網卡必須與物理網卡在一個物理段上。

10、lvs/nginx/haproxy優缺點

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

11、linux系統監控命令,查看cpu負載內存等情況

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

三、查看網絡流量的命令

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

四、docker四中網絡模式

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隔離文件系統,Network?Namespace隔離網絡等。一個Network?Namespace提供了一份獨立的網絡環境,包括網卡、路由、Iptable規則等都與其他的Network?Namespace隔離。一個Docker容器一般會分配一個獨立的Network
Namespace。但如果啟動容器的時候使用host模式,那么這個容器將不會獲得一個獨立的Network?Namespace,而是和宿主機共用一個Network?Namespace。容器將不會虛擬出自己的網卡,配置自己的IP等,而是使用宿主機的IP和端口。
例如,我們在10.10.101.105/24的機器上用host模式啟動一個含有web應用的Docker容器,監聽tcp80端口。當我們在容器中執行任何類似ifconfig命令查看網絡環境時,看到的都是宿主機上的信息。而外界訪問容器中的應用,則直接使用10.10.101.105:80即可,不用任何NAT轉換,就如直接跑在宿主機中一樣。但是,容器的其他方面,如文件系統、進程列表等還是和宿主機隔離的。
?2?container模式
在理解了host模式后,這個模式也就好理解了。這個模式指定新創建的容器和已經存在的一個容器共享一個Network
Namespace,而不是和宿主機共享。新創建的容器不會創建自己的網卡,配置自己的IP,而是和一個指定的容器共享IP、端口范圍等。同樣,兩個容器除了網絡方面,其他的如文件系統、進程列表等還是隔離的。兩個容器的進程可以通過lo網卡設備通信。
?3?none模式
這個模式和前兩個不同。在這種模式下,Docker容器擁有自己的Network?Namespace,但是,并不為Docker容器進行任何網絡配置。也就是說,這個Docker容器沒有網卡、IP、路由等信息。需要我們自己為Docker容器添加網卡、配置IP等。
?4?bridge模式
bridge模式是Docker默認的網絡設置,此模式會為每一個容器分配Network?Namespace、設置IP等,并將一個主機上的Docker容器連接到一個虛擬網橋上。下面著重介紹一下此模式。host模式
使用Docker?run時使用–net=host指定?Docker使用的網絡實際上和宿主機一樣,在容器內看到的網卡ip是宿主機上的ip。
docker常用命令
1.?docker?version??查看docker的版本號,包括客戶端、服務端、依賴的Go等
2.?docker?info??查看系統(docker)層面信息,包括管理的images,?containers數等
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怎么實現容器間的獨立

12、實現高可用工具有哪些

1
2
hearbeat
keepalived

13、mysql數據備份工具

1
2
3
4
5
6
7
8
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功能,啟用之后可以支持單獨的表備份。

14、awk和sed的區別

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

15、介紹CDN的作用

? ?

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

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

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

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

1
1024MB

18、查看Linux系統的所有配置的命令(除了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']
查看網卡信息: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
查看系統硬盤信息和使用情況:fdisk&?disk?–?l?&df
查看各設備的中斷請求(IRQ):cat?/proc/interrupts
查看系統體系結構:uname?-a

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

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

20、寫過哪些python腳本?

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

??????????# -*- coding: cp936 -*-

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

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

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

backupDir = os.path.abspath(__file__) + ‘\\..\\..’ + ‘\\servedatabase_autobackup’
for dir in os.listdir(backupDir):? ?#os.listdir(xxx)函數返回的是一個文件列表
? ? 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’) #相當于執行控制臺命令

相關新聞

聯系我們

400-080-6560

在線咨詢:點擊這里給我發消息

郵件:[email protected]

工作時間:周一至周日,09:00-18:30

QR code
云南快乐10分开奖直播