一、如何實現 Nginx 代理的節點訪問日誌記錄客戶的 IP 而不是代理的 IP?html
在nginx代理文件中怎加一行配置文件:proxy_set_header X-Real-IP $remote_addr;java
2./var/log/messages 日誌出現 kernel: nf_conntrack: table full, dropping packet.請問是什麼緣由node
致使的?如何解決?mysql
這是iptables的報錯信息「鏈接跟蹤表已滿,開始丟包」,再想到網站那面將memcached的鏈接改成短鏈接,因爲iptables會記錄每一個鏈接的跟蹤信息,而鏈接關閉關閉過於頻繁致使鏈接跟蹤表滿,出現丟包。linux
解決方法:nginx
首先將memcached的鏈接方法改成長連接,而後再針對nf_conntrack進行修改,主要有如下幾種方式:web
1.關閉防火牆面試
2.加大iptables跟蹤表大小,調整對應的系統參數sql
3.使用裸表,不添加跟蹤標誌
4.刪除鏈接跟蹤模塊
3.linux 系統 nginx php 環境,發現 PHP-FPM 進程佔用 CPU 高,請問可能的緣由,以及如
何解決?
1、進程跟蹤
# top //找出CPU使用率高的進程PID
# strace -p PID //跟蹤進程
# ll /proc/PID/fd //查看該進程在處理哪些文件
將有可疑的PHP代碼修改之,如:file_get_contents沒有設置超時時間。
2、內存分配
若是進程跟蹤沒法找到問題所在,再從系統方面找緣由,會不會有可能內存不夠用?聽說一個較爲乾淨的PHP-CGI打開大概20M-30M左右的內存,決定於PHP模塊開啓多少。
經過pmap指令查看PHP-CGI進程的內存使用狀況
# pmap $(pgrep php-cgi |head -1)
按輸出的結果,結合系統的內存大小,配置PHP-CGI的進程數(max_children)。
3、監控
最後,還能夠經過監控與自動恢復的腳本保證服務的正常運轉。下面是我用到的一些腳本:
只要一個php-cgi進程佔用的內存超過 %1 就把它kill掉
#!/bin/sh
PIDS=`ps aux|grep php-cgi|grep -v grep|awk’{if($4>=1)print $2}’`
for PID in $PIDS
do
echo `date +%F….%T`>>/data/logs/phpkill.log
echo $PID >> /data/logs/phpkill.log
kill -9 $PID
done
檢測php-fpm進程
#!/bin/bash
netstat -tnlp | grep 「php-cgi」 >> /dev/null #2&> /data/logs/php_fasle.log
if [ "$?" -eq "1" ];then #&& [ `netstat -tnlp | grep 9000 | awk '{ print $4}' | awk -F ":" '{print $2}'` -eq "1" ];then
/usr/local/webserver/php/sbin/php-fpm start
echo `date +%F….%T` 「System memory OOM.Kill php-cgi. php-fpm service start. 」 >> /data/logs/php_monitor.log
fi
經過http檢測php執行
#!/bin/bash
status=`curl -s –head 「http://127.0.0.1:8080/chk.php」 | awk ‘/HTTP/ {print $2}’`
if [ $status != "200" -a $status != "304" ]; then
/usr/local/webserver/php/sbin/php-fpm restart
echo `date +%F….%T` 「php-fpm service restart」 >> /data/logs/php_monitor.log
fi
4.一主多從,主庫宕機,如何切換到從庫,其餘的從庫如何處理?
1.確保全部的relay log所有更新完畢,在每一個從庫上執行stop slave io_thread; show processlist;直到看到Has read all relay log,則表示從庫更新都執行完畢了
2.登錄全部從庫,查看master.info文件,對比選擇pos最大的做爲新的主庫。
3.登錄192.168.1.102,執行stop slave; 並進入數據庫目錄,刪除master.info和relay-log.info文件, 配置my.cnf文件,開啓log-bin,若是有log-slaves-updates和read-only則要註釋掉,執行reset master
4.建立用於同步的用戶並受權slave,同第五大步驟
5.登陸另一臺從庫,執行stop slave中止同步
6.根據第七大步驟鏈接到新的主庫
7.執行start slave;
8.修改新的master數據,測試slave是否同步更新
5.誤操做 drop 語句致使數據破壞,請給出恢復思想及實際步驟。
思想:
法1: 一、經過防火牆禁止web等應用向主庫寫數據或者鎖表,讓數據庫中止更新。
##檢查全備及binlog日誌 ;
二、將全備恢復;
mysqlbinlog -d databasename mysql-bin.000014 > bin.sql
三、將全部binlog彙總,轉成sql語句,剔除drop語句,恢復數據;
mysql -uroot -p123456 databasename < bin.sql
(注意數據的備份,不要破壞原始數據)
四、後續:(數據沒法寫入)因此無需恢復。
五、若是是update語句(也須要中止訪問)
法2:一、若是主庫持續有數據寫入;
二、中止一個從庫;而後在主庫刷新binlog;
三、把mysql-bin.000014恢復成bin.sql(去掉drop語句);
四、把全備數據sql及操做前的增量bin.sql恢復到從庫。
五、中止主庫;把主庫刷新後的binlog解析爲sql恢復到從庫;
五、切換爲從庫提供服務;
#法2可能會有主鍵衝突等其它的問題,能夠經過修改id或者延遲解決,儘可能使用法1停庫解決;
#平時工做要注意數據庫的權限管理及流程管理,防患於未然。
6.請舉一個生產中實際的例子網站打開慢因爲數據庫慢致使的。
數 據庫負載高,有慢查詢,作聯合索引案例
數據庫負載高,有慢查詢,分析web日誌,可能有爬蟲,封其ip
7. 經過 kill -9 野蠻粗魯殺死數據庫致使數據庫啓動故障,給出排除方法或者經驗。
暫時沒有答案:
8.IDC 機房帶寬忽然從平時 100M 增長到 400M,請你分析問題所在,並解決。
.真實遭受DDOS攻擊(遇到過幾回,形成影響的很少見,其中還有黑客勒索的案例)。
b.內部服務器中毒,大量外發流量(這個問題老男孩接警5次以上)
c.網站元素(如圖片)被盜連,在門戶頁面被推廣致使大量流量產生(接警3次以上)
d.合做公司來抓數據,如:對合做單位提供了API數據接口(有合做的公司的朋友瞭解這個)
e.購買了CDN業務,CDN猛抓源站(這個次數也很多)。
9.正在工做的 linux,發現文件系統只讀了,你以爲致使問題的緣由是什麼,如何解決?
一、重啓看是否能夠修復(不少機器能夠)
二、使用用 fsck – y /dev/hdc6 (/dev/hdc6指你須要修復的分區) 來修復文件系統
三、若,在進行修復的時候有的分區會報錯,從新啓動系統問題依舊
查看下分區結構
[root@localhost ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (ro)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
查看ro掛載的分區,若是發現有ro,就從新mount
umount /dev/sda1
mount /dev/sda1 /boot
若是發現有提示「device is busy」,找到是什麼進程使得他busy
fuser -m /boot 將會顯示使用這個模塊的pid
fuser -mk /boot 將會直接kill那個pid
而後從新mount便可。
四、直接remount,命令爲
[root@localhost ~]# mount -o rw,remount /boot
10.磁盤報錯「No space left on device」,可是 df -h 查看磁盤空間沒滿,請問爲何?
1.1首先查看咱們的磁盤剩餘狀況
[root@admin /]# df -h #發現磁盤沒有滿 還有%47
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.9G 3.1G 3.5G 47% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 33M 147M 19% /boot
1.2 建立目錄測試報錯
#建立目錄報錯文件仍是正常
[root@admin/]# mkdir test
mkdir: cannot create directory `test': No space left on device
#查看磁盤inode
[root@admin/]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 462384 462384 0 100% /
tmpfs 125517 1 125516 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
#最後發現目錄backup中inode 滿了
[root@admin/]# df -i /backup/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 462384462384 0 100% /
1.3解決方案
#刪除backup目錄中不經常使用的文件數據
#因爲本文是測試inode滿 因此刪除全部數據,工做中要注意彙報上級。
[root@admin /]# \rm -rf /backup/
#公司解決方案
刪除/backup目錄中的部分文件,釋放出/backup分區的一部分inode,特別要留意那些spool出來的文件,這種文件通常會佔用比較多的節點,由於比較小並且零碎,同時要多留意日誌文件信息等
二、用軟鏈接將空閒分區/opt中的newcache目錄鏈接到/data/cache,使用/opt分區的inode來緩解/backup分區inode不足的問題:
ln-s /opt/newcache /data/cache
三、更換服務器,用高配置的服務器替換低配置的服務器。不少時候用錢去解決問題比用技術更有效,堆在我辦公桌上5臺全新的DELL PowerEdge 1950 服務器即將運往IDC機房。通常不建議
1.4檢查inode
Filesystem InodesIUsed IFree IUse% Mounted on
/dev/sda3 462384 59141403243 13% /
tmpfs 125517 1 125516 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
十一、磁盤空間滿了,刪除了一部分 nginx access 日誌,可是,發現磁盤空間仍是滿的,請問
爲何?
刪除的日誌信息,一部分可能仍是被進程調用,所以,須要重啓nginx服務來釋放進程;
或者實際生產環境中使用&gt;/log/access.log清空文件
12.請利用 shell 開發一個 rsync 服務的啓動中止腳本並經過 chkconfig 進行開關機管理
root@sky9896 /]# chkconfig --add rsyncd
rsyncd 服務不支持 chkconfig
[root@sky9896 /]# cat /etc/init.d/rsyncd
#/bin/bash
# chkconfig: 2345 20 80 #添加該條即解決服務支持chkconfig
[root@sky9896 /]# chkconfig --add rsyncd
[root@sky9896 /]# chkconfig --list rsyncd
rsyncd 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
[root@sky9896 /]# /etc/init.d/rsyncd start
-bash: /etc/init.d/rsyncd: 權限不夠
[root@sky9896 /]# chmod 777 /etc/init.d/rsyncd #受權後,即解決
[root@sky9896 /]# /etc/init.d/rsyncd start #啓動服務
rsyncd is started.
[root@sky9896 /]# netstat -lnt|grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 :::873
設置開機自啓動的過程:
[root@sky9896 /]# chkconfig --add rsyncd #添加服務
[root@sky9896 /]# chkconfig --list rsyncd #顯示服務
rsyncd 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
[root@sky9896 /]# chkconfig --del rsyncd #刪除該服務
[root@sky9896 /]# chkconfig --list rsyncd
rsyncd 服務支持 chkconfig,但它在任何級別中都沒有被引用(運行「chkconfig --add rsyncd」)
13.寫一個 tomcat 啓動腳本,手工 OK,可是放入定時任務就是不執行,請問爲何?
最近遇到了一些sh不能在crontab定時任務中自動執行的問題
期間因爲不太瞭解,故走了一點彎路,如今總結下來可能第一次
進行設置遇到的問題。以絕後患!我所用過的操做系統爲HP-unix&linux&sco-unix,均測試經過
1,首先確保sh腳本具備可執行屬性
即chmod +x ***.sh
或chmod +777 ***.sh
2,確保sh腳本手工執行正常
即在當前系統內手工執行sh腳本之後能收到本身指望獲得的結果
3,加載環境變量
這個問題是常常容易被忽略的問題,一般咱們在第二步的時候手動執行腳本能獲得本身想要的結果,但是設置好crontab以後,總不能獲得本身想要的結果,總感受腳本沒有被執行。或者執行後沒有獲得正常的結果。不少均是因爲沒有加載所在用戶的環境變量所引發的。所以最好在本身的腳本首兩行添加環境變量的導入。以下:其中telstar是我在操做系統下所在的用戶。在該目錄下執行ls -a能夠查看到.cshrc文件。咱們在本身的sh腳本中增長source 該文件,將本用戶的環境變量加載,那麼如下的內容就能正常被執行了
#!/bin/csh#source /telstar/.cshrc
下面貼出個人定時重啓tomcat的一個例子
#!/bin/csh#source /telstar/.cshrckill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`cd /telstar/tomcat/binsleep 15./startup.sh &
其實這裏不加載環境變量的話,sh前加上絕對路徑,應該也能夠,這個沒有測試,有興趣的朋友能夠嘗試一下
#!/bin/csh
#source /telstar/.cshrc
kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`
sleep 15
/telstar/tomcat/bin./startup.sh &
總之不少手動能正常執行的sh,crontab不能執行大多數狀況是因爲沒有加載環境變量引發的,這裏貼出來,以絕後患
#!/bin/csh
#source /telstar/.cshrc
kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`
cd /telstar/tomcat/bin
sleep 15
./startup.sh &
14.apache 服務的經常使用工做模式及對應特色,企業如何選擇對應模式。
apache的工做模式有:beos,event,worker,prefork,mpmt_os2。
查看:http –l
apachectl –l
beos工做模式(跟linux關係不大,或者暫時用不上)
在Beos系統上的工做模式,使用一個單獨的控制線程來建立和控制處理請求的工做線程。
event工做模式(不太穩定,或者說暫時用不上)
event 模式因爲把服務進程從連接中分離出來,在開啓KeepAlive場合下相對worker模式可以承受的了更高的負載。event模式爲 worker開發的變種模式,配置以及指令與worker徹底相同。不過event模式不能很好的支持https的訪問,有時還會出現一系列的問題。
worker工做模式(與php配合很差)
worker模式因爲使用線程來進行處理請求,因此可以處理海量請求,而系統資源的開銷要小於基於進程的服務器。同時worker模式也使用了多進程,每一個進程又有着多個線程,以得到基於進程服務器的穩定性。
mpmt_os2工做模式(不多用,或者說暫時用不上)
mpmt_os2是專門針對OS/2優化過的混合多進程多線程多路處理模塊(MPM) 。
重點:prefork工做模式。
一、編譯的時候使用#–with-mpm=prefork對應的工做模式名稱來修改工做模式。
二、prefork工做模式是linux下apache安裝時候的默認工做模式,是使用最廣泛的工做模式。
三、原理:有一臺正在運行的apache服務器,用戶A訪問該apache的時候apache創建一個新的進程1處理用戶A的請求。
這時又有一個用戶B訪問該apache,apache又創建一個新的進程2處理用戶B的請求。
後來又有用戶C,D,E訪問該apache,apache又創建三個進程3,4,5處理他們的請求。
若是每當一個新用戶訪問該apache,apache再創建一個新的進程處理用戶的請求,是否是太慢了呢?
因此apache的prefork模式在apache第一次啓動的時候就創建5個進程,等待用戶的鏈接請求,有一個用戶訪問,就有一個進程處理他的請求。
那麼若是有5個用戶同時訪問apache,apache第一次創建的5個進程所有用光了,因此apache就再重新在創建5個進程,等待下一批用戶的請求。
prefork模式會根據服務器的硬件狀況,設定apache最多隻能同時創建256個進程。再多的請求就只能等待前面的進程處理完畢在進行處理。
15.請描述 raid 0 1 5 10 的原理、相關特色 ,性能區別,集羣中各角色如何選擇 RAID。
RAID是磁盤冗餘陣列(redundant array of independent disks)簡稱磁盤陣列。
RAID是一種把多塊獨立的物理磁盤按不一樣的raid級別組合起造成一個磁盤組,在邏輯上看是一塊大的磁盤,能夠提供比單個物理磁盤更大的存儲容量或更高的存儲性能,同時又能提供不一樣級別數據冗餘備份的一種技術。
用RAID最直接的好處是:
-
提高數據安全性
-
提高數據讀寫性能
-
提供更大的單一邏輯磁盤數據容量存儲
1.2.實現模式
-
軟件磁盤陣列(software RAID),主要由電腦主板CPU處理數組存儲做業,缺點爲耗損較多CPU資源運算RAID,優勢是價格低。
-
硬件磁盤陣列(Hardware RAID),RAID卡上內置處理器,不須要服務器的CPU運算。優勢是讀寫性能最快,不佔用服務器資源,能夠用於任何操做系統,缺點是其售價很高,但在企業生產環境首選硬RAID解決方案。
DELL服務器,默認就會支持RAID0,1,若是RAID5,10就須要買raid卡了。
1.3 raid與LVM區別
LVM是在硬盤的硬盤分區上又建立一個邏輯層,以方便系統管理硬盤分區系統。
區別:
LVM:靈活的管理磁盤的容量,有必定的冗餘和性能功能,但很弱。
RAID:更側重性能和數據安全。
1.4 RAID級別間優缺點對比
運維生產環境經常使用RAID級別爲RAID0,RAID1, RAID5 ,RAID10
RAID級別 |
最少磁盤要求 |
關鍵優勢 |
關鍵缺點 |
實際應用場景 |
RAID0 |
1塊 |
讀寫速度快 |
沒有任何冗餘 |
MySQL Slave(數據庫的從庫),集羣的節點RS |
RAID1 |
2塊(只能) |
100%冗餘,鏡像 |
讀寫性能通常,成本高 |
單獨的,數據很重要,且不能宕機的業務,監控,系統盤 |
RAID5 |
3塊 |
具備必定性能和冗餘,能夠壞一塊盤 |
寫入性能不高 |
通常的業務均可以用 |
RAID10 |
4塊 |
讀寫速度很快,100%冗餘 |
成本高 |
性能和冗餘要求很好的業務。數據庫主庫和存儲的主節點。 |
2.1 raid 0介紹
RAID 0 又稱爲Stripe(條帶化)或striping(條帶模式),它在全部RAID級別中具備最高的存儲性能(磁盤容量不浪費,讀寫很快)。
RAID0 提升存儲性能的原理是把連續的數據分散到多個磁盤上存取,這樣,系統有數據請求就能夠被多個磁盤並行的執行,每一個磁盤執行屬於它本身的那部分數據請求,這種數據上的並行操做能夠充分利用總線的帶寬,顯著提升磁盤總體存取性能。
要製做RAID0至少要1塊物理磁盤,例如DELL服務器帶有RAID卡,若是不作RAID就不能使用磁盤,除非將磁盤直接接入主板,所以將一塊磁盤坐RAID0使用。
2.2 raid0 特色
關注點 |
描述 |
容量 |
是5塊盤加在一塊兒的容量。在全部RAID級別中具備最高的存儲性能,原理是把連續的數據分散到多個磁盤上存取。 |
性能 |
理論上磁盤讀寫速度比單盤提高5倍,但因爲總線帶寬等多種因素的影響,實際的提高速率確定會低於理論值,可是,大量數據並行傳輸與串行傳輸比較,提速效果顯然毋庸置疑,磁盤越多倍數越小。 |
冗餘 |
無任何冗餘,壞1塊盤,整個RAID就不能用了 |
場合 |
適合於大規模併發讀寫,但對數據安全性要求不高的狀況,如mysql slave(數據塊從庫),集羣的節點RS(服務員) |
特色 |
速度快,無冗餘,容量無損失 |
3.1RAID 1 介紹
RAID 1 又稱爲Mirror 或Mirrooring(鏡像),它的宗旨是最大限度的保證用戶數據的可用性和可修復性,RAID 1 的操做方式是把用戶寫入硬盤的數據百分之百的自動複製到另一個硬盤上,從而實現存儲雙份的數據。
要製做RAID 1,只支持兩塊盤,整個RAID大小等於兩個磁盤中最小的那塊的容量,所以,最好使用一樣大小的磁盤,在存儲時同時寫入兩塊磁盤,實現數據完整備份,但相對下降了寫入性能,可是讀取數據時能夠併發,至關於兩塊RAID 0的讀取效率。
關注點 |
描述 |
容量 |
損失50%的數據容量,列如2塊1T的盤,作完RAID1後容量爲1T |
性能 |
Mirror不能提升存儲性能,理論上寫性能和單盤差很少。 |
冗餘 |
在全部RAID級別中,RAID1提供最高的數據安全保障,冗餘度100% |
特色 |
100%冗餘,容量損失半。 |
4.1 RAID 5介紹
RAID 是一種存儲性能,數據安全和存儲成本兼顧的存儲解決方案。
RAID 5須要三塊或以上的物理磁盤,能夠提供熱備盤實現故障恢復,採用奇偶校驗,可靠性強,只有同時損壞2塊盤時數據纔會損壞,只損壞1塊盤時,系統會根據存儲的奇偶校驗位重建數據,臨時提供服務,此時若是有熱備盤,系統還會自動在熱備盤上重建故障磁盤上的數據。
數據存儲方式如圖所示DP爲D1,D2,D3的奇偶校驗信息,其餘以此類推,由圖看出,RAID5 不對存儲的數據進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成的RAID5的各個磁盤上,而且奇偶校驗信息和相對應的數據分佈存儲於不一樣的磁盤上,當RAID5的一個磁盤數據發生損壞後,利用剩下的數據和相應的奇偶校驗信息區恢復被損壞的數據。
關注點 |
描述 |
性能 |
RAID 5 具備和RAID 0 相近的數據讀取速度,只是多了奇偶校驗信息,寫入數據速度比單個磁盤寫入操做稍慢。 |
容量 |
損失一塊盤的數據容量10*600G 9*600G |
冗餘 |
可損失一塊盤,RAID數據安全保障程度比RAID 1 低而磁盤空間利用率要比raid 1 高 |
場合 |
RAID 5 能夠理解爲是RAID 0 和RAID 1的折中方案,適合對性能和冗餘都有必定要求,又都不是十分高的狀況。 mysql的主從庫均可以,存儲也能夠,普通的服務器爲了減小維護成本,又保持必定冗餘和讀性能均可以作RAID 5 |
特色 |
容量損失一塊盤,寫數據經過奇偶校驗,RAID 1和 RAID 0的折中方案。 |
5.1 raid10介紹
RAID 1+0 也被稱爲RAID 10標準,實際是將RAID 1和RAID 0標準結合的產物,在連續地以位或字節爲單位分割數據而且並行讀/寫多個磁盤的同時,爲每一塊磁盤做磁盤鏡像進行冗餘。它的優勢是同時擁有RAID 0的超凡速度和RAID 1的數據高可靠性,可是CPU佔用率一樣也更高,並且磁盤的利用率比較低。
極高的讀寫效率和較高的數據保護、恢復能力
注意一下Raid 10 和 Raid01的區別:
RAID01又稱爲RAID0+1,先進行條帶存放(RAID0),再進行鏡像(RAID1)。
RAID10又稱爲RAID1+0,先進行鏡像(RAID1),再進行條帶存放(RAID0)。
關注點 |
描述 |
性能 |
極高的讀寫效率和較高的數據保護、恢復能力 |
冗餘 |
RAID10提供100%的數據冗餘 |
應用場合 |
RAID 10適用於數據庫存儲服務器等須要高性能、高容錯但對容量要求不大的場合 |
特色 |
RAID 1和RAID 0標準結合的產物 |