1、為什么我們要使用tomcat,類似的軟件有哪些?
因為Apache僅支持靜態網站,不能解析Java、Jsp,它們服務端口也不同Apache端口80 tomcat端口8080
類似的軟件有Weblogic (收費)Jboss(免費)Resin、Jetty
2、tomcat優化
內存優化:JAVA_OPTS='-Xms=256m -Xmx=1024m -Xmn=512m'
並發優化:maxProcessors=2000,最大處理線程數
maxSpareThreads=2000,tomcat連接器的最大空閑socket線程數
緩存優化:compressionMinSize=2048,啟動壓縮的輸出內容大小,默認2048
3、影響mysql主從不同步的因素可能有哪些?
網絡延遲
主從兩台機器的負載不一樣(單位時間內活躍的進程)
mysql異常宕機情況下,如果未設置sync_binlog=1或者innodb_flush_log_at_trx_commit=1很有可能出現binlog或者relaylog文件出現損壞,導致主從不一致
mysql本身的bug引起的主從不同步
mysql版本不一致
mysql的最大連接數用完了
4、MySQL主從同步的原理是什么?MySQL是通過什么來保證主從數據的同步?
同步原理:從服務器的IO線程從主服務器獲取bin-log二進制日志,並在本地保存為relay-log中繼日志,然后通過SQL線程來在從服務器上執行中繼日志中的內容,從而使從庫和主庫保持一致。
在slave上修改配置,通過binlog日志保證主從數據同步。
在master上修改配置參數:Innodb_flush_log_at_trx_commit = 1;Sync_binlog = 1
在slave上修改配置參數:Master_info_replication = “table”;
Relay_log_info_replication = “table”;Relay_log_recovery = 1
5、MySQL的主從復制過程是同步的還是異步的?
主從復制的過程是異步的復制過程,主庫完成寫操作並計入binlog日志中,從庫再通過請求主庫的binlog日志寫入relay中繼日志中,最后再執行中繼日志的sql語句。
6、存儲引擎InnoDB和MyISAM有什么區別?
主要差別:兩種類型最主要的差別就是InnoDB支持事務處理與外鍵和行級鎖,而MyISAM不支持。所以MyISAM往往就容易被人認為只適合在小項目中使用。
MyISAM的索引和數據是分開的,並且索引是有壓縮的,內存使用率高,能加載更多索引,而InnoDB是索引和數據是緊密捆綁的,沒有壓縮,體積比MyISAM大。
7、NGINX代理負載均衡的調度算法有哪些?具體實現時的現象是什么?
1.輪詢(默認):每個請求按時間順序逐一分配到不同的后端,如果后台某台服務器宕機,自動剔除故障系統,使用戶訪問不受影響,這種方式簡便,成本低,但是可靠性低,負載均衡不均衡,適用於圖片服務器集群和純靜態頁面服務器集群。
2.weight(權重):weight的值越大分配到訪問概率越高,主要用於后端每台服務器性能不均衡的情況下,或者僅僅為在主從的情況下設置不同的權值,達到合理有效的利用主機資源。
3.IP_HASH(訪問IP):每個請求按訪問的哈希結果分配,使來自同一個IP的訪問固定一台后端服務器,並且可以有效解決動態網頁存在的session的共享問題。
4.FAIR(第三方):比weight、ip_hash更加智能的負載均衡算法,fair算法可以根據頁面大小和加載時間長短智能的進行均衡負載,也就是根據后端服務器的響應時間來分配請求,響應時間短的優先分配。nginx本身不支持fair,如果需要這種調度算法,則需要安裝upstream_fair模塊。
5.URL_HASH(第三方):按訪問的URL的哈希結果來分配請求,使每個URL定向到一台后端服務器,可以進一步提高后端緩存服務器的效率。這種調度算法需要安裝nginx的hash軟件包
8、為什么是四層的負載均衡,而不是其他層
在四層模式下,僅僅只是流量轉發或者是TCP的porxy。七層是full proxy,需要分析協議。顯然四層的轉發效率更快,但功能少了許多。MySQL的負載均衡僅僅只是發生在網絡層,所以選四層代理。
9、keepalived的工作原理是什么,使用的是什么協議?
keepalived是以VRRP協議為實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協議。虛擬路由冗余協議,可以認為是實現路由器高可用的協議,即將N台提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據vrrp的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。
10、nginx的七層代理有什么好處?
請求如果直接發到同步處理的后端,那么從收到請求到把響應發出去的這段時間中,一個進程的資源就被占用了。在慢鏈接的情況下,這個進程除了處理之外,大多數時間基本耗費在等待上,而nginx有異步非阻塞模型,它可以通過基於事件的方式同時處理和維護多個請求,而后端只需要做邏輯計算,節約了等待時間去處理更多的請求。
動態頁面的IO性能不好,nginx可以將請求緩存下來,再將完整的請求轉發給后端服務器做處理,減少后端服務器的等待時間。
11、nginx upstream的容錯機制是怎么樣的(有台機器掛掉了,nginx怎么處理的)
nginx收到客戶端的請求,將請求根據調度算法轉發給后台服務器,后台服務器防問被拒接或者返回錯誤信息。nginx將其暫停一段時間,在這段時間內不再將請求轉發給該服務器,並將請求轉發給后台的其他服務器響應。
12、瀏覽器中輸入域名回車后HTTP的請求是怎么進行的?
http將請求發送給nginx代理,nginx將請求轉發給后台服務器,后台服務器接收請求,並返回信息給nginx,nginx收到后台服務器的信息后返回給http。
13、nginx如何配置多域名,防盜鏈
server {
listen 80;
server_name www.xxx.com mall.xxx.com img.xxx.com;
}
location / {
valid_referers nono blocked mall.xxx.com;
if ($invalid_referer){
return 403;}
}
14、Apache、Nginx、Lighttpd都有哪些優缺點
Apache特點:1)幾乎可以運行在所有的計算機平台上;2)支持最新的http/1.1協議;3)簡單而且強有力的基於文件的配置(httpd.conf);4)支持通用網關接口(cgi);5)支持虛擬主機;6)支持http認證,7)集成perl;8)集成的代理服務器;9)可以通過web瀏覽器監視服務器的狀態,可以自定義日志;10)支持服務器端包含命令(ssi);11)支持安全socket層(ssl);12)具有用戶繪畫過程的跟蹤能力;13)支持fastcgi;14)支持java servlets
Nginx特點:nginx是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP代理服務器,處理靜態文件,索引文件以及自動索引,無緩存的反向代理加速,簡單的負載均衡和容錯,具有很高的穩定性,支持熱部署。
Lighttpd特點:是一個具有非常低的內存開銷,CPU占用率低,效能好,以及豐富的模塊,Lighttpd是眾多opensource輕量級的webserver中較為優秀的一個,支持fastcgi,cgi,auth,輸出壓縮,url重寫,alias等重要功能。
15、什么是七層的負載均衡和4層的負載均衡,我們的訪問請求經過這兩種負載均衡都做了些什么處理?
七層負載均衡是基於URL等應用層的負載均衡;請求經過七層時,七層負載均衡接受虛擬url請求,根據調度算法轉發請求到后台服務器
四層負載均衡是基於IP+端口的負載均衡;請求經過四層時,四層負載均衡根據請求的IP和端口,根據調度算法將請求轉發到后台。
16、LVS的三種工作模式是什么?分別是如何工作的
NAT模式(VS-NAT):LVS將客戶端發來的數據包的IP頭的目的地址轉換成其中一台RS(real server)的IP地址,由RS處理數據並返回給LVS,LVS再把數據包的源IP改為自己的IP,目的地址IP改為客戶端的IP地址發送給客戶端。
IP隧道模式(VS-TUN):將客戶端發來的數據包封裝一個新的目的IP頭標記,通過IP隧道轉發給RS,RS收到后,先把數據包的頭解開,還原數據包,處理后直接返回給客戶端,不需要再經過LVS。
DR模式(VS-DR):客戶端發送請求到VIP,LVS將請求報文的目標MAC地址改為RS的MAC地址,將請求轉發給RS,而RS響應后的處理結果直接返回給客戶端。
17、LVS、NGINX、HAPROXY的優缺點
LVS優點:具有很好的可伸縮性、可靠性、可管理性。抗負載能力強、對內存和CPU資源消耗比較低。工作在四層上,僅作分發,所以它幾乎可以對所有的應用做負載均衡,且沒有流量的產生,不會受到大流量的影響。
缺點:軟件不支持正則表達式處理,不能做動靜分離,如果web應用比較龐大,LVS/DR+KEEPALIVED實施和管理比較復雜。相對而言,nginx和haproxy就簡單得多。
nginx優點:工作在七層之上,可以針對http應用做一些分流的策略。比如針對域名、目錄結構。它的正則規則比haproxy更為強大和靈活。對網絡穩定性依賴非常小。理論上能PING就能進行負載均衡。配置和測試簡單,可以承擔高負載壓力且穩定。nginx可以通過端口檢測到服務器內部的故障。比如根據服務器處理網頁返回的狀態碼、超時等。並且可以將返回錯誤的請求重新發送給另一個節點,同時nginx不僅僅是負載均衡器/反向代理軟件。同時也是功能強大的web服務器,可以作為中層反向代理、靜態網頁和圖片服務器使用。
缺點:不支持URL檢測,僅支持HTTP和EMAIL,對session的保持,cookie的引導能力相對欠缺。
Haproxy優點:支持虛擬主機、session的保持、cookie的引導;同時支持通過獲取指定的url來檢測后端服務器的狀態。支持TCP協議的負載均衡;單純從效率上講比nginx更出色,且負載策略非常多。
缺點:擴展性能差;添加新功能很費勁,對不斷擴展的新業務很難對付。
18、DNS/智能DNS/CDN原理是什么?
DNS正向解析將客戶端請求的域名轉換成IP地址、反向解析將IP轉換成域名。
智能DNS在DNS的基礎上通過匹配客戶端的IP將請求分流到最近的服務器上,達到負載均衡。
CDN在DNS和智能DNS的基礎上,將客戶端的請求轉給后台真實服務器,返回給客戶端的同時,緩存到本地服務器上,下次客戶端再次訪問該頁面時直接將緩存返回給客戶端。
19、將本機80端口請求轉發到另外一台主機的8080端口
iptables -t nat -A PREROUTING -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:8080
iptables -t nat -A POSTROUTING -d 192.168.1.2 -p tcp --dport 80 -j SNAT --to-source 192.168.1.1
20、如何將本地80端口的請求轉發到8080端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
