日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx负载均衡和高可用

發(fā)布時間:2024/3/24 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx负载均衡和高可用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

代理和負載均衡的區(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。