1. 程式人生 > >web開發之負載均衡的簡單架構

web開發之負載均衡的簡單架構

linu live relative iptable 方案 ont tex pad 心跳

負載均衡

負載均衡的核心思想就是:請求分擔

最簡單的配置:

一臺負載均衡服務器 兩臺webserver服務器

兩臺webserver服務器需要配置相同的服務器環境,設置相同的域名指向

負載均衡服務器需要修改nginx.conf配置文件

修改內容如下:

upstream www_server_pools{
    server 10.0.169.158 weight=2;#webserver服務器IP地址,權重
    server 10.0.169.160 weight=1;#webserver服務器IP地址,權重
    #ip_hash;每個服務器過來 固定訪問一個服務器  可以解決session問題
    #fair;
    #hash $request_url
    #hash_method crc32; #每個請求按照逐一的書信不同的後端服務器  如果服務器down掉自動剔除
}
server{
  listen  80;
  server_name  www.91porn.com  91porn.com;
  location / {
    proxy_pass http://www_server_pools;#域名請求過來  自動查詢連接池
    proxy_set_header Host $host; #把主機頭發給輪詢的主機
    proxy_set_header X-forward-For $remote_addr; #獲取真實的IP地址
  }
}
server 主機端口作用
weight 權重
max_fails=1 最大錯誤的嘗試次數
fail_timeout=10s 錯誤請求超時時間
backup 找備用服務器

高可用負載均衡服務器配置方法:

配置兩臺負載均衡服務器

每臺服務器上需要安裝keepalived

修改keepalived配置文件 vim /etc/keepalived/keepalived.conf

#第一步刪除第32行後的所有行(virtual_server 192.168.200.100 443)
#主負載服務器配置文件修改如下
global_defs {
  notification_email {
    [email protected] #接受包含錯誤信息的郵件的郵箱
  }
  notification_email_from [email protected]  #發送錯誤信息的郵件服務器
  smtp-server 10.0.169.1 #發送郵件服務器的IP
  smtp_connect_timeout 30  #連接超時時間
  router_id LVS_1 #表示服務器編號  這裏不能一樣
}
vrrp_instace VI_1 {  #VI_1  這裏要相同  可以自定義
  state MASTER  #MASTER 主負載
  interface eth2  # 這裏要看好你的網卡  
  virtual_router_id 160 #ip地址的最後一位  兩臺主機之間要一樣
  priority 200 #權重
  advert_int 1 # 通信間隔時間  秒為單位
  autentication {
    auth_type PASS #認證
    auth_pass 1234 #密碼
  }
  virtual_ipaddress {
    10.0.169.253 #阿裏雲會提供兩個地址  一個內網 一個外網 ip 這時候 要寫內網的IP
  }
}
#輔負載服務器配置文件修改如下
global_defs {
  notification_email {
    [email protected] #接受包含錯誤信息的郵件的郵箱
  }
  notification_email_from [email protected]  #發送錯誤信息的郵件服務器
  smtp-server 10.0.169.1 #發送郵件服務器的IP
  smtp_connect_timeout 30  #連接超時時間
  router_id LVS_2 #表示服務器編號  這裏不能一樣
}
vrrp_instace VI_1 {  #VI_1  這裏要相同  可以自定義
  state BACKUIP  #MASTER 主負載  BACKUP 表示輔負載
  interface eth3  # 這裏要看好你的網卡  本地服務器的網卡
  virtual_router_id 158 #ip地址的最後一位  兩臺主機之間要一樣
  priority 150 #權重
  advert_int 1 # 通信間隔時間  秒為單位
  autentication {
    auth_type PASS #認證
    auth_pass 1234 #密碼
  }
  virtual_ipaddress {
    10.0.169.253 #阿裏雲會提供兩個地址  一個內網 一個外網 ip 這時候 要寫內網的IP
  }
}
最後啟動keepalived
service keepalived restart
ip addr
chkconfig --level keepalived 2345 on

裂腦問題

兩臺高可用的負載均衡服務器一個主 一個輔 兩個服務器之間 檢測不到對方的心跳 但是兩臺服務器都可以獨立的正常工作 這樣就可能出現一個問題 一個IP在兩臺服務器上同時存在 最嚴重的是兩臺主機占用一個IP地址 用戶寫入數據 可能會同時寫入兩個 容易導致兩個服務器數據不同步 數據丟失 這個問題就叫做裂腦

一般出現的裂腦的原因:

  1. 兩個服務器之間 心跳線路故障 導致無法通信

  2. 網卡驅動問題 以及IP配置問題

  3. 仲裁服務器 出現故障

  4. iptables selinux 阻止了

  5. 心跳網卡的地址配置 錯誤

  6. virtual_ipaddress 配置不一致 導致 裂腦問題

解決方案:

  1. 同時使用串行線路和以太網鏈接 一條線路壞了 另一條啟用 (串行線路距離較短)

  2. 如果檢測到裂腦 強行關閉一個心跳節點

  3. 做好監控報警

  4. 引入第三方仲裁 也就是說 每個節點 必須判定自身的狀態 如果自身能夠ping同網關 則對方有問題 如果ping不通則自身有問題

web開發之負載均衡的簡單架構