lcn集群原理圖:
1.實現原理:
1.1 LCN獲取tm協調者注冊地址
1. LCN客戶端項目啟動的時候,首先會注冊到事務協調者中去,然后讀取配置文件tm事務協調者的注冊地址。
2. 向該事務協調者注冊地址發送一個請求,獲取對應的lcn底層協議ip和端口號(底層是netty協議通訊)。
3. 會向該lcn底層協議ip和端口號建立長連接 ,保持會話信息。
lcn 協調者訪問地址,及頁面如下圖所示。
客戶端配置文件
tm:
manager:
url: http://127.0.0.1:8899/tx/manager/
2. 基於Nginx 搭建事務協調者集群
這里所指的端口號指的是事務協調者中配置的 tm.socket.port=9999 的端口號,netty 協議端口號和ip地址。
1.首先通過nginx配置多個tm協調者負載均衡配置,然后 LCN客戶端啟動項目的時候訪問nginx負載均衡地址獲取lcn協議通訊IP地址和端口號,並且對該連接保持長連接。
2.因為LCN客戶端與TM協調者保持的是長連接,當tm協調者宕機之后,LCN會客戶端會立即重新進入到獲取負載均衡地址lcn協議通訊IP地址和端口號。
3.如果lcn客戶端與事務協調者保持的長連接斷開后,那么lcn客戶端會在通過Nginx 負載均衡實現故障轉移輪詢到下一台事務協調者服務器獲取對應的lcn底層的ip和端口號,並且建立長連接。
原理圖如下:
nginx 配置:
### 上游服務器 集群 默認輪詢
upstream backserver{
server 127.0.0.1:8898;
server 127.0.0.1:8899;
}
### server{
#### 監聽端口號
listen 80;
#### 監聽域名地址
server_name lcn.test.com
location / {
### 指定上游服務器負載均衡器
proxy_pass http://backserver;
### nginx 與上游服務器(真是訪問的服務器)的超時時間 后端服務器的連接的超時時間_發起握手等候響應超時時間
proxy_connect_timeout 5s;
### nginx 發送給上游服務器(真是訪問的服務器)的超時時間
proxy_send_timeout 5s;
### nginx 接受上游服務器(真實訪問的服務器)超時時間
proxy_read_timeout 5s;
index index.html index.htm;
}
}
項目源碼地址:https://gitee.com/MingTian-NiHao/springboot-lcn 、https://gitee.com/MingTian-NiHao/tx-lcn