1. 程式人生 > >用haproxy結合keepalived實現基於LNMP的負載均衡和高可用

用haproxy結合keepalived實現基於LNMP的負載均衡和高可用

lnmp的負載均衡以及高可用

今天我們講haproxy結合keepalived實現LNMP的負載均衡和高可用,現在的公司大部分都基於haproxy實現負載均衡。下面以一個事例去給大家詳細講解如何去實現:

一、用haproxy結合keepalived實現基於lnmp的負載均衡和高可用服務,要求:

1)實現動靜分離,圖片和css,js都分離到專門的靜態服務器上

2)只允許172.17網段用戶訪問

3)對於動態請求,要求實現基於cookie的會話保持

整體架構如下:

技術分享

1、實驗前需要關閉防火墻和selinux,以及同步時間。

關閉防火墻:iptables -F

關閉selinux:setenforce 0

同步時間:ntpdate 172.17.0.1(局域網的網關)

2、配置主服務器

(1)配置主keepalived

vim /etc/keepalived/keepalived.conf(基於NAT模式)

global_defs { #全局設置

notification_email {

root@localhost #郵件地址

}

notification_email_from root

smtp_server 127.0.0.1 #發送郵件的地址

smtp_connect_timeout 30

router_id KEEPALIVED_LVS

}

vrrp_instance VI_1 {

state MASTER #級別為MASTER

interface eth1 #對外的網卡

virtual_router_id 74 #VIP組號,做實驗的時候不要和別人是一個組

priority 200 #優先級

advert_int 1

authentication { #組內驗證

auth_type PASS

auth_pass magedu

}

virtual_ipaddress {

172.17.177.176 #對外的VIP

}

}

vrrp_instance VI_2 {

state MASTER

interface eth0

virtual_router_id 75

priority 200

advert_int 1

authentication {

auth_type PASS

auth_pass magedu

}

virtual_ipaddress {

192.168.153.153 #對內的DIP的VIP,因為是兩個調度器,所以要讓DIP的地址也漂

}

}

主要是實現VIP對外,然後再生成一個DIPVIP對內

啟動服務systemctl start keepalived

開啟路由轉發vim /etc/sysctl.conf

net,ipv4,ip_forward=1

sysctl -p 生效

(2)配置主haproxy

vim /etc/haproxy/haproxy.cfg

global(默認的就行)

log 127.0.0.1 local2

chroot /var/lib/haproxy

pidfile /var/run/haproxy.pid

maxconn 4000

user haproxy

group haproxy

daemon

stats socket /var/lib/haproxy/stats

defaults(默認的就行)

mode http

log global

option httplog

option dontlognull

option http-server-close

option forwardfor except 127.0.0.0/8

option redispatch

retries 3

timeout http-request 10s

timeout queue 1m

timeout connect 10s

timeout client 1m

timeout server 1m

timeout http-keep-alive 10s

timeout check 10s

maxconn 3000

frontend http

bind 172.17.177.176:80 #80端口綁定到VIP

stats enable #啟動監控頁面

stats uri /haproxy #監控頁面的路徑

stats auth admin:admin #監控頁面的賬號密碼

stats refresh #10s監控頁面每10秒自動刷新一次

stats admin if TRUE #能修改監控頁面

acl imagejingtai path_end -i .jpj .png .bmp .gif .js .css #匹配靜態頁面

acl imagephp path_end -i .php #匹配動態php頁面

use_backend webserver1 if imagephp #如果匹配到imagephp就調度到webserver1

acl host src 172.17.0.0/16 #匹配172.17這個網段

block if ! host #如果不是host裏面的網段就都拒絕

default_backend webserver #默認的backendwebserver

backend webserver1 #後端的服務器

balance roundrobin #使用的算法

server web1 192.168.153.177:80 check weight 1

backend webserver2

balance roundrobin

server web2 192.168.153.176:80 check weight 1

backend webserver

balance roundrobin

cookie SRV insert nocache #基於cookie驗證

server http1 192.168.153.177:80 check weight 1 cookie srv1 #基於cookiesrv1驗證保持會話

server http1 192.168.153.176:80 check weight 1

啟動服務systemctl start haproxy

查看80端口是否監聽在VIP ss -ntl

3、配置從的服務器

(1)配置從的keepalived

vim /etc/keepalived/keepalived.conf

global_defs {

notification_email {

root@localhost

}

notification_email_from root

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id KEEPALIVED_LVS

}

vrrp_instance VI_1 {

state BACKUP #MASTER需要改成BACKUP

interface eth1

virtual_router_id 74

priority 190 #優先級需要調小

advert_int 1

authentication {

auth_type PASS

auth_pass magedu

}

virtual_ipaddress {

172.17.177.176

}

}

vrrp_instance VI_2 {

state BACKUP #MASTER需要改成BACKUP

interface eth0

virtual_router_id 75

priority 190 #優先級需要調小

advert_int 1

authentication {

auth_type PASS

auth_pass magedu

}

virtual_ipaddress {

192.168.153.153

}

}

啟動服務systemctl start keepalived

開啟路由轉發vim /etc/sysctl.conf

net,ipv4,ip_forward=1

sysctl -p 生效

(2)配置從的haproxy(和主的haproxy配置一樣)

vim /etc/haproxy/haproxy.cfg

global(默認的就行)

log 127.0.0.1 local2

chroot /var/lib/haproxy

pidfile /var/run/haproxy.pid

maxconn 4000

user haproxy

group haproxy

daemon

stats socket /var/lib/haproxy/stats

defaults(默認的就行)

mode http

log global

option httplog

option dontlognull

option http-server-close

option forwardfor except 127.0.0.0/8

option redispatch

retries 3

timeout http-request 10s

timeout queue 1m

timeout connect 10s

timeout client 1m

timeout server 1m

timeout http-keep-alive 10s

timeout check 10s

maxconn 3000

frontend http

bind 172.17.177.176:80 #80端口綁定到VIP

stats enable #啟動監控頁面

stats uri /haproxy #監控頁面的路徑

stats auth admin:admin #監控頁面的賬號密碼

stats refresh #10s監控頁面每10秒自動刷新一次

stats admin if TRUE #能修改監控頁面

acl imagejingtai path_end -i .jpj .png .bmp .gif .js .css #匹配靜態頁面

acl imagephp path_end -i .php #匹配動態php頁面

use_backend webserver1 if imagephp #如果匹配到imagephp就調度到webserver1

acl host src 172.17.0.0/16 #匹配172.17這個網段

block if ! host #如果不是host裏面的網段就都拒絕

default_backend webserver #默認的backendwebserver

backend webserver1 #後端的服務器

balance roundrobin #使用的算法

server web1 192.168.153.177:80 check weight 1

backend webserver2

balance roundrobin

server web2 192.168.153.176:80 check weight 1

backend webserver

balance roundrobin

cookie SRV insert nocache #基於cookie驗證

server http1 192.168.153.177:80 check weight 1 cookie srv1 #基於cookiesrv1驗證保持會話

server http1 192.168.153.176:80 check weight 1

啟動服務service haproxy start

4、配置後端的web服務器

需要提前搭建好基於LNMP實現的小米電子商務網站(前面的博客有如何搭建LNMP實現小米電子商務網站)

(1)NAT模式

8033069000端口開開

systemctl start nginx php-fpm mariadb

然後把路由指向DIPVIP

ip route add default via 192.168.153.153

技術分享

(2)DR模式

在調度器keepalived中不用配置DIPVIP,因為把網關指向路由器就行

ip route add default via 172.17.0.1

技術分享

還要在回環網卡上加入VIP地址

ifconfig lo:0 172.17.166.165 broadcast 172.17.166.165 netmask 255.255.255.255 up

添加路由,讓VIPlo:0

route add -host 172.17.166.165 dev lo:0

只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求

echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore

對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通信的本地地址.

5、然後就可以去測試看VIP會不會飄逸,關閉主的服務器,然後看能不能訪問web服務器

還可以訪問http://192.168.153.177/haproxy去管理後臺web服務器

到此為止就完全實現負載均衡和高可用,後端web服務器多臺時候就在haproxy中多加幾個server就可以了!

用haproxy結合keepalived實現基於LNMP的負載均衡和高可用