nginx负载均衡和高可用
代理和負載均衡的區(qū)別
? ? 代理負責把連接請求直接轉發(fā)到后臺某個web節(jié)點
?? ?負載均衡負責把請求使用某種調(diào)度算法分散發(fā)布給后臺所有web節(jié)點
---------------------------------------------------------------------------------------------------------------------------------
負載均衡(Load Balance),簡寫LB
?? ?面對高并發(fā)web請求,使用各種調(diào)度算法(rr,wrr,lc,wlc,ip_hash),分散轉發(fā)到后臺web群集節(jié)點,提高數(shù)據(jù)吞吐量,高容災
?? ?常見的LB:
?? ??? ??? ?軟件:lvs ?nginx ? haproxy ??
?? ??? ??? ?硬件:F5
?? ??? ??? ?云LB:阿里云SLB ? ?騰訊云CLB ? 青云QLB ? ucloud ULB
?? ??? ??? ?
?? ?四層負載:ip地址 ? ?tcp/udp ?端口號
?? ?七層負載:HTTP ?https ?ftp ? SMTP ?
---------------------------------------------------------------------------------------------------------------------------------
高可用-增加容錯性(HA:High availability)
協(xié)議:VRRP(虛擬路由冗余協(xié)議) 公有協(xié)議 ?224.0.0.18
? ? ???????HSRP(熱備份路由協(xié)議) ? 私有協(xié)議,Cisco公司
高可用軟件:
?? ?????????keepalived:? ? 使用vrrp實現(xiàn)多臺主機高可用群集
?????????? ?高可用角色:master 主服務器
?? ?????? ????????????????????????backup 備服務器
---------------------------------------------------------------------------------------------------------------------------------
負載均衡實驗步驟
實驗規(guī)劃
lb1 192.168.1.1 centos 7.9?
lb2 192.168.1.2 centos 7.9?
web1 192.168.1.3 centos 7.9
web2 192.168.1.4 centos 7.9
---------------------------------------------------------------------------------------------------------------------------------
實驗前提
將所有服務器關閉防火墻和selinux
systemctl stop firewalld
setenforce 0
---------------------------------------------------------------------------------------------------------------------------------
1.將web1和web2裝好nginx服務,并且修改網(wǎng)頁內(nèi)容
yum -y install epel-release
yum -y install nginx?
echo "web1"? >? /usr/share/nginx/html/index.html? ? (web2就改成web2,別的操作和web1相同)
systemctl start nginx
systemctl enable nginx
---------------------------------------------------------------------------------------------------------------------------------
2.配置nginx負載均衡服務器
yum -y install epel-release
yum -y install nginx?
systemctl start nginx
systemctl enable nginx
---------------------------------------------------------------------------------------------------------------------------------
3.擴展:創(chuàng)建優(yōu)化項文件,網(wǎng)站配置文件直接調(diào)用(選做,但推薦)
vim /etc/nginx/nginx_params
添加:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
保存退出
---------------------------------------------------------------------------------------------------------------------------------
4.修改lb1的配置文件,添加負載均衡功能
vim /etc/nginx/conf.d/lb1.conf
修改為:
upstream web_cluster {
? ? ? ? server 192.168.1.3:80;
? ? ? ? server 192.168.1.4:80;
}
server {
? ? ? ? listen 80;
? ? ? ? server_name blog.benet.com;
? ? ? ? location / {
? ? ? ? ? ? ? ? proxy_pass http://web_cluster;
? ? ? ? ? ? ? ? include nginx_params;
? ? ? ? }
}
保存退出
重啟nginx:systemctl restart nginx?
客戶端訪問驗證,瀏覽器如果判斷不出來,就看web節(jié)點上的日志
---------------------------------------------------------------------------------------------------------------------------------
此時,負載均衡服務已實現(xiàn),但是要做高可用的話,還需要再加一臺負載均衡服務器,并且和第一臺負載均衡服務器的配置一樣。請往下看
---------------------------------------------------------------------------------------------------------------------------------
高可用配置
1.安裝第二臺負載均衡服務器
yum -y install epel-release
yum -y install nginx?
systemctl start nginx
systemctl enable nginx
---------------------------------------------------------------------------------------------------------------------------------
2.將第一臺負載均衡服務器的優(yōu)化項文件和lb1.conf文件都發(fā)送到第二臺負載均衡服務器上
scp -r /etc/nginx/nginx_params root@192.168.1.2:/etc/nginx/
scp -r /etc/nginx/conf.d/lb1.conf?root@192.168.1.2:/etc/nginx/conf.d/
---------------------------------------------------------------------------------------------------------------------------------
3.重啟第二臺負載均衡服務器
systemctl restart nginx
---------------------------------------------------------------------------------------------------------------------------------
4.安裝keepalived(兩臺都裝)
yum -y install keepalived
---------------------------------------------------------------------------------------------------------------------------------
5.配置keepalived
主服務器:lb1
vim /etc/keepalived/keepalived.conf
修改為:
global_defs {
? ?router_id lb1
}
vrrp_instance VI_1 {
? ? state MASTER
? ? interface ens33
? ? virtual_router_id 51
? ? priority 100
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.1.254
? ? }
}
保存退出
啟動服務:systemctl restart keepalived
備服務器:lb2
vim /etc/keepalived/keepalived.conf
修改為:
global_defs {
? ?router_id lb2?? ??? ??? ?#路由id號,和主服務器必須不同
}
vrrp_instance VI_1 {
? ? state BACKUP?? ??? ??? ?#狀態(tài):BACKUP備 ? MASTER主
? ? interface ens33? ? ? ? #指定網(wǎng)卡名字
? ? virtual_router_id 51
? ? priority 99?? ??? ??? ??? ?#優(yōu)先級:備比主要小
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.1.254?? ??? ?#虛擬路由ip,公共ip
? ? }
}
保存退出
啟動服務:systemctl restart keepalived
---------------------------------------------------------------------------------------------------------------------------------
6.查看虛擬ip(漂移ip地址)
ip a show dev ens33
---------------------------------------------------------------------------------------------------------------------------------
7.客戶端修改hosts文件,訪問驗證(訪問成功,關閉主服務器,再訪問)(客戶端:隨便拿一臺測試就行)
vim /etc/hosts
修改為:
192.168.1.254 ?blog.benet.com?
保存退出
---------------------------------------------------------------------------------------------------------------------------------
到這里呢,我們這個負載均衡以及高可用都完成了,但是這個高可用呢,會存在一些問題,比如腦裂現(xiàn)象.
---------------------------------------------------------------------------------------------------------------------------------
高可用裂腦
高可用節(jié)點之間互相失去聯(lián)系,自認為自己是主服務器,就會出現(xiàn)多主現(xiàn)象,即裂腦現(xiàn)象
? ? 裂腦出現(xiàn)的原因:
?? ?????????心跳線松動或網(wǎng)卡故障
?? ?????????服務器硬件故障,崩潰
?? ?????????節(jié)點服務器開啟防火墻,卻沒有做vrrp例外
?? ?????????nginx服務死掉,不會出現(xiàn)裂腦現(xiàn)象,但整個集群都無法正常運作
---------------------------------------------------------------------------------------------------------------------------------
面對裂腦現(xiàn)象? ? ?相關的一些措施--請往下看
1.檢測裂腦腳本(在備用服務器:192.168.1.2運行)
vim split_brain.sh
#!/bin/sh
while true
do
ping -c 2 -W 3 192.168.1.1?&> /dev/null
if [ $? -eq 0 -a `ip add|grep 192.168.1.254|wc -l` -eq 1 ]
? then
? ? echo "split brain....."
else
? ? echo "HA is ok"
fi
sleep 5
done
保存退出
chmod +x split_brain.sh
source split_brain.sh
開啟防火墻驗證:systemctl start firewalld
解決因為防火墻出現(xiàn)的裂腦現(xiàn)象:
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 ?--destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
---------------------------------------------------------------------------------------------------------------------------------
2.解決nginx故障造成群集無法工作
編輯nginx監(jiān)控腳本
vim /sh/check_nginx_proxy.sh
#!/bin/bash
killall ?-0 ?nginx
if ?[ $? -ne 0 ];then
? systemctl stop keepalived
fi
添加腳本追蹤模塊到keepalived配置文件
vim /etc/keepalived/keepalived.conf
global_defs {
? ?router_id lb1
}
vrrp_script check_nginx_proxy {
? ? ? ? script “/sh/check_nginx_proxy.sh”
? ? ? ? interval 2
? ? ? ? weight 5
? ? ? ? }
vrrp_instance VI_1 {
? ? state MASTER
? ? interface ens33
? ? virtual_router_id 51
? ? priority 100
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.1.254
? ? }
? ? track_script {
? ? ? ? check_nginx_proxy
? ? }
}
保存退出
重啟服務:systemctl restart keepalived
---------------------------------------------------------------------------------------------------------------------------------
nginx四層負載的做法
1.配置4層負載均衡,發(fā)布內(nèi)部服務器的ssh和mysql
lb:192.168.1.10
web1: 192.168.1.20
mysql: 192.168.1.30
2.修改配置文件
vim /etc/nginx/nginx.conf
插入數(shù)據(jù)到http字段上方:
stream {
? ? ? ? upstream sshweb1 {
? ? ? ? ? ? ? ? server 192.168.1.20:22;
? ? ? ? }
? ? ? ? upstream mysql {
? ? ? ? ? ? ? ? server 192.168.1.30:3306;
? ? ? ? }
? ? ? ? server {
? ? ? ? ? ? ? ? listen 5555;
? ? ? ? ? ? ? ? proxy_pass sshweb1;
? ? ? ? ? ? ? ? proxy_connect_timeout 30;
? ? ? ? ? ? ? ? proxy_timeout 60;
? ? ? ? }
? ? ? ? server {
? ? ? ? ? ? ? ? listen 7777;
? ? ? ? ? ? ? ? proxy_pass mysql;
? ? ? ? ? ? ? ? proxy_connect_timeout 30;
? ? ? ? ? ? ? ? proxy_timeout 60;
? ? ? ? }
}
保存退出
重啟服務:systemctl restart nginx
3.客戶端訪問驗證ssh:
?? ?xshell: ssh root@192.168.8.129 ?5555
? ? ?linux: ssh root@192.168.8.129 -p 5555
4.客戶端訪問驗證mysql:
?? ?安裝navicat,建立連接192.168.8.129,端口7777
總結
以上是生活随笔為你收集整理的nginx负载均衡和高可用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 计算checksum
- 下一篇: 利用Photoshop制作棋盘(黑白格)