日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
ZKSYNFlood與參數(shù)優(yōu)化

引言

Zookeeper集群部分節(jié)點(diǎn)連接數(shù)量瞬時(shí)跌零,導(dǎo)致不少服務(wù)發(fā)生重連,對(duì)業(yè)務(wù)造成了影響(驚嚇),本文就發(fā)生的現(xiàn)象進(jìn)行分析和整理。

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),麥蓋提網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:麥蓋提等地區(qū)。麥蓋提做網(wǎng)站價(jià)格咨詢:028-86922220

創(chuàng)新互聯(lián)是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁(yè)美工、網(wǎng)站程序員、網(wǎng)頁(yè)設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營(yíng)銷人員及形象策劃。承接:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫(kù)開(kāi)發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門(mén)戶平臺(tái)等全方位的服務(wù)。

一、ZK監(jiān)控情況

zk集群部分節(jié)點(diǎn)服務(wù)發(fā)生重連

伴隨著集群CPU也發(fā)生抖動(dòng)

ZK日志主要為Socket關(guān)閉等

 
 
 
 
  1. [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2182:NIOServerCnxn@368] - caught end of stream exception
  2. ndOfStreamException: Unable to read additional data from client sessionid 0x0, likely client has closed socket
  3. at org.apache.zookeeper.server.NIOServerCnxn.doIO(NIOServerCnxn.java:239)
  4. at org.apache.zookeeper.server.NIOServerCnxnFactory.run(NIOServerCnxnFactory.java:203)
  5. at java.lang.Thread.run(Thread.java:745)

小結(jié): zk節(jié)點(diǎn)不穩(wěn)定,導(dǎo)致服務(wù)發(fā)生重新注冊(cè)。

二、ZK系統(tǒng)日志

節(jié)點(diǎn)x.x.x.15 系統(tǒng)日志在「2021-09-26T19:16:50」「2021-09-26T19:17:50」均發(fā)生SYN flooding。

x.x.x.89 系統(tǒng)日志在「2021-09-26T19:16:50」和 「2021-09-26T19:17:50」均發(fā)生SYN flooding。

x.x.x.45 系統(tǒng)日志如下「2021-09-26T19:17:50」發(fā)生SYN flooding。

小結(jié): 在問(wèn)題發(fā)生時(shí)間段三個(gè)節(jié)點(diǎn)均在「2021-09-26T19:17:50」附近有系統(tǒng)錯(cuò)誤日志發(fā)生SYN flooding。另外,這三個(gè)節(jié)點(diǎn)「2021-09-26T12:54:03」均有SYN flooding錯(cuò)誤日志,但是未發(fā)現(xiàn)ZK節(jié)點(diǎn)連接斷開(kāi)情況。那是由于zk抖動(dòng)客戶端重連觸發(fā)了SYN flooding ? 還是由于先發(fā)生SYN flooding導(dǎo)致客戶端zk的客戶端。

可以確定的是發(fā)送了大量請(qǐng)求到zk節(jié)點(diǎn),節(jié)點(diǎn)處理不過(guò)來(lái)了。

三、解決方式

SYN flood維基釋意

 
 
 
 
  1. SYN flood或稱SYN洪水、SYN洪泛是一種拒絕服務(wù)攻擊,起因于攻擊者發(fā)送一系列的SYN(TCP握手)請(qǐng)求到目標(biāo)系統(tǒng)。
  2. SYN flood攻擊目前有兩種方法,不過(guò)都與服務(wù)端沒(méi)收到ACK有關(guān)。惡意用戶可以跳過(guò)發(fā)送最后的ACK信息;或者在SYN里透過(guò)欺騙來(lái)源IP地址,這讓服務(wù)器送SYN-ACK到假造的IP地址,因此永不可能收到ACK。這兩個(gè)案例服務(wù)器會(huì)花點(diǎn)時(shí)間等抄收通知,故一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)壅塞可能是由于沒(méi)有ACK造成的。

也就是客戶端發(fā)送大量TCP連接,TCP的等待隊(duì)列被塞滿,導(dǎo)致CPU內(nèi)存等資源不足,無(wú)法提供服務(wù)。關(guān)于TCP三次握手詳見(jiàn)以前文章《HTTP/2協(xié)議之連接前言【原理筆記】》有回顧,文中通過(guò)抓報(bào)文分析了三次握手過(guò)程。

第一步:Client發(fā)送[SYN]報(bào)文到Server。Client進(jìn)入SYN_SENT狀態(tài),等待Server響應(yīng)。[SYN]報(bào)文序號(hào)Seq=x《備注:截圖中Seq=0》

第二步:Server收到后發(fā)送[SYN,ACK]報(bào)文給Client,ACK為x+1(備注:截圖中ACK=1); [SYN,ACK]報(bào)文序號(hào)為y(備注:截圖中Seq=0),Server進(jìn)入SYN_RECV狀態(tài)

第三步:Client收到后,發(fā)送[ACK]報(bào)文到Server,包序號(hào)Seq=x+1,ACK=y+1。Server收到后Client/Server進(jìn)入ESTABLISHED狀態(tài)。

解決方式:

參考下面文章主要對(duì)tcp_max_syn_backlog(能接受SYN同步包的最大客戶端數(shù))和somaxconn(服務(wù)端所能accept即處理數(shù)據(jù)的最大客戶端數(shù)量)參數(shù)做了調(diào)大處理。

 
 
 
 
  1. https://access.redhat.com/solutions/30453

小結(jié): 通過(guò)調(diào)整系統(tǒng)參數(shù)和升級(jí)zk集群配置來(lái)應(yīng)對(duì),當(dāng)前的4C8G配置過(guò)低,出現(xiàn)的該系統(tǒng)錯(cuò)誤日志總體來(lái)說(shuō)是資源處理不過(guò)來(lái)了。不升級(jí)可能在未來(lái)某個(gè)時(shí)間對(duì)公司所有服務(wù)造成不可計(jì)量和不可承受的損失,在相對(duì)低峰期升級(jí),同樣會(huì)對(duì)全部服務(wù)影響,但是可控可應(yīng)急,兩害相權(quán)取其輕。

四、ZK參數(shù)優(yōu)化

ZK配置調(diào)整

 
 
 
 
  1. # ZK中的一個(gè)時(shí)間單元
  2. tickTime=2000
  3.  
  4. # 默認(rèn)10,F(xiàn)ollower在啟動(dòng)過(guò)程中,會(huì)從Leader同步所有最新數(shù)據(jù),將時(shí)間調(diào)大些
  5. initLimit=30000
  6. # 默認(rèn)5,Leader與flower的心跳檢測(cè),超過(guò)后flower表示下線,略微調(diào)大一些   
  7. syncLimit=10
  8. # 默認(rèn)60,單客戶端IP級(jí)別與單zk節(jié)點(diǎn)的連接數(shù)限制,調(diào)整為2000    
  9. maxClientCnxns=2000
  10. # 最大的會(huì)話超時(shí)時(shí)間,其實(shí)交給客戶端了
  11. # 默認(rèn)的Session超時(shí)時(shí)間是在2 * tickTime ~ 20 * tickTime這個(gè)范圍    
  12. maxSessionTimeout=60000000    
  13.     
  14. # 兩次事務(wù)快照之間可執(zhí)行事務(wù)的次數(shù),默認(rèn)的配置值為100000
  15. snapCount=3000000
  16. # 日志文件大小kb,切換快照生成日志
  17. preAllocSize=131072    
  18. # 自動(dòng)清理snapshot和事務(wù)日志,清理頻率,單位是小時(shí)    
  19. autopurge.purgeInterval=6  
  20. # 保留的文件數(shù)目,默認(rèn)3個(gè)    
  21. autopurge.snapRetainCount=10
  22. # 存儲(chǔ)快照文件snapshot的目錄    
  23. dataDir=/data/zookeeper
  24. # 事務(wù)日志輸出目錄
  25. dataLogDir=/data/zookeeper/log    

Jvm參數(shù)

在zookeeper/conf創(chuàng)建java.env文件

 
 
 
 
  1. export JVMFLAGS="-Xms10G -Xmx10G -Xmn4G -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data/zkout/gc/gc-%t.log $JVMFLAGS"

日志滾動(dòng)

conf/log4j.properties調(diào)整為滾動(dòng)輸出

 
 
 
 
  1. zookeeper.root.logger=INFO, ROLLINGFIL
  2. zookeeper.log.dir=/data/zkout/logs
  3. log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
  4. #log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
  5. #log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}
  6. log4j.appender.ROLLINGFILE.DatePattern='.'yyyy-MM-dd
  7. log4j.appender.ROLLINGFILE.MaxFileSize=100MB

zkEnv.sh調(diào)整日志輸出方式

 
 
 
 
  1. if [ "x${ZOO_LOG_DIR}" = "x" ]
  2. then
  3.     ZOO_LOG_DIR="/data/zkout/logs/"
  4. fi
  5. if [ "x${ZOO_LOG4J_PROP}" = "x" ]
  6.     
  7. then
  8.     # ZOO_LOG4J_PROP="INFO,CONSOLE"
  9.     ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
  10. fi

系統(tǒng)參數(shù)調(diào)整

limits.conf 設(shè)置用戶能打開(kāi)的最大文件數(shù)

 
 
 
 
  1. vim /etc/security/limits.conf
  2. # End of file
  3. root soft nofile 655360  #根據(jù)部署用戶
  4. root hard nofile 655360
  5. * soft nofile 655360
  6. * hard nofile 655360

/etc/sysctl.conf調(diào)整

 
 
 
 
  1. vim /etc/sysctl.conf
  2. # 表示開(kāi)啟SYN Cookies。當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時(shí),啟用cookies來(lái)處理,可防范少量SYN攻擊,默認(rèn)為0,表示關(guān)閉;
  3. net.ipv4.tcp_syncookies = 1
  4. # 表示開(kāi)啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉;為1,開(kāi)啟    
  5. net.ipv4.tcp_tw_reuse = 1
  6. # 表示開(kāi)啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉;為1,開(kāi)啟;    
  7. net.ipv4.tcp_tw_recycle = 1  
  8.  
  9. # 修改系統(tǒng)默認(rèn)的 TIMEOUT 時(shí)間    
  10. net.ipv4.tcp_fin_timeout = 5    
  11. # the kernel's socket backlog limit    
  12. net.core.somaxconn = 65535
  13. # the application's socket listen backlog    
  14. net.ipv4.tcp_max_syn_backlog = 100000
  15.  
  16. sysctl -p    

本文轉(zhuǎn)載自微信公眾號(hào)「瓜農(nóng)老梁」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系瓜農(nóng)老梁公眾號(hào)。


文章題目:ZKSYNFlood與參數(shù)優(yōu)化
本文網(wǎng)址:http://www.dlmjj.cn/article/djisooo.html