Route會(huì)話保持
OpenShift Router是基于Haproxy反向代理實(shí)現(xiàn)的蜀踏,客戶端請(qǐng)求與后端應(yīng)用POD通過(guò)cookie來(lái)實(shí)現(xiàn)會(huì)話保持。
- 默認(rèn)是開啟會(huì)話保持的,基于cookie的會(huì)話保持。
- 如果設(shè)置
haproxy.router.openshift.io/disable_cookies
為True
,將會(huì)禁用基于cookie的會(huì)話保持往踢,而使用balance的負(fù)載策略。
此過(guò)程分為兩個(gè)階段:第一次請(qǐng)求階段徘层、再次發(fā)起請(qǐng)求階段
第一次請(qǐng)求階段
客戶端發(fā)起第一次請(qǐng)求時(shí)峻呕,Router會(huì)給返回的數(shù)據(jù)中添加一條指定的cookie利职。
- 客戶端請(qǐng)求到達(dá)Router節(jié)點(diǎn)。
- Router節(jié)點(diǎn)通過(guò)默認(rèn)的負(fù)載均衡策略選擇后端應(yīng)用POD瘦癌。
- 后端應(yīng)用POD返回?cái)?shù)據(jù)到Router節(jié)點(diǎn)猪贪。
- Router根據(jù)后端應(yīng)用POD,給返回的數(shù)據(jù)包set-cookie: cookiename[HASH值]=cookievalue(HASH值),有效期為SESSION(瀏覽器客戶端關(guān)閉前有效)讯私。
再次發(fā)起請(qǐng)求階段
客戶端再次發(fā)起請(qǐng)求時(shí)热押,會(huì)帶上第一次Router設(shè)置的cookie,Router根據(jù)該cookie值選擇對(duì)應(yīng)的POD。
- 客戶端再次請(qǐng)求斤寇,帶上第一次請(qǐng)求獲得的cookie(HASH值)桶癣,訪問(wèn)Router節(jié)點(diǎn)。
- Router節(jié)點(diǎn)根據(jù)請(qǐng)求中帶的cookie(HASH值)娘锁,將請(qǐng)求負(fù)載到對(duì)應(yīng)的應(yīng)用POD上牙寞。
- 后端應(yīng)用POD返回?cái)?shù)據(jù)到Router,進(jìn)而返回客戶端莫秆。
Router會(huì)話保持可以保證瀏覽器不關(guān)閉的情況下间雀,同一個(gè)客戶端請(qǐng)求被負(fù)載到同一個(gè)POD。但是如果瀏覽器重啟后馏锡,第一個(gè)請(qǐng)求會(huì)重新負(fù)載獲取新的COOKIE雷蹂,這時(shí)就不能保證請(qǐng)求到同一個(gè)POD了。
-
如果某些應(yīng)用一定需要滿足同一個(gè)客戶端必須負(fù)載到同一個(gè)POD的話杯道,可以設(shè)置Route的負(fù)載策略為source的方式來(lái)滿足。
$ oc annotate route <route_name> \ --overwrite haproxy.router.openshift.io/balance=source
Route負(fù)載均衡策略
而haproxy.router.openshift.io/balance
是設(shè)置的負(fù)載策略责蝠。這個(gè)值對(duì)于passthrough類型的Route默認(rèn)使用的是基于源地址策略党巾,而對(duì)于非passthrough類型的Route默認(rèn)使用的是最小連接策略。
- 全局默認(rèn)值可以通過(guò)環(huán)境變量ROUTER_TCP_BALANCE_SCHEME與ROUTER_LOAD_BALANCE_ALGORITHM設(shè)置霜医。
- ROUTER_TCP_BALANCE_SCHEME:對(duì)于pass-through類型的Route的負(fù)載策略齿拂,默認(rèn)為基于源地址。
- ROUTER_LOAD_BALANCE_ALGORITHM:對(duì)于非pass-through類型的Route的負(fù)載策略肴敛,默認(rèn)為最小連接署海。
負(fù)載均衡類型有以下三種:
- roundrobin:輪詢。根據(jù)其權(quán)重依次使用每個(gè)端點(diǎn)医男。 當(dāng)服務(wù)器的處理時(shí)間保持均勻分布時(shí)砸狞,這是最流暢,最公平的算法镀梭。
- leastconn:最小連接數(shù)刀森。當(dāng)多個(gè)端點(diǎn)具有相同的最低連接數(shù)時(shí),執(zhí)行循環(huán)报账。 當(dāng)需要非常長(zhǎng)的會(huì)話(例如LDAP研底,SQL埠偿,TSE或其他會(huì)話)時(shí),請(qǐng)使用此算法榜晦。 不適用于通常使用短會(huì)話的協(xié)議冠蒋,例如HTTP。
- source:源地址乾胶。對(duì)源IP地址進(jìn)行哈希處理抖剿,然后除以運(yùn)行中服務(wù)器的總權(quán)重,以指定將接收請(qǐng)求的服務(wù)器胚吁。 這樣可以確保相同的客戶端IP地址始終會(huì)到達(dá)同一服務(wù)器牙躺,只要沒有服務(wù)器出現(xiàn)故障即可。 如果哈希結(jié)果由于正在運(yùn)行的服務(wù)器數(shù)量變化而變化腕扶,那么許多客戶端將被定向到不同的服務(wù)器孽拷。 此算法通常與直通路由一起使用。