負載均衡的核心思想就是:請求分擔
最簡單的配置:
一台負載均衡服務器 兩台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 {
17854284556@163.com #接受包含錯誤信息的郵件的郵箱
}
notification_email_from master@liangkun.com #發送錯誤信息的郵件服務器
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 {
17854284556@163.com #接受包含錯誤信息的郵件的郵箱
}
notification_email_from master@liangkun.com #發送錯誤信息的郵件服務器
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地址 用戶寫入數據 可能會同時寫入兩個 容易導致兩個服務器數據不同步 數據丟失 這個問題就叫做裂腦
一般出現的裂腦的原因:
-
兩個服務器之間 心跳線路故障 導致無法通信
-
網卡驅動問題 以及IP配置問題
-
仲裁服務器 出現故障
-
iptables selinux 阻止了
-
心跳網卡的地址配置 錯誤
-
virtual_ipaddress 配置不一致 導致 裂腦問題
解決方案:
-
同時使用串行線路和以太網鏈接 一條線路壞了 另一條啟用 (串行線路距離較短)
-
如果檢測到裂腦 強行關閉一個心跳節點
-
做好監控報警
-
引入第三方仲裁 也就是說 每個節點 必須判定自身的狀態 如果自身能夠ping同網關 則對方有問題 如果ping不通則自身有問題