搭建高可用負載均衡器:haproxy+keepalived
來源:雲棲社區
https://yq.aliyun.com/articles/609851?spm=a2c4e.11153940.bloghomeflow.104.417a291abDIzgA
正文:
企業業務量比較小的時候,單台伺服器就可以滿足業務需要了。但是隨著業務發展,單伺服器的問題就凸顯出來了:
·當伺服器掛掉時,業務就會中斷
·當業務量增加,單台伺服器性能變差,如何透明的擴展伺服器和帶寬,增加伺服器吞吐量
負載均衡器可以解決以上問題
1 負載均衡器拓撲圖
本文會根據拓撲圖,用haproxy和keepalived搭建一個負載均衡器
2 準備
2.1 準備環境
準備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 主機配置
2.2.1 所有主機上關閉防火牆
systemctl stop firewalld systemctl disable firewalld
2.2.2 所有主機關閉selinux
setenforce 0 vi /etc/selinux/config SELINUX=disabled
2.3 安裝haproxy和keepalived
lb1和lb2上安裝haproxy和keepalived
yum install haproxy keepalived -y
2.4 安裝nginx(有其他後端測程序,可省略此步)
s1 s2 s3上安裝nginx,目的是把nginx作為後端,如果有其他後端程序,這一步可以省略
yum install epel-release -y yum install nginx -y
2.3 配置keepalived
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 } } }
2.4 配置haproxy
編輯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
2.5 配置nginx
給nginx添加SSL證書,配置過程略
vi /usr/share/nginx/html/index.html
把index.html裡面字元串Welcome to nginx改成Welcome to nginx HA
3 啟動服務
3.1 啟動nginx
sudo systemctl start nginx sudo systemctl enable nginx
3.2 啟動haproxy
sudo systemctl start haproxy sudo systemctl enable haproxy
3.3 啟動keepalived
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 驗證
4.1 查看狀態
1. 在瀏覽器輸入 http://192.168.1.100:9000/stats 查看haproxy狀態
2. 在瀏覽器輸入 https://192.168.1.100 查看服務狀態
是否成功顯示為nginx歡迎頁面
4.2 主備切換
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高的主機上)


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