當前位置:
首頁 > 最新 > 搭建高可用負載均衡器:haproxy+keepalived

搭建高可用負載均衡器:haproxy+keepalived

來源:雲棲社區

https://yq.aliyun.com/articles/609851?spm=a2c4e.11153940.bloghomeflow.104.417a291abDIzgA

正文:

企業業務量比較小的時候,單台伺服器就可以滿足業務需要了。但是隨著業務發展,單伺服器的問題就凸顯出來了:

·當伺服器掛掉時,業務就會中斷

·當業務量增加,單台伺服器性能變差,如何透明的擴展伺服器和帶寬,增加伺服器吞吐量

負載均衡器可以解決以上問題

1 負載均衡器拓撲圖

本文會根據拓撲圖,用haproxy和keepalived搭建一個負載均衡器

2 準備


準備5台CentOS7.3主機和一個VIP地址:

·準備一個可用IP用作虛擬IP(VIP):

VIP: 192.168.1.100

·負載均衡器會用到2台主機,一主一備的架構

lb1(默認為主): 192.168.1.101

lb2(默認為備): 192.168.1.102

·後端伺服器集群中主機的IP地址

s1: 192.168.1.2

s2: 192.168.1.3

s3: 192.168.1.4


2.2.1 所有主機上關閉防火牆

systemctl stop firewalld systemctl disable firewalld

2.2.2 所有主機關閉selinux

setenforce 0 vi /etc/selinux/config SELINUX=disabled

lb1和lb2上安裝haproxy和keepalived

yum install haproxy keepalived -y


s1 s2 s3上安裝nginx,目的是把nginx作為後端,如果有其他後端程序,這一步可以省略

yum install epel-release -y yum install nginx -y


KeepAlived是基於VRRP(Virtual Router Redundancy Protocol,虛擬路由冗餘協議)實現的一個高可用方案,通過VIP(虛擬IP)和心跳檢測來實現高可用

Keepalived有兩個角色,Master和Backup。一般會是1個Master,多個Backup。

Master會綁定VIP到自己網卡上,對外提供服務。Master和Backup會定時確定對方狀態,當Master不可用的時候,Backup會通知網關,並把VIP綁定到自己的網卡上,實現服務不中斷,高可用

2.3.1 配置Master

編輯lb1(192.168.1.101)上的/etc/keepalived/keepalived.conf

! Configuration File for keepalived global_defs { # 通知郵件伺服器的配置 notification_email { # 當master失去VIP或則VIP的時候,會發一封通知郵件到your-email@qq.com your-email@qq.com } # 發件人信息 notification_email_from keepalived@qq.com # 郵件伺服器地址 smtp_server 127.0.0.1 # 郵件伺服器超時時間 smtp_connect_timeout 30 # 郵件TITLE router_id LVS_DEVEL } vrrp_instance VI_1 { # 主機: MASTER # 備機: BACKUP state MASTER # 實例綁定的網卡, 用ip a命令查看網卡編號 interface eno16777984 # 虛擬路由標識,這個標識是一個數字(1-255),在一個VRRP實例中主備伺服器ID必須一樣 virtual_router_id 88 # 優先順序,數字越大優先順序越高,在一個實例中主伺服器優先順序要高於備伺服器 priority 100 # 主備之間同步檢查的時間間隔單位秒 advert_int 1 # 驗證類型和密碼 authentication { # 驗證類型有兩種 PASS和HA auth_type PASS # 驗證密碼,在一個實例中主備密碼保持一樣 auth_pass 11111111 } # 虛擬IP地址,可以有多個,每行一個 virtual_ipaddress { 192.168.1.100 } } virtual_server 192.168.1.100 443 { # 健康檢查時間間隔 delay_loop 6 # 調度演算法 # Doc: http://www.keepalived.org/doc/scheduling_algorithms.html # Round Robin (rr) # Weighted Round Robin (wrr) # Least Connection (lc) # Weighted Least Connection (wlc) # Locality-Based Least Connection (lblc) # Locality-Based Least Connection with Replication (lblcr) # Destination Hashing (dh) # Source Hashing (sh) # Shortest Expected Delay (seq) # Never Queue (nq) # Overflow-Connection (ovf) lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP # 通過調度演算法把Master切換到真實的負載均衡伺服器上 # 真實的主機會定期確定進行健康檢查,如果MASTER不可用,則切換到備機上 real_server 192.168.1.101 443 { weight 1 TCP_CHECK { # 連接超埠 connect_port 443 # 連接超時時間 connect_timeout 3 } } real_server 192.168.1.102 443 { weight 1 TCP_CHECK { connect_port 443 connect_timeout 3 } } }

2.3.2 配置BACKUP

編輯lb2(192.168.1.102)上的/etc/keepalived/keepalived.conf

! Configuration File for keepalived global_defs { # 通知郵件伺服器的配置 notification_email { # 當master失去VIP或則VIP的時候,會發一封通知郵件到your-email@qq.com your-email@qq.com } # 發件人信息 notification_email_from keepalived@qq.com # 郵件伺服器地址 smtp_server 127.0.0.1 # 郵件伺服器超時時間 smtp_connect_timeout 30 # 郵件TITLE router_id LVS_DEVEL } vrrp_instance VI_1 { # 主機: MASTER # 備機: BACKUP state BACKUP # 實例綁定的網卡, 用ip a命令查看網卡編號 interface eno16777984 # 虛擬路由標識,這個標識是一個數字(1-255),在一個VRRP實例中主備伺服器ID必須一樣 virtual_router_id 88 # 優先順序,數字越大優先順序越高,在一個實例中主伺服器優先順序要高於備伺服器 priority 99 # 主備之間同步檢查的時間間隔單位秒 advert_int 1 # 驗證類型和密碼 authentication { # 驗證類型有兩種 PASS和HA auth_type PASS # 驗證密碼,在一個實例中主備密碼保持一樣 auth_pass 11111111 } # 虛擬IP地址,可以有多個,每行一個 virtual_ipaddress { 192.168.1.100 } } virtual_server 192.168.1.100 443 { # 健康檢查時間間隔 delay_loop 6 # 調度演算法 # Doc: http://www.keepalived.org/doc/scheduling_algorithms.html # Round Robin (rr) # Weighted Round Robin (wrr) # Least Connection (lc) # Weighted Least Connection (wlc) # Locality-Based Least Connection (lblc) # Locality-Based Least Connection with Replication (lblcr) # Destination Hashing (dh) # Source Hashing (sh) # Shortest Expected Delay (seq) # Never Queue (nq) # Overflow-Connection (ovf) lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP # 通過調度演算法把Master切換到真實的負載均衡伺服器上 # 真實的主機會定期確定進行健康檢查,如果MASTER不可用,則切換到備機上 real_server 192.168.1.101 443 { weight 1 TCP_CHECK { # 連接超埠 connect_port 443 # 連接超時時間 connect_timeout 3 } } real_server 192.168.1.102 443 { weight 1 TCP_CHECK { connect_port 443 connect_timeout 3 } } }


編輯lb1(192.168.1.101)和lb2(192.168.1.102)上的/etc/haproxy/haproxy.cfg

把後端伺服器IP(192.168.1.2, 192.168.1.3, 192.168.1.4)加到backend里

#---------------------------------------------------------------------# Global settings#---------------------------------------------------------------------global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4096 user haproxy group haproxy daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats listen stats bind *:9000 mode http stats enable stats hide-version stats uri /stats stats refresh 30s stats realm Haproxy Statistics stats auth admin:admin frontend k8s-api bind *:443 mode tcp option tcplog tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } default_backend k8s-api-backend backend k8s-api-backend mode tcp option tcplog option tcp-check balance roundrobin server master1 192.167.1.2:80 maxconn 1024 weight 5 check server master2 192.167.1.3:80 maxconn 1024 weight 5 check server master3 192.167.1.4:80 maxconn 1024 weight 5 check


給nginx添加SSL證書,配置過程略

vi /usr/share/nginx/html/index.html

把index.html裡面字元串Welcome to nginx改成Welcome to nginx HA

3 啟動服務

sudo systemctl start nginx sudo systemctl enable nginx


sudo systemctl start haproxy sudo systemctl enable haproxy


sudo systemctl start keepalived sudo systemctl enable keepalived

在MASTER上運行ip a

eno16777984:

mtu 1500 qdisc mq state UP qlen 1000 link/ether 00:xx:xx:xx:3d:0c brd ff:ff:ff:ff:ff:ff inet 192.168.1.101/24 brd 192.168.1.255 scope global eno16777984 valid_lft forever preferred_lft forever inet 192.168.1.100/32 scope global eno16777984 valid_lft forever preferred_lft forever inet6 eeee:eeee:1c9d:2009:250:56ff:fe9c:3d0c/64 scope global noprefixroute dynamic valid_lft 7171sec preferred_lft 7171sec inet6 eeee::250:56ff:eeee:3d0c/64 scope link valid_lft forever preferred_lft forever

會發現VIP(192.168.1.100)已經綁定好了

如果發現VIP無法綁定

vi /etc/sysctl.conf

添加兩行

讓新配置生效

sysctl -p

4 驗證


1. 在瀏覽器輸入 http://192.168.1.100:9000/stats 查看haproxy狀態

2. 在瀏覽器輸入 https://192.168.1.100 查看服務狀態

是否成功顯示為nginx歡迎頁面


1. 在瀏覽器輸入 https://192.168.1.100 查看是否成功顯示nginx歡迎頁面

2. lb1(192.168.1.101)關機,查看是否還可以訪問https://192.168.1.100, 如果成功,則說明VIP成功切換到備機

3. 在lb2(192.168.1.102)上執行ip a,查看網卡是否綁定VIP(192.168.1.100)

3. 啟動lb1(192.168.1.101) 目的是為了驗證VIP是否切回MASTER主機(因為MASTER端的配置文件中priority為100,而BACKUP為99,health check會自動把VIP綁定到priority高的主機上)

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT168科技 的精彩文章:

美柚首次亮相「6·18」 助推「她經濟」發展被認可
浪潮發布雲海OS 5.5 發力四大融合場景

TAG:IT168科技 |