如何優化 Linux系統(能夠不說太具體)?
一、root,添加普通用戶,經過sudo受權管理;二、更改默認的遠程鏈接SSH服務端口及禁止root用戶遠程鏈接;三、自動更新服務器時間;四、配置國內yum源;五、關閉selinux及iptables(iptables工做場景若是有外網IP必定要打開,高併發除外); 六、調整文件描述符的數量;七、精簡開機啓動服務(crond rsyslog network sshd);八、內核參數優化(/etc/sysctl.conf);九、更改字符集,支持中文,但建議仍是用英文字符集,防止亂碼;十、鎖定關鍵系統文件;十一、清空/etc/issue,去除系統及內核版本登陸前的屏幕顯示
Centos開機流程:
一、開機加電自檢,加載BIOS的硬件信息,獲取第一個啓動設備;二、讀取第一個啓動設備MBR的引導加載程序(grub)的啓動信息;三、加載核心操做系統的核心信息,核心開始解壓縮,並嘗試驅動全部的硬件設備;四、核心執行init程序,並獲取默認的運行信息;五、init程序執行/etc/rc.d/rc.sysinit文件;六、啓動核心的外掛模塊;七、init執行運行的各個批處理文件scripts;八、init執行/etc/rc.d/rc.local;九、執行/bin/login程序,等待用戶登陸;十、登陸後開始以shell控制主機。
redhat 6.X版本系統 和 centos 7.X版本有啥區別?
桌面系統(6/GNOE2.x、7/GNOME3.x)、文件系統(6/ext四、7/xfs)、內核版本(6/2.6x、7/3.10x)、防火牆(6/iptables、7/firewalld)、默認數據庫(6/mysql、7/mariadb)、啓動服務(6/service啓動、7/systemctl啓動)、網卡(6/eth0、7/ens192)
centos7破解root口令:
一、首先在菜單界面按【e】鍵,進入啓動文件界面後;二、按【↓】拉到底部
在 "LANG=zh_cn.UTF-8" 同行後面加上「init=/bin/sh」 ;而後按【Ctrl+X】進入「單用戶模式」
三、輸入【ls】,回車,再輸入【mount –o remount ,rw / 】,回車 (注意空格)
四、輸入【passwd】(注意:密碼不能少於8位),重複輸入兩次密碼
五、輸入【touch /.autorelabel】,回車,再輸入【exec /sbin/init】回車,以便重啓系統。
安裝虛擬機時修改網卡名稱爲eth0的方法:(按tab鍵即會彈出)
web服務器的負載架構:
用tcpdump嗅探80端口的訪問看看誰最高:
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -20
統計/var/log/httpd/access.log日誌訪問頻繁前十的地址,並從大到小排序。
cat access.log |cut -d" " -f1 |sort |uniq -c |sort -nr|head -n10
常見的Linux發行版本都有什麼?你最擅長哪個?它的官網網站是什麼?說明你擅長哪一塊?
常見的Linux發行版本有Redhat、Centos、Debian、Ubuntu、Suse
最擅長Redhat和Centos;Redhat官網:www.redhat.com; Centos官網:www.centos.org
我最擅長Linux基本命令操做及相關服務搭建
用虛擬機安裝了一臺Linux系統,忽然想克隆一臺服務器,克隆後發現沒法上網,如何解決?要使服務器上外網,必須知足的條件有哪些?須要配置什麼?
a、編輯網卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,將HWADDR和MAC地址這兩行刪除。b、修改文件/etc/udev/rules.d/70-persistent-net.rules,刪除以前eth0所在的行,將下一行eth1修改成eth0;c、reboot
要上外網須要:可以連接internet的網線(或無線)、有網卡; 須要配置:IP、netmask、gateway、dns(自動或手動都ok,服務器通常自動)
某天誤操做,執行了rm -rf * ,會有哪些狀況發生?請舉例。
a、若是當前目錄爲"/tmp" ,那麼這個目錄下的東西會所有刪除(默認不包含隱藏文件) b、若是當前目錄爲"/",那麼系統上的數據將會丟失,且沒法啓動,系統崩潰(謹慎使用這個命令)
軟硬:{共性}:修改軟硬連接文件,全部的文件都是同步修改的。
硬連接: 本質:同一個文件多個名字、連接數:有一個以上的連接,不可跨分區,只容許對文件建立連接,不依賴原始文件,刪除硬連接文件的源文件,硬連接文件仍然存在,不佔用空間,格式:ln 目標文件 連接名
軟鏈接:本質: 一個文件對應快捷方式,是不一樣文件,連接數:只有一個連接,能夠跨分區,能夠對目錄和文件夾進行連接,依賴於原始文件,刪除源文件,軟鏈接則指向一個空文件,它具備依賴性,佔用磁盤空間,格式: ln -s 目標文件 源文件
取IPV4地址:ifconfig ens33| grep -Eo "([0-9]{1,3}.){3}[0-9]{1,3}" head -1
取分區利用率:df | grep " /dev/sd " | grep -o " [0-9]{1,3}%" | grep -o " [0-9]+ " | sort -nr | head - n1
取分區利用率:sed -rn ' s/^([^[:space:]]+).([0-9]+)%./\2/p'
用戶:sed -rn ' s/^([^[:space:]]+).([0-9]+)%./\1/p'
查看版本型號: cut -d "." -f1 /etc/redhat-release |egrep -o "[0-9]+"
查看版本型號:grep -o " [0-9]+. " /etc/redhat-release | grep -o " [0-9]+ "
查看版本型號:sed -rn " s/.([0-9]+)../\1/p " /etc/redhat-release
匹配手機號碼:egrep -o " 1[0-9]{10} " tel.txt
匹配email郵箱:egrep -o "([[:alnum:]]|_)+@[[:alnum:]]+.com$" mail.txt
使用sed命令取IPV4地址:
一、|sed -n '2p' |sed -r 's/inet//' |sed -r 's/netmask.//' |tr -d " " 二、|sed -n '2p' sed -e 's/^.inet//' -e 's/.//' 3、|sed -n -e '2s/^.inet//' -e '2s/ .//p' 四、|sed -nr '2s@.inet (.) .n.@\1@p' 五、|sed -nr '2s/[^0-9]+([0-9.]+)./\1/p'
在Linux系統中,以文件方式訪問設備。每一個文件用索引節點來標識。 Linux內核引導時,從文件/etc/fstab中讀取要加載的文件系統。所有磁盤塊由四個部分組成,分別爲引導塊、專用塊、i節點表塊和數據存儲塊。 內核分爲:進程管理系統、內存管理系統、I/O管理系統、文件管理系統。
網絡管理具有:配置管理、故障管理、性能管理、安全管理和計費管理等功能。網絡管理的重要任務是:控制、監控 。網絡管理員對WWW服務器進行訪問、控制存取和運行等控制,這些控制可在 httpd.conf 文件中體現。PHP和MySQL的聯合使用解決了:在WWW服務器上處理數據庫的訪問問題。
進程的運行有兩種方式,即:獨立運行和使用父進程運行。 進程查看的命令:ps、top;進程調度的命令:at、crontab、batch、kill。
爲什麼要給硬盤分區:①、易於管理和使用;②、有利於數據安全;③、節約尋找文件的時間
①、文件系統查看命令:df;②、統計目錄或文件大小:du;③、文件系統修復命令:fsck;④、顯示磁盤狀態命令:dumpe2fs;實現從IP地址到以太網MAC地址轉換的命令爲:arp
快速查找/root目錄中大於2M的文本,並將文件中的magedu,換成www.magedu.com :
find /root --size +2M -type f -exec sed -i 's/magedu/www.magedu.com/g' {} \;
以txt結尾,30天沒有修改的文件大小大於20K同時具備執行權限的文件並備份到/data/backup/目錄下:
find / -name *txt -mtime +30 -type f -size +20k -perm a=x -exec cp {} /data/backup/ \;
每次開機在/tmp目錄下建立一個當天的日期文件夾(提示:當前日期表示的方法爲:date +%Y%m%d
):
echo "mkdir /tmp/date +%Y%m%d
" >> /etc/rc.d/rc.local
如何開啓linux服務器路由轉發功能? echo "1" > /proc/sys/net/ipv4/ip_forward
如何將本地80端口的請求轉發到8080端口,當前主機ip 192.168.16.1,網卡eth0:
iptables -t nat -A PREROUTING -i eth0 -d 192.168.16.1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
如何添加一塊新的50G硬盤到linux服務器系統做爲單獨的分區,並正常使用?
a、格式化分區用fdisk命令進行,b、製做文件系統用mkfs.xfs命令進行,c、掛載用mount命令進行,d、編輯配置文件「 /etc/fstab 」實現自動掛載。
說出配置過的路由器型號?並舉例經常使用的配置命令?
H3C路由器;system-view 進入系統視圖模式、display ip routing-table 顯示當前路由表、 shutdown 關閉以太網端口、quit 退出。
交換機的端口模式有幾種?各有什麼功能?
一、RJ-45接口。這種接口應用最爲廣泛。因其適配線纜\傳輸介質製做簡單,傳輸速率快。支持的雙工工做方式齊全。
二、BNC。所用的傳輸介質爲細同軸電纜,當前已不常見。不要覺得一講以太網就都是RJ-45接口的,只不過雙絞線類型的RJ-45接口在網絡設備中很是廣泛而已。
三、AUI。所用的傳輸介質爲粗同軸電纜。當前可能是廣電寬帶採用同軸電纜做爲網絡傳輸介質,範圍不廣。爲了在RJ-45接口的基礎上兼顧同軸電纜介質的網絡鏈接,配上BNC或AUI接口。
有客戶反映原來能通47.58.23.99的ip,如今不通了,應該怎麼排查?
先看水晶頭是否鬆動,再看網絡適配器是否鏈接,再看onboot是否爲yes,再檢查客戶端是否指定DNS,是否能ping通百度。
su、su -、sudo三者區別:
su:非交互式登陸,在環境變量下不切換。su-:交互式登陸(徹底切換),當前目錄改變爲切換用戶,在家目錄,連同環境一同切換。sudo相對於權限無限制性的su來講,仍是比較安全的,因此sudo也能被稱爲受限制的su,另外sudo是須要受權許可的,因此也被稱爲受權許可的su。sudo執行命令的流程是當前用戶切換到root,而後以root身份執行命令,執行完成後,直接退回到當前用戶,而這些的前提是要經過sudo的配置文件/etc/sudoers來進行受權。
三個私有地址網絡: A:10.0.0.0/8~10.255.255.255/8 A類保留1個網絡數爲私有地址:10.0.0.0 B、172.16.0.0/16 ~ 172.31.255.255/16 31-16+1=16個地址用於內部 C、192.168.0.0/24 ~ 192.168.255.255/24 255-0+1=256個地址用於內部
cp /etc/fstab /data/dir 問:它須要有最小權限是什麼?
一、探究cp外部命令有啥權限,它至少必需要有x:執行權限。二、/etc/fstab:/fstab 只要有讀權限就能夠了,前提是/etc要有x執行權限,/etc能夠沒有讀權限,只要/etc有基本可執行權限進得去就能夠。三、/data/dir:至少要有執行和寫權限。
cpu單核和多核有啥區別?
雙核CPU就是能處理多份任務,順序排成隊列來處理。單核CPU一次處理一份任務,輪流處理每一個程序任務。雙核的優點不是頻率,而是對付同時處理多件事情。單核同時只能幹一件事,好比你同時在後臺BT下載,前臺一邊看電影一邊拷貝文件一邊QQ。
網絡穩定性若是保證?
1.選用可靠的設備,規範的綜合佈線,打造穩定的基礎網絡;2.對網絡進行約束,上網行爲管理;避免病毒,p2p下載。3.有效的網絡監控,對網絡的主幹線路進行速率監控。
應用系統中常見的網絡故障有哪些,如何去分析和解決這些問題?
1.病毒問題:遭遇DOOs對網絡形成波動。或者是大規模的丟包。斷網,或者是網絡地址被欺騙;2.線路迴路:會形成網絡頻繁的中斷,甚至完全中斷。3.設備老化:高溫。粉塵,不穩定電壓等因素都會形成設備的不穩定。不少時候重啓設備就恢復正常。4.地址衝突:網絡配置錯誤會直接形成重要設備的網絡中斷。
web網站訪問緩慢排查思路:
一、服務器狀態:負載狀況,CPU,網絡,內存,日誌是否作切割。若是單臺服務器性能受限,能夠調整爲分佈式架構,LB數 據庫分庫分表索引等。
二、DB響應慢:檢查慢查詢日誌,show processlist查看當前DB狀態,看哪些請求停留較多;代碼中記錄SQL執行時間;分析SQL性能,考慮是否優化索引,或者分庫分表,增長緩存;檢查磁盤IO;查看binlog的寫入速率。 三、前端問題:減小HTTP請求;頁面設計不佳。
闡述iptables的工做原理,四表五鏈:
iptables是工做在TCP/IP的二、三、4層,當主機收到一個數據包後,數據包先在內核空間處理,若發現目標地址是自身,則傳到用戶空間中交給對應的應用程序處理,若發現目標不是自身,則會將包丟棄或進行轉發。
4表:raw表:關閉鏈接追蹤;mangle表:報文修改;nat表:地址轉換;filter表:過濾;5鏈:input、output、forward、prerouting、postrouting。
流入本機:PREROUTING --> INPUT-->用戶空間進程
流出本機:用戶空間進程 -->OUTPUT--> POSTROUTING
轉發:PREROUTING --> FORWARD --> POSTROUTING
內網至外網用postrouting sNAT 外網至內網用prerouting DnAT
一、鏈管理: -N: new 自定義一條新的規則鏈 -X: delete 刪除自定義的空的規則鏈 -P:policy 設置默認策略:ACCEPT:接受 DROP:丟棄 -E:重命名自定義鏈
二、查看:-L: list, -n:以數字格式顯示地址和端口號 -v:詳細信息
三、規則管理:-A : append 追加 -I:insert 插入, -D:delete 刪除 -F:flush 清空指定規則鏈 -R:replace 替換指定鏈上的規則編號 -Z: zero :置零
mysql部分:四種隔離級別:
A、READ UNCOMMITTED(未提交讀),事務中的修改,即便沒有提交,對其餘事務也都是可見的,事務能夠讀取未提交的數據,也被稱爲髒讀(Dirty Read),這個級別會致使不少問題
B、READ COMMITTED(提交讀),大多數數據庫系統的默認隔離級別,一個事務開始時,只能「看見」已經提交的事務所作的修改,一個事務從開始直到提交以前,所作的任何修改對其餘事務都是不可見的,也叫不可重複讀(nonrepeatable read),有可能出現幻讀(Phantom Read),指的是當某個事務在讀取某個範圍內的記錄時,另一個事務又在該範圍內插入了新的記錄,當以前的事務再次讀取該範圍的記錄時,會產生幻行(Phantom Row)
C、REPEATABLE READ(可重複讀),經過InnoDB和XtraDB存儲引擎,是MySQL的默認事務隔離級別
D、SERIALIZABLE(可串行化)最高級別,經過強制事務串行執行,避免了幻讀問題,會在讀取的每一行數據上都加鎖,可能致使大量的超時和鎖爭用的問題。
MySQL事務ACID:
原子性(atomicity):一個事務必須被視爲一個不可分割的最小工做單元,整個事務中全部操做要麼所有提交成功,要麼所有失敗回滾,對於一個事務來講,不可能只執行其中的一部分操做
一致性(consistency):數據庫老是從一個一致性的狀態轉換到另一個一致性的狀態
隔離性(isolation):一個事務所作的修改在最終提交之前,對其餘事務是不可見的
持久性(durability):一旦事務提交,則其所作的修改就會永久保存到數據庫中
MySQL索引的優勢:
三個優勢:一、索引大大減小了服務器須要掃描的數據量 ;二、索引能夠幫助服務器避免排序和臨時表;三、索引能夠將隨機I/O變爲順序I/O
什麼狀況下應不建或少建索引:
一、表記錄太少;二、常常插入、刪除、修改的表;三、數據重複且分佈平均的表字段,假如一個表有10萬行記錄,有一個字段A只有T和F兩種值,且每一個值的分佈機率大約爲50%,那麼對這種表A字段建索引通常不會提升數據庫的查詢速度。四、常常和主字段一塊查詢但主字段索引值比較多的表字段
行級鎖定的優缺點:
優勢:一、當在許多線程中訪問不一樣的行時只存在少許鎖定衝突;二、回滾時只有少許的更改 三、能夠長時間鎖定單一的行
缺點:一、比頁級或表級鎖定佔用更多的內存;二、當在表的大部分中使用時,比頁級或表級鎖定速度慢,由於你必須獲取更多的鎖;三、若是你在大部分數據上常常進行GROUP BY操做或者必須常常掃描整個表,比其它鎖定明顯慢不少;四、用高級別鎖定,經過支持不一樣的類型鎖定,你也能夠很容易地調節應用程序,由於其鎖成本小於行級鎖定
key和index的區別:
一、key是數據庫的物理結構,它包含兩層意義和做用,一是約束(偏重於約束和規範數據庫的結構完整性),二是索引(輔助查詢用的)。包括primary key,unique key,foregin key等
二、index是數據庫的物理結構,它只是輔助查詢的,它建立時會在另外的表空間(mysql中的innodb表空間)以一個相似目錄的結構存儲。索引要分類的話,分爲前綴索引、全文本索引等
Mysql主從配置:一、master開啓二進制日誌;二、master和slave配置不一樣的server_id;三、slave配置中繼日誌;四、master作帳戶受權;五、slave開啓同步。
MySQL主從同步過程:
1:Slave端的IO線程鏈接上Master,並向Master請求指定日誌文件的指定位置(新部署的Master和Slave從最開始的日誌)以後的日誌。2:Master接收到來自Slave的IO線程請求,負責IO複製的IO線程根據Slave的請求信息讀取相應的日誌內容,而後將本地讀取的bin-log的文件名、位置及指定位置以後的內容一塊兒返回給Slave的IO線程處理。 3:Slave的IO線程將接收到的信息依次添加到Slave端的relay-log文件的最末端,並將讀取到的Master端的bin-log的文件名和位置記錄到Master-info文件中,以便在下一次讀取的時候可以清楚的告訴Master「我須要從哪一個bin-log的哪一個位置開始日後的日誌內容請發給我」。
4:Slave的sql線程檢查到relay-log中新增了內容後,會立刻將relay-log中的內容解析爲在Master端真實執行時候的可執行命令,並順序執行,從而保證對Slave的MySQL進行響應的增長或刪除等操做,最終實現和Master數據保持一致。
MySQL主從複製原理以及流程:
1、l 主節點 binary log dump 線程
當從節點鏈接主節點時,主節點會建立一個log dump 線程,用於發送bin-log的內容。在讀取bin-log中的操做時,此線程會對主節點上的bin-log加鎖,當讀取完成,甚至在發動給從節點以前,鎖會被釋放。
2、l 從節點I/O線程
當從節點上執行start slave
命令以後,從節點會建立一個I/O線程用來鏈接主節點,請求主庫中更新的bin-log。I/O線程接收到主節點binlog dump 進程發來的更新以後,保存在本地relay-log中。
3、l 從節點SQL線程
SQL線程負責讀取relay log中的內容,解析成具體的操做並執行,最終保證主從數據的一致性。
MySQL數據庫自身提供的主從複製功能能夠方便的實現數據的多處自動備份,實現數據庫的拓展。多個數據備份不只能夠增強數據的安全性,經過實現讀寫分離還能進一步提高數據庫的負載性能。
下圖就描述了一個多個數據庫間主從複製與讀寫分離的模型
在一主多從的數據庫體系中,多個從服務器採用異步的方式更新主數據庫的變化,業務服務器在執行寫或者相關修改數據庫的操做是在主服務器上進行的,讀操做則是在各從服務器上進行。若是配置了多個從服務器或者多個主服務器又涉及到相應的負載均衡問題,關於負載均衡具體的技術細節尚未研究過,今天就先簡單的實現一主一從的主從複製功能。
MySQL之間數據複製的基礎是二進制日誌文件(binary log file)。一臺MySQL數據庫一旦啓用二進制日誌後,其做爲master,它的數據庫中全部操做都會以「事件」的方式記錄在二進制日誌中,其餘數據庫做爲slave經過一個I/O線程與主服務器保持通訊,並監控master的二進制日誌文件的變化,若是發現master二進制日誌文件發生變化,則會把變化複製到本身的中繼日誌中,而後slave的一個SQL線程會把相關的「事件」執行到本身的數據庫中,以此實現從數據庫和主數據庫的一致性,也就實現了主從複製。
Mysql中的myisam與innodb的區別:
一、InooDB支持事務,而MyISAM不支持事務;二、InnoDB支持行級鎖,而MyISAM支持表級鎖;三、InnoDB支持MVCC,而MyISAM不支持;四、InnoDB支持外鍵,而MyISAM不支持;五、InnoDB不支持全文索引,而MyISAM支持
B樹和B+樹的區別
一、B樹,每一個節點都存儲key和data,全部的節點組成這可樹,而且葉子節點指針爲null,葉子節點不包含任何關鍵字信息
二、B+樹,全部的葉子節點中包含所有關鍵字的信息,及指向含有這些關鍵字記錄的指針,且葉子節點自己依關鍵字的大小自小到大的順序連接,全部的非終端節點能夠當作是索引部分,節點中僅含有其子樹根節點中最大(或最小)關鍵字
寫一個腳本將數據庫備份並打包至遠程服務器192.168.1.1 /backup目錄下:
mount 192.168.1.1:/backup /mnt
cd /mnt
/usr/local/mysql/bin/mysqldump -hlocalhost -uroot
test >test.sql
tar czf test.sql.tar.gz test.sql
rm -f test.sql
HTTP和Nginx的狀態碼解析:
1XX 它表示請求已經被接受,正在繼續處理,這種響應是臨時響應,不會返回響應體。
2XX 成功處理並返回,它表示在服務器內已經被接收,被知曉,並處理完成。
200: 成功,請求數據經過響應報文的entity-body部分發送;OK
3XX 重定向功能,告知客戶端須要繼續執行操做才能夠完成請求。
301: 請求的URL指向的資源已經被刪除;但在響應報文中經過首部Location指明源如今所處的新位置;302: 響應報文Location指明資源臨時新位置;304: 客戶端發出了條件式請求,但服務器上的資源不曾發生改變,則經過響應此狀態碼通知客戶端;
4XX 出現問題,和客戶端有關係,好比401表示權限問題,404表示訪問了一個不存在的URL。
401: 須要輸入帳號和密碼認證方能訪問資源;403禁止訪問:一、將nginx.config的user改成和啓動用戶一致;二、配置文件中index index.html index.htm這行指定的文件。三、修改web目錄的讀寫權限,或者是把nginx的啓動用戶改爲目錄的所屬用戶,四、關閉/etc/selinux/config;404: 服務器沒法找到客戶端請求的資源;緣由:有可能location路徑寫錯 了,要在nginx.conf/index.html 文件中添加缺失文件。
5XX 出現問題,和服務端有關,好比500表示內部錯誤,緣由是:ASP語法出錯、ACCESS數據庫鏈接語句出錯、文件引用與包含路徑出錯(如未啓用父路徑)、使用了服務器不支持的組件,如FSO等。502 Bad Gateway錯誤是FastCGI有問題, 1.FastCGI進程是否已經啓動 ;2.FastCGI worker進程數是否不夠; 三、增長緩衝區容量大小;503: 服務不可用,臨時服務器維護或過載,服務器沒法處理請求;排查方法:一、管理員可能關閉應用程序池以執行維護。二、當請求到達時應用程序池隊列已滿。三、應用程序池的性能選項卡的請求隊列限制所填的數值過小,默認爲1000。
504 網關超時;1. 優化業務代碼:一個接口調用超過一分鐘,必定有能夠優化的地方,看看數據庫或者接口的調用是否合理,是否能夠合併請求。2. 修改Nginx的服務器配置:若是實在是優化不了了,能夠把Nginx的超時時間上調。
HTTP1.1與1.0的區別、HTTP與HTTPS的區別?
一、引入持久鏈接,即 在同一個TCP的鏈接中可傳送多個HTTP請求 & 響應二、多個請求 & 響應可同時進行、可重疊;三、引入更加多的請求頭 & 響應頭
在linux系統中,通常都會有swap內存,你以爲使用swap內存有什麼好處,在什麼狀況下swap內存纔會被使用?你以爲在生產環境中要不要用swap內存?
答:好處:在內存不夠用的時候,將部份內存上的數據交換到swap空間上,以便讓系統不會由於內存不夠用而致使緊急狀況出現。
什麼狀況下會用swap:當系統的物理內存不夠用的時候,就須要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什麼操做的程序,這些被釋放的空間被臨時保存到swap空間中,等到那些程序要運行時,再從swap中恢復保存的數據到內存中。這樣,系統老是在物理內存不夠時,才進行swap交換。
簡述進程的啓動、終止的方式以及如何進行進程的查看:
答:在Linux中啓動一個進程有手工啓動和調度啓動兩種方式:
(1)手工啓動:用戶在輸入端發出命令,直接啓動一個進程的啓動方式。能夠分爲:①前臺啓動:直接在SHELL中輸入命令進行啓動。②後臺啓動:啓動一個目前並不緊急的進程,如打印進程。
(2)調度啓動:系統管理員根據系統資源和進程佔用資源的狀況,事先進行調度安排,指定任務運行的時間和場合,到時候系統會自動完成該任務。 常用的進程調度命令爲:at、batch、crontab。
什麼是靜態路由,其特色是什麼?什麼是動態路由,其特色是什麼?
答:靜態路由是由系統管理員設計與構建的路由表規定的路由。適用於網關數量有限的場合,且網絡拓樸結構不常常變化的網絡。其缺點是不能動態地適用網絡情況的變化,當網絡情況變化後必須由網絡管理員修改路由表。
動態路由是由路由選擇協議而動態構建的,路由協議之間經過交換各自所擁有的路由信息實時更新路由表的內容。動態路由能夠自動學習網絡的拓樸結構,並更新路由表。其缺點是路由廣播更新信息將佔據大量的網絡帶寬。
簡述網絡文件系統NFS,並說明其做用:
答:網絡文件系統是應用層的一種應用服務,它主要應用於Linux和Linux系統、Linux和Unix系統之間的文件或目錄的共享。對於用戶而言能夠經過 NFS方便的訪問遠地的文件系統,使之成爲本地文件系統的一部分。採用NFS以後省去了登陸的過程,方便了用戶訪問系統資源。
有狀態和無狀態的服務區別:
答:無狀態的HTTP協議:http(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的鏈接方式,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。協議是指計算機通訊網絡中兩臺計算機之間進行通訊所必須共同遵照的規定或規則,超文本傳輸協議(HTTP)是一種通訊協議,它容許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。一旦數據交換完畢,客戶端與服務器端的鏈接就會關閉,再次交換數據須要創建新的鏈接。這就意味着服務器沒法從鏈接上跟蹤會話。
有狀態就是屢次訪問之間有關聯關係,須要記錄屢次之間的訪問關係。
Redis怎麼保證數據高可用和業務的併發能力?
Redis:是開源的、基於內存的非關係型鍵值數據庫;易擴展、高性能、具有數據持久化等功能;在高併發、低延遲的環境中應用普遍。
Redis 高可用:若是是作主從架構部署,那麼加上哨兵就能夠了,就能夠實現任何一個實例宕機,能夠進行主備切換:master node 在故障時,自動檢測,而且將某個 slave node 自動切換成 master node 的過程。Redis 實現高併發主要依靠主從架構,一主多從,若是想要在實現高併發的同時,容納大量的數據,那麼就須要 redis 集羣,使用 redis 集羣以後,能夠提供每秒幾十萬的讀寫併發。
Redis哨兵的功能及redis主備複製流程?
哨兵的功能:集羣監控:負責監控 redis master 和 slave 進程是否正常工做。消息通知:若是某個 redis 實例有故障,那麼哨兵負責發送消息做爲報警通知給管理員。故障轉移:若是 master node 掛掉了,會自動轉移到 slave node 上。配置中心:若是故障轉移發生了,通知 client 客戶端新的 master 地址。
Redis集羣的原理,redis分片是怎麼實現的,公司redis用在了哪些環境?
答:redis3.0版本以前是不支持集羣的,官方推薦最大的節點數量爲1000,至少須要3(Master)+3(Slave)才能創建集羣,是無中心的分佈式存儲架構,能夠在多個節點之間進行數據共享,解決了Redis高可用、可擴展等問題。集羣能夠將數據自動切分(split)到多個節點,當集羣中的某一個節點故障時,redis還能夠繼續處理客戶端的請求。
redis分片:分片(partitioning)就是將你的數據拆分到多個 Redis 實例的過程,這樣每一個實例將只包含全部鍵的子集。當數據量大的時候,把數據分散存入多個數據庫中,減小單節點的鏈接壓力,實現海量數據存儲。分片部署方式通常分爲如下三種:
(1)在客戶端作分片;這種方式在客戶端肯定要鏈接的redis實例,而後直接訪問相應的redis實例;
(2)在代理中作分片;這種方式中,客戶端並不直接訪問redis實例,它也不知道本身要訪問的具體是哪一個redis實例,而是由代理轉發請求和結果;其工做過程爲:客戶端先將請求發送給代理,代理經過分片算法肯定要訪問的是哪一個redis實例,而後將請求發送給相應的redis實例,redis實例將結果返回給代理,代理最後將結果返回給客戶端。
(3)在redis服務器端作分片;這種方式被稱爲「查詢路由」,在這種方式中客戶端隨機選擇一個redis實例發送請求,若是所請求的內容再也不當前redis實例中它會負責將請求轉交給正確的redis實例,也有的實現中,redis實例不會轉發請求,而是將正確redis的信息發給客戶端,由客戶端再去向正確的redis實例發送請求。
redis用在:java、php環境用到redis,主要緩存有登陸用戶信息數據、設備詳情數據、會員簽到數據等。
Redis的特性及應用場景?
支持數據的持久化:能夠將內存中的數據保持在磁盤中,重啓 redis 服務或者服務器以後能夠從備份文件中恢復數據到內存繼續使用。
支持的數據類型:支持 string(字符串)、hash(哈希數據)、list(列表)、set(集合)、zet(有序集合)
支持數據的備份:master-slave 模式的數據備份,快照+AOF。
支持集羣橫向擴展:基於 redis cluster 的橫向擴展,能夠實現分佈式集羣,大幅提高性能和數據安全性。
應用場景:一、Session 共享:常見於 web 集羣中的 Tomcat 或者 PHP 中多 web 服務器 session 共享;二、消息隊列:ELK 的日誌緩存、部分業務的訂閱發佈系統;三、計數器:訪問排行榜、商品瀏覽數等和次數相關的數值統計場景;四、緩存:數據查詢、電商網站商品信息、新聞內容;五、微博/微信社交場合:共同好友、點贊評論等
Redis持久化是如何實現(一種是RDC、一種是AOF、),說一下兩者區別:
RDB:就是在不一樣的時間點,將redis存儲的數據生成快照並存儲到磁盤等介質上;redis在進行數據持久化的過程當中,會先將數據寫入到一個臨時文件中,待持久化過程都結束了,纔會用這個臨時文件替換上次持久化好的文件。正是這種特性,讓咱們能夠隨時來進行備份,由於快照文件老是完整可用的。redis會單首創建(fork)一個子進程來進行持久化,而主進程是不會進行任何IO操做的,這樣就確保了redis極高的性能。若是須要進行大規模數據的恢復,且對於數據恢復的完整性不是很是敏感,那RDB方式要比AOF方式更加的高效。缺點:RDB須要定時持久化,風險是可能會丟兩次持久之間的數據,量可能很大。
AOF:將執行過的寫指令記錄下來,在數據恢復時按照從前到後的順序再將指令都執行一遍。經過配置redis.conf中的appendonly yes就能夠打開AOF功能。若是有寫操做(如SET等),redis就會被追加到AOF文件的末尾。默認的AOF持久化策略是每秒鐘fsync一次(fsync是指把緩存中的寫指令記錄到磁盤中),即便redis故障,也只會丟失最近1秒鐘的數據。若是在追加日誌時,剛好遇到磁盤空間滿、inode滿或斷電等狀況致使日誌寫入不完整,也沒有關係,redis提供了redis-check-aof工具,能夠用來進行日誌修復。缺點:AOF每秒fsync一次指令硬盤,若是硬盤IO慢,會阻塞父進程;風險是會丟失1秒多的數據;在Rewrite過程當中,主進程把指令存到mem-buffer中,最後寫盤時會阻塞主進程。
使用Redis作緩存時,出現過什麼問題?
一、參數;在RDB快照失敗時,必需要容許寫入數據,二、redis集羣中的服務器更換問題;備份數據,拷貝RDB/AOF文件,三、監控的顆粒度要作的足夠精細;info、check信息。
MySQL和Redis的區別:
mysql是關係型數據庫,是持久化存儲的,查詢檢索的話,會涉及到磁盤IO操做,爲了提升性能,能夠使用緩存技術,而memcached就是內存數據庫,數據存儲在內存中(固然也能夠進行持久化存儲),能夠用做緩存數據庫。用戶首先去memcached查詢數據,若是未查詢到(即緩存未命中),纔去MySQL中查詢數據,查詢到的數據會更新到緩存數據庫中,提供給下次可能進行的查詢。提升了數據查詢方面的性能。
Redis是內存數據庫,數據保存在內存中,訪問速度快。MySQL是關係型數據庫,功能強大,存儲在磁盤中,數據訪問速度慢。像memcached,MongoDB,Redis等,都屬於No sql系列。
你會使用哪些虛擬化技術?
答:vmware vsphere及kvm,我用得比較多的是vmware vsphere虛擬化,基本上生產環境都用的vmware vsphere,kvm我是用在測試環境中使用。vmware 是屬於原生架構虛擬化技術,也就是可直接在硬件上運行。kvm屬於寄居架構的虛擬化技術,它是依託在系統之上運行。vmware vcenter管理上比較方便,圖形管理界面功能很強大,穩定性強,通常比較適合企業使用。KVM管理界面稍差點,須要管理人員花費點時間學習它的維護管理技術。
nginx中rewrite有哪幾個flag標誌位(last、break、redirect、permanent),說一下都什麼意思?經常使用的Nginx模塊,用來作什麼的?在proxy模塊中你配置過哪些參數?
答:last : 至關於Apache的[L]標記,表示完成當前的rewrite規則
break : 中止執行當前虛擬主機的後續rewrite指令集
redirect : 返回302臨時重定向,地址欄會顯示跳轉後的地址
permanent : 返回301永久重定向,地址欄會顯示跳轉後的地址、
301和302不能簡單的只返回狀態碼,還必須有重定向的URL,這就是return指令沒法返回301,302的緣由了。這裏 last 和 break 區別有點難以理解:
last通常寫在server和if中,而break通常使用在location中
last不終止重寫後的url匹配,即新的url會再從server走一遍匹配流程,而break終止重寫後匹配
break和last都能組織繼續執行後面的rewrite指令
一、rewrite模塊,實現重寫功能 二、access模塊:來源控制 三、ssl模塊:安全加密 四、ngx_http_gzip_module:網絡傳輸壓縮模塊 五、ngx_http_proxy_module 模塊實現代理 六、ngx_http_upstream_module模塊實現定義後端服務器列表 七、ngx_cache_purge實現緩存清除功能
proxy模塊中配置過:proxy_set_header、proxy_connect_timeout、proxy_send_timeout、proxybuffer
如何優化Nginx?
1.nginx配置的優化:從進程數、連接設置、緩存設置方面進行優化;二、從集羣架構優化;3. 讓worker進程使用普通用戶運行,使用非root運行nginx master;4. 配置nginx worker進程個數,worker進程爲用戶提供服務通常設置爲cpu核數×2,修改nginx.conf配置文件第一行 : worker_processes 4;
什麼是運維:
運維是指大型組織已經創建好的網絡軟硬件的維護,就是要保證業務的上線與運做的正常,在他運轉的過程當中,對他進行維護,他集合了網絡、系統、數據庫、開發、安全、監控於一身的技術;運維又包括不少種,有DBA運維、網站運維、虛擬化運維、監控運維、遊戲運維等等。
如今給你三百臺服務器,你怎麼對他們進行管理?
管理3百臺服務器的方式:
1)設定跳板機,使用統一帳號登陸,便於安全與登陸的考量。
2)使用salt、ansiable、puppet進行系統的統一調度與配置的統一管理。
3)創建簡單的服務器的系統、配置、應用的cmdb信息管理。便於查閱每臺服務器上的各類信息記錄。
簡述raid0 raid1 raid5 三種工做模式的工做原理及特色:
RAID,能夠把硬盤整合成一個大磁盤,還能夠在大磁盤上再分區,放數據,還有一個大功能,多塊盤放在一塊兒能夠有冗餘(備份)
RAID整合方式有不少,經常使用的:0 1 5 10
RAID 0,能夠是一塊盤和N個盤組合
優勢:讀寫快,是RAID中最好的 缺點:沒有冗餘,一塊壞了數據就全沒有了
RAID 1,只能2塊盤,盤的大小能夠不同,以小的爲準;10G+10G只有10G,另外一個作備份。它有100%的冗餘,缺點:浪費資源,成本高
RAID 5,3塊盤,容量計算10(n-1),容許損失一塊盤特色,讀寫性能通常,讀還好一點,寫很差
冗餘從好到壞:RAID1 RAID10 RAID 5 RAID0
性能從好到壞:RAID0 RAID10 RAID5 RAID1
成本從低到高:RAID0 RAID5 RAID1 RAID10
單臺服務器:很重要盤很少,系統盤,RAID1
數據庫服務器:主庫:RAID10 從庫 RAID5RAID0(爲了維護成本,RAID10)
WEB服務器,若是沒有太多的數據的話,RAID5,RAID0(單盤)
有多臺,監控、應用服務器,RAID0 RAID5
LVS、Nginx、HAproxy有什麼區別?工做中你怎麼選擇?
答:LVS: 是基於四層的轉發;HAproxy:是基於四層和七層的轉發,是專業的代理服務器;Nginx:是WEB服務器,緩存服務器,又是反向代理服務器,能夠作七層的轉發
區別: LVS因爲是基於四層的轉發因此只能作端口的轉發;而基於URL的、基於目錄的這種轉發LVS就不行
工做選擇:HAproxy和Nginx因爲能夠作七層的轉發,因此URL和目錄的轉發均可以作;在很大併發量的時候咱們就要選擇LVS,像中小型公司的話併發量沒那麼大;選擇HAproxy或者Nginx足已,因爲HAproxy由是專業的代理服務器;配置簡單,因此中小型企業推薦使用HAproxy。
什麼是中間件?什麼是jdk?
中間件:叫做中間件服務器或應用服務器;是一種獨立的系統軟件或服務程序,分佈式應用軟件藉助這種軟件在不一樣的技術之間共享資源;中間件位於客戶機/ 服務器的操做系統之上,管理計算機資源和網絡通信;是鏈接兩個獨立應用程序或獨立系統的軟件。相鏈接的系統即便它們具備不一樣的接口;但經過中間件相互之間仍能交換信息。執行中間件的一個關鍵途徑是信息傳遞;經過中間件,應用程序能夠工做於多平臺或OS環境。常見中間件有:kafka、rabbitMQ;
jdk:jdk是Java的開發工具包;它是一種用於構建在Java平臺上發佈的應用程序、applet和組件的開發環境。
Tomcat800五、800九、8080三個端口的含義?如何查看8080端口
8005:關閉時使用;8009:爲AJP端口;即容器使用,如Apache能經過AJP協議訪問Tomcat的8009端口;8080:默認端口,通常應用使用。netstat -anlp | grep 8080 or lsof -i:8080
Tomcat中使用的鏈接器是什麼?
在Tomcat中,使用了兩種類型的鏈接器:
HTTP鏈接器:它有許多能夠更改的屬性,以肯定它的工做方式和訪問功能,如重定向和代理轉發。
AJP鏈接器:它以與HTTP鏈接器相同的方式工做,可是他們使用的是HTTP的AJP協議。AJP鏈接器一般經過插件技術mod_jk在Tomcat中實現。
什麼叫CDN?CDN鏈接失敗的緣由有哪些?
答:即內容分發網絡;基本原理是普遍採用各類緩存服務器,將這些緩存服務器分佈到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工做正常的緩存服務器上,由緩存服務器直接響應用戶請求。其目的是經過在現有的Internet中增長一層新的網絡架構,將網站的內容發佈到最接近用戶的網絡邊緣;使用戶可就近取得所需的內容,提升用戶訪問網站的速度,解決不一樣運營商之間的互聯,由於可讓聯通的網絡訪問聯通讓電信的網絡訪問電信,起到加速用戶訪問的目的。
一、CDN服務器網絡間接性的故障。二、CDN節點出現故障,主要緣由是CDN服務商所提供的節點分佈有限或不均衡。三、本地網絡處於不正常的狀態。四、數據傳輸過程當中,網絡出現網絡擁堵或發生故障。5、CDN節點被大量的DDoS或CC。
什麼叫網站灰度發佈?
答:灰度發佈是指在黑與白之間,可以平滑過渡的一種發佈方式;挑出部分主機讓其上線,待這些主機沒有重大問題的時候,再發布至全部服務器。
簡述DNS進行域名解析的過程?
答:用戶要訪問 www.baidu.com, 會先找本機的host文件,再找本地設置的DNS服務器,若是也沒有的話,就去網絡中找根服務器,根服務器反饋結果,說只能提供一級域名服務器.cn,就去找一級域名服務器,一級域名服務器說只能提供二級域名服務器.com.cn,就去找二級域名服務器,二級域服務器只能提供三級域名服務器.baidu.com.cn,就去找三級域名服務器,三級域名服務器正好有這個網站www.baidu.com, 而後發給請求的服務器,保存一份以後,再發給客戶端。
RabbitMQ是什麼東西?
答:RabbitMQ也就是消息隊列中間件,消息中間件是在消息的傳息過程當中保存消息的容器;消息中間件再將消息從它的源中到它的目標中標時充當中間人的做用;隊列的主要目的是提供路由並保證消息的傳遞;若是發送消息時接收者不可用;消息隊列不會保留消息,直到能夠成功地傳遞爲止,固然,消息隊列保存消息也是有期限地。
優點:(1).RabbitMQ易於使用和部署,適宜於不少場景如路由、負載均衡或消息持久化等,用消息隊列只需幾行代碼便可搞定。(2).對外提供客戶端API,支持多種編程語言。(3).基於erlang語言開發具備高可用高併發的優勢,適合集羣服務器。(4). 健壯、穩定、易用、開源、跨平臺、支持多種語言、文檔齊全。(5). 有消息確認機制和持久化機制,可靠性高。
劣勢:(1).這使得它的可擴展性差,速度較慢,由於中央節點增長了延遲,消息封裝後也比較大。
Kafka:具備如下特性:快速持久化,能夠在O(1)的系統開銷下進行消息持久化;高吞吐,在一臺普通的服務器上既能夠達到10W/s的吞吐速率;徹底的分佈式系統,Broker、Producer、Consumer都原生自動支持分佈式,自動實現負載均衡;支持Hadoop數據並行加載,Kafka經過Hadoop的並行加載機制來統一在線和離線的消息處理。
優點:(1).經過O(1)的磁盤數據結構提供消息的持久化,這種結構對於即便數以TB的消息存儲也可以保持長時間的穩定性能。(2).高吞吐量:即便是很是普通的硬件kafka也能夠支持每秒數十萬的消息,適合產生大量數據的互聯網服務的數據收集業務。(3).支持經過kafka服務器和消費機集羣來分區消息。(4).支持Hadoop並行數據加載。
zookeeper=文件系統+通知機制;是一個分佈式的,開放源碼的分佈式應用程序協調服務,它包含一個簡單的原語集,分佈式應用程序能夠基於它實現同步服務,配置維護和 命名服務等。Zookeeper是hadoop的一個子項目,其發展歷程無需贅述。在分佈式應用中,因爲工程師不能很好地使用鎖機制,以及基於消息的協調 機制不適合在某些應用中使用,所以須要有一種可靠的、可擴展的、分佈式的、可配置的協調機制來統一系統的狀態。
Leader主要有三個功能:1 .恢復數據; 2 .維持與Learner的心跳,接收Learner請求並判斷Learner的請求消息類型; 3 .Learner的消息類型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根據不一樣的消息類型,進行不一樣的處理。
Follower主要有四個功能:1. 向Leader發送請求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);2 .接收Leader消息並進行處理;3 .接收Client的請求,若是爲寫請求,發送給Leader進行投票;4 .返回Client結果。
Keepalived的工做原理?如何作健康檢查
答:在一個虛擬路由器中,只有做爲MASTER的VRRP路由器會一直髮送VRRP通告信息,BACKUP不會搶佔MASTER,除非它的優先級更高。當MASTER不可用時(BACKUP收不到通告信息),多臺BACKUP中優先級最高的這臺會被搶佔爲MASTER。這種搶佔是很是快速的(<1s),以保證服務的連續性;因爲安全性考慮,VRRP包使用了加密協議進行加密。BACKUP不會發送通告信息,只會接收通告信息。
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 #鏈接間隔時間
}
講述一下LVS三種模式的工做過程?
LVS 有三種負載均衡的模式,分別是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式)
1、NAT模式(VS-NAT):
原理:當包到達 LVS 時,LVS 作目標地址轉換(DNAT),將目標 IP 改成 RS 的 IP。RS 接收到包之後,彷彿是客戶端直接發給它的同樣。RS 處理完,返回響應時,源 IP 是 RS IP,目標 IP 是客戶端的 IP。這時 RS 的包經過網關(LVS)中轉,LVS 會作源地址轉換(SNAT),將包的源地址改成 VIP,這樣,這個包對客戶端看起來就彷彿是 LVS 直接返回給它的。
優勢:集羣中的物理服務器能夠使用任何支持TCP/IP操做系統,只有負載均衡器須要一個合法的IP地址。
缺點:擴展性有限。當服務器節點(普通PC服務器)增加過多時,負載均衡器將成爲整個系統的瓶頸;由於全部的請求包和應答包的流向都通過負載均衡器。當服務器節點過多時;大量的數據包都交匯在負載均衡器那,速度就會變慢!
2、IP隧道模式(VS-TUN)
原理:首先要知道,互聯網上的大多Internet服務的請求包很短小,而應答包一般很大;那麼隧道模式就是,把客戶端發來的數據包,封裝一個新的IP頭標記(僅目的IP)發給RS;RS收到後,先把數據包的頭解開,還原數據包,處理後,直接返回給客戶端,不須要再通過負載均衡器。注意,因爲RS須要對負載均衡器發過來的數據包進行還原,因此說必須支持 IP TUNNEL協議,因此,在RS的內核中,必須編譯支持IPTUNNEL這個選項。
優勢:負載均衡器只負責將請求包分發給後端節點服務器,而RS將應答包直接發給用戶;因此,減小了負載均衡器的大量數據流動,負載均衡器再也不是系統的瓶頸,就能處理很巨大的請求量;這種方式,一臺負載均衡器可以爲不少RS進行分發。並且跑在公網上就能進行不一樣地域的分發。
缺點:隧道模式的RS節點須要合法IP,這種方式須要全部的服務器支持 」IP Tunneling」 (IP Encapsulation)協議,服務器可能只侷限在部分Linux系統上。
3、直接路由模式(VS-DR)
原理:一個請求過來時,LVS 只須要將網絡幀的 MAC 地址修改成某一臺 RS 的 MAC,該包就會被轉發到相應的 RS 處理,注意此時的源 IP 和目標 IP 都沒變,LVS 只是作了一下移花接木。RS 收到 LVS 轉發來的包時,鏈路層發現 MAC 是本身的,到上面的網絡層,發現 IP 也是本身的,因而這個包被合法地接受,RS 感知不到前面有 LVS 的存在。而當 RS 返回響應時,只要直接向源 IP(即用戶的 IP)返回便可,再也不通過 LVS。
優勢:和TUN(隧道模式)同樣,負載均衡器也只是分發請求,應答包經過單獨的路由方法返回給客戶端;與VS-TUN相比,VS-DR這種實現方式不須要隧道結構,所以能夠使用大多數操做系統作爲物理服務器。
缺點:要求負載均衡器的網卡必須與物理網卡在一個物理段上。
mysql的innodb如何定位鎖問題,mysql如何減小主從複製延遲?
mysql的innodb如何定位鎖問題:
在使用 show engine innodb status檢查引擎狀態時,發現了死鎖問題;在5.5中,information_schema 庫中增長了三個關於鎖的表(MEMORY引擎)
innodb_trx ## 當前運行的全部事務 innodb_locks ## 當前出現的鎖 innodb_lock_waits ## 鎖等待的對應關係
mysql如何減小主從複製延遲:
若是延遲比較大,就先確認如下幾個因素:
一、從庫硬件比主庫差,致使複製延遲;二、主從複製單線程,若是主庫寫併發太大,來不及傳送到從庫就會致使延遲。更高版本的mysql能夠支持多線程複製;三、慢SQL語句過多;四、網絡延遲;五、master負載:主庫讀寫壓力大,致使複製延遲,架構的前端要加buffer及緩存層;六、slave負載:通常的作法是,使用多臺slave來分攤讀請求,再從這些slave中取一臺專用的服務器。
MySQL數據庫主從同步延遲解決方案
最簡單的減小slave同步延時的方案就是在架構上作優化,儘可能讓主庫的DDL快速執行;還有就是主庫是寫,對數據安全性較高,好比sync_binlog=1,innodb_flush_log_at_trx_commit= 1 之類的設置,而slave則不須要這麼高的數據安全,徹底能夠講sync_binlog設置爲0或者關閉binlog。innodb_flushlog也能夠設置爲0來提升sql的執行效率。另外就是使用比主庫更好的硬件設備做爲slave。
如何重置mysql root密碼?
答:1、在已知MYSQL數據庫的ROOT用戶密碼的狀況下,修改密碼的方法:
一、在SHELL環境下,使用mysqladmin命令設置: mysqladmin –u root –p password 「新密碼」 回車後要求輸入舊密碼
二、在mysql>環境中,使用update命令,直接更新mysql庫user表的數據: Update mysql.user set password=password(‘新密碼’) where user=’root’; / flush privileges; 注意:mysql語句要以分號」;」結束
三、在mysql>環境中,使用grant命令,修改root用戶的受權權限。
grant all on . to root@’localhost’ identified by ‘新密碼’;
忘記了mysql數據庫的ROOT用戶的密碼,又如何作呢?方法以下:
一、關閉當前運行的mysqld服務程序:service mysqld stop(要先將mysqld添加爲系統服務)
二、使用mysqld_safe腳本以安全模式(不加載受權表)啓動mysqld 服務 /usr/local/mysql/bin/mysqld_safe --skip-grant-table &
三、使用空密碼的root用戶登陸數據庫,從新設置ROOT用戶的密碼 #mysql -u root / Mysql> Update mysql.user set password=password(‘新密碼’) where user=’root’;
Mysql> flush privileges;
lvs/nginx/haproxy優缺點
Nginx的優勢是:
一、跨平臺:Nginx 能夠在大多數 Unix like OS編譯運行;
二、Master/Worker 結構:一個 master 進程,生成一個或多個 worker 進程;
三、配置異常簡單:很是容易上手。
四、非阻塞、高併發鏈接:官方測試可以支撐5萬併發鏈接。
五、內置的健康檢查功能:若是 Nginx 代理的後端的某臺 Web 服務器宕機了,不會影響前端訪問;
六、穩定性高:用於反向代理,宕機的機率微乎其微。
Nginx的缺點/瓶頸是:
一、Nginx僅能支持http、https和Email協議,這樣就在適用範圍上面小些,這個是它的缺點。
二、對後端服務器的健康檢查,只支持經過端口來檢測,不支持經過url來檢測;不支持Session的直接保持,但能經過ip_hash來解決;
LVS:使用Linux內核集羣實現一個高性能、高可用的負載均衡服務器;它具備很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)
LVS的優勢是:
一、抗負載能力強、是工做在網絡4層之上僅做分發之用,沒有流量的產生;這個特色也決定了它在負載均衡軟件裏的性能最強的,對內存和cpu資源消耗比較低;
二、配置性比較低,這是一個缺點也是一個優勢,由於沒有可太多配置的東西;因此並不須要太多接觸,大大減小了人爲出錯的概率
三、工做穩定,由於其自己抗負載能力很強,自身有完整的雙機熱備方案:如LVS+Keepalived,不過咱們在項目實施中用得最多的仍是LVS/DR+Keepalived、
四、無流量,LVS只分發請求,而流量並不從它自己出去,這點保證了均衡器IO的性能不會收到大流量的影響。
五、應用範圍較廣,由於LVS工做在4層,因此它幾乎可對全部應用作負載均衡,包括http、數據庫、在線聊天室等
LVS的缺點是:
一、軟件自己不支持正則表達式處理,不能作動靜分離;而如今許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優點所在;
二、若是是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較複雜了;後面有Windows Server的機器的話,若是實施及配置還有維護過程就比較複雜了相對而言,Nginx/HAProxy+Keepalived就簡單多了。
HAProxy的特色是:
一、HAProxy也是支持虛擬主機的。
二、HAProxy的優勢可以補充Nginx的一些缺點,好比支持Session的保持,Cookie的引導;同時支持經過獲取指定的url來檢測後端服務器的狀態。
三、HAProxy跟LVS相似,自己就只是一款負載均衡軟件;單純從效率上來說HAProxy會比Nginx有更出色的負載均衡速度,在併發處理上也是優於Nginx的。
四、HAProxy支持TCP協議的負載均衡轉發,能夠對MySQL讀進行負載均衡;對後端的MySQL節點進行檢測和負載均衡,你們能夠用LVS+Keepalived對MySQL主從作負載均衡。
五、HAProxy負載均衡策略很是多,Round-robin(輪循)、Weight-round-robin(帶權輪循)、source(原地址保持)、RI(請求URL)、rdp-cookie(根據cookie)。
Tomcat/Apache/Nginx區別:
Apache HTTP服務器是一個模塊化的服務器,能夠運行在幾乎全部普遍使用的計算機平臺上。其屬於web服務器。Apache支持模塊多,性能穩定,Apache自己是靜態解析,適合靜態HTML、圖片等,但能夠經過擴展腳本、模塊等支持動態頁面等。
Tomcat是應用(Java)服務器,它是一個Servlet容器,能夠認爲是Apache的擴展,可是能夠獨立於Apache運行。
Nginx是一個高性能的HTTP和反向代理服務器。Nginx優勢:負載均衡、反向代理、處理靜態文件優點。nginx處理靜態請求的速度高於apache;
mysql數據備份工具:
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功能,啓用以後能夠支持單獨的表備份。
說說TCP/IP的七層模型:
應用層 (Application):網絡服務與最終用戶的一個接口。
協議有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示層(Presentation Layer):數據的表示、安全、壓縮。(在五層模型裏面已經合併到了應用層)
格式有,JPEG、ASCll、DECOIC、加密格式等。
會話層(Session Layer):創建、管理、終止會話。(在五層模型裏面已經合併到了應用層);對應主機進程,指本地主機與遠程主機正在進行的會話。
傳輸層 (Transport):定義傳輸數據的協議端口號,以及流控和差錯校驗。協議有:TCP UDP,數據包一旦離開網卡即進入網絡傳輸層。
網絡層 (Network):進行邏輯地址尋址,實現不一樣網絡之間的路徑選擇。
協議有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
數據鏈路層 (Link):創建邏輯鏈接、進行硬件地址尋址、差錯校驗等功能。(由底層網絡定義協議);將比特組合成字節進而組合成幀,用MAC地址訪問介質,錯誤發現但不能糾正。
物理層(Physical Layer):是計算機網絡OSI模型中最低的一層;物理層規定:爲傳輸數據所須要的物理鏈路建立、維持、拆除而提供具備機械的,電子的,功能的和規範的特性;簡單的說,物理層確保原始的數據可在各類物理媒體上傳輸。局域網與廣域網皆屬第一、2層;物理層是OSI的第一層,它雖然處於最底層,倒是整個開放系統的基礎;物理層爲設備之間的數據通訊提供傳輸媒體及互連設備,爲數據傳輸提供可靠的環境;若是您想要用盡可能少的詞來記住這個第一層,那就是「信號和介質」。
正向代理:是一個位於客戶端和原始服務器(origin server)之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),而後代理向原始服務器轉交請求並將得到的內容返回給客戶端。客戶端必需要進行一些特別的設置才能使用正向代理。
正向代理的用途:一、訪問原來沒法訪問的資源,如google;二、能夠作緩存,加速訪問資源;三、對客戶端訪問受權、上網進行認證;四、代理能夠記錄用戶訪問記錄(上網行爲管理),對外隱藏用戶信息。
反向代理:實際運行方式是指以代理服務器來接受internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個服務器。
反向代理的用途:一、保證內網的安全,能夠使用反向代理提供WAF功能,阻止web;二、大型網站,一般將反向代理做爲公網訪問地址,Web服務器是內網。
所謂四層負載均衡,也就是主要經過報文中的目標地址和端口,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。
所謂七層負載均衡,也稱爲「內容交換」,也就是主要經過報文中的真正有意義的應用層內容,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。
三次握手and四次揮手:
第一次握手:創建鏈接時,客戶端發送同步序列號syn=1,隨機產生seq數據包,發送seq=x到服務器,並進入syn_sent狀態,等待服務器確認。
第二次握手:服務器收到報文請求,由syn=1知道客戶端要創建鏈接請求,向客戶端發送ack(ack=x+1),syn=1,同時本身也會發送一個syn(seq=y),即syn+ack包,此時服務器進入syn_sent狀態。
第三次握手:客戶端收到服務器syn+ack數據包,向服務器發送確認包ack(ack=y+1),同時發送序號:seq=x+1。此包發送完畢客戶端與服務器進入創建鏈接狀態。
第一次斷開:客戶方發給服務器一個FIN爲1的請求,FIN爲1表示是一個斷開鏈接的請求,即表示數據傳輸完畢請求斷開,併發送seq序列號和Ack確認號。
第二次斷開:服務器收到客戶端請求並返回ACK標誌位爲1,Ack爲Seq+1等於201,並將對方的Ack做爲本身的Seq序列號的確認數據包,biao 接收到請求贊成斷開。
第三次斷開:服務器發送ACK=1,FIN=1,Seq等於客戶端第一次請求斷開的Ack確認號+1,即Seq等於501的斷開請求給客戶端。
第四次斷開:客戶端發送ACK=1,Ack在上一步Seq上+1等於502,並使用在第二次斷開中服務器發送的Ack確號201做爲本次的序列號發給服務器表示贊成斷開,服務器收到後驗證序列號是第二次的,驗證Ack是第三次+1的,確認沒有問題後贊成斷開,而後將端口置爲TIME_WAIT狀態,等待2 MSL時間後置爲關閉狀態,被動方收到主動方的報文確認Ack確認號沒有問題後將端口置爲CLOSED,至此端口關閉。
docker打鏡像的過程;docker的優點:
一、啓動一個臨時容器;二、順序執行dockerfile命令;三、build -t 保存並改名爲指定的名稱作本地保存;四、把臨時容器刪除;
Docker 的優點: 快速部署:高效虛擬化:節省開支:簡化配置:快速遷移和擴展: 缺點:隔離性:各應用之間的隔離不如虛擬機。
Nginx中配置CPU親和性,workerprocesses和workerCPU_affinity有什麼好處?
下降了系統對CPU和內存的開銷,主要是nginx的工做進程內存開銷和回收。
Nginx默認幾種調度算法:3種
經常使用的有3種調度算法(輪詢、ip hash、權重)。
輪詢:upstream按照輪詢(默認)方式進行負載,每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器down掉,能自動剔除。ip hash:每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session的問題。權重:指定輪詢概率,權重(weight)和訪問比率成正比,用於後端服務器性能不均的狀況。
Apache默認幾種工做模式:3種
一、Prefork MPM: 預派生模式,有一個主控制進程,而後生成多個子進程,使用select模型,最大併發1024,每一個子進程有一個獨立的線程響應用戶請求,相對比較佔用內存,可是比較穩定,能夠設置最大和最小進程數,是最古老的一種模式,也是最穩定的模式,適用於訪問量不是很大的場景。優勢:穩定;缺點:慢,佔用資源,不適用於高併發場景 二、woker MPM:是一種多進程和多線程混合的模型,有一個控制進程,啓動多個子進程,每一個子進程裏面包含固定的線程,使用線程來處理請求,當線程不夠使用的時候會再啓動一個新的子進程,而後在進程裏面再啓動線程處理請求,因爲其使用了線程處理請求,所以能夠承受更高的併發。優勢:相比prefork 佔用的內存較少,能夠同時處理更多的請求;缺點:使用keep-alive的長鏈接方式,某個線程會一直被佔據,即便沒有傳輸數據,也須要一直等待到超時纔會被釋放。若是過多的線程,被這樣佔據,也會致使在高併發場景下的無服務線程可用。比prefork 佔用的內存較少,能夠同時處理更多的請求; 三、event MPM:Apache中最新的模式,屬於事件驅動模型(epoll),每一個進程響應多個請求,在如今版本里的已是穩定可用的模式。它和worker模式很像,最大的區別在於,它解決了keep-alive場景下,長期被佔用的線程的資源浪費問題(某些線程由於被keep-alive,空掛在哪裏等待,中間幾乎沒有請求過來,甚至等到超時)。event MPM中,會有一個專門的線程來管理這些keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務線程,執行完畢後,又容許它釋放。這樣加強了高併發場景下的請求處理能力。 優勢:單線程響應多請求,佔據更少的內存,高併發下表現更優秀,會有一個專門的線程來管理keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務線程,執行完畢後,又容許它釋放 缺點:沒有線程安全控制。
說一下大家公司的代碼是怎麼發佈的?
發佈:jenkins配置好代碼路徑(SVN或GIT),而後拉代碼,打tag。須要編譯就編譯,編譯以後推送到發佈服務器(jenkins裏面能夠調腳本),而後從分發服務器往下分發到業務服務器上。
elk中的logstash是怎麼收集日誌的,在客戶端的logstash配置文件主要有哪些內容?
input、output兩大塊配置;input中指定日誌(type、path)等,output指定日誌輸出的目標(host、port)等。
ansible:src是文件的來源目標;dest是文件的目的方向;冪等性:一個任務執行一次和執行n次效果同樣,不因重複執行帶來意外狀況;
ansible命令執行過程: 1. 加載本身的配置文件默認/etc/ansible/ansible.cfg;2. 加載本身對應的模塊文件,如command;3. 經過ansible將模塊或命令生成對應的臨時py文件,並將該文件傳輸至遠程服務器的對應執行用戶$HOME/.ansible/tmp/ansible-tmp-數字/XXX.PY文件;4. 給文件+x執行;5. 執行並返回結果;6. 刪除臨時py文件,退出
執行狀態:綠色:執行成功而且不須要作改變的操做;×××:執行成功而且對目標主機作變動;紅色:執行失敗
command與shell的功能:command是默認模塊,只能對遠程主機進行顯示和文件的修改;command模塊不支持重定向以及管道;shell模塊支持重定向以及管道;
ansible web -m copy -a 'src=/data/config dest=/data2/selinux/' 將文件複製到web服務器下,如目標文件目錄不存在,則會所有建立,不管幾級。
copy模塊可以傳輸和建立文件及指定權限:ansible 172.18.27.27 -m copy -a 'content="woai\nni" dest=/data/woaini.txt(存在會建立,不存在則不會建立,存在會覆蓋以前內容)
能夠將playbook文件進行加/解密:ansible-vault en/decrypt hello.yml 加/解密
ansible你用過它的哪些模塊,ansbile同時分發多臺服務器的過程很慢(它是逐臺分發的),你想過怎麼解決嗎?
用過ansible的(copy file yum ping command shell)等模塊;ansible默認只會建立5個進程,因此一次任務只能同時控制5臺機器執行.若是有大量的機器須要控制,或者但願減小進程數,能夠採起異步執行.ansible的模塊能夠把task放進後臺,而後輪詢它.這使得在必定進程數下能讓大量須要的機器同時運做起來。
如今有一批機器的root用戶和密碼,怎麼實現ansible主機和這批機器之間免祕鑰認證呢?
一、ssh-keyscan 主機名 >> /root/.ssh/known_hosts;二、配置hosts文件,帶密碼參數ansible_ssh_pass;三、配置yml文件;四、運行ansible-playbook -i hosts ssh-addkey.yml
編寫劇本:當主機爲7,安裝nginx、當主機爲6,安裝httpd;
[root@centos7 ~]#cat nginx_httpd_role.ymlphp
hosts: app
tasks:html
handlers:前端