實現基於Keepalived高可用集群網站架構的多種方法


實現基於Keepalived高可用集群網站架構


  隨着業務的發展,網站的訪問量越來越大,網站訪問量已經從原來的1000QPS,變為3000QPS,目前業務已經通過集群LVS架構可做到隨時拓展,后端節點已經通過集群技術保障了可用性,但對於前端負載均衡器來說,是個比較大的安全隱患,因為當前端負載均衡器出現故障時,整個集群就處於癱瘓狀態,因此,負載均衡器的可用性也顯得至關重要,那么怎么來解決負載均衡器的可用性問題呢?

實驗一:實現keepalived主從方式高可用基於LVS-DR模式的應用實戰:

實驗原理

  主從:一主一從,主的在工作,從的在休息;主的宕機了,VIP漂移到從上,由從提供服務

1、環境准備:

  兩台centos系統做DR、一主一從,兩台實現過基於LNMP的電子商務網站

機器名稱 IP配置 服務角色 備注
lvs-server-master VIP:172.17.100.100 DIP:172.17.66.66 負載均衡器 主服務器 開啟路由功能 配置keepalived
lvs-server-backup VIP:172.17.100.100 DIP:172.17.251.66 后端服務器 從服務器 開啟路由功能 配置keepalived
rs01 RIP:172.17.77.77 后端服務器 網關指向DIP(橋接)
rs02 RIP:172.17.251.111 后端服務器 網關指向DIP(橋接)

2、配置 lvs-server-master(主服務器)

  修改keepalived主(lvs-server-master)配置文件實現 virtual_instance 實例

2.1 配置文件中修改三段

  配置文件為/etc/keepalived/keepalived.conf
全局段,故障通知郵件配置

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from root@keer.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keepalived_lvs
}

② 配置虛擬路由器的實例段,VI_1是自定義的實例名稱,可以有多個實例段

vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keer
    }
    virtual_ipaddress {
        172.17.100.100
    }
}

③ 設置一個virtual server段

virtual_server 172.17.100.100 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    nat_mask 255.255.255.255
    persistence_timeout 600
    protocol TCP

④ 配置real server段

	real_server 172.17.1.7 80 {
		weight 1
		HTTP_GET {
            url {
	            path /
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.17.22.22 80 {
        weight 2
        HTTP_GET {
            url {
	            path /
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

  一定要注意大小寫

2.2 開啟keepalived 服務

  service keepalived start

  能看到網卡別名 和 負載均衡策略已經設置好了

  我們來使用ipvsadm -Ln來查看一下:

2.3 后續

  因為是主從方式,所以從上的配置和主只有一點差別;所以可以把這個配置文件拷貝到從服務器上在進行修改即可:

	scp /etc/keepalived/keepalived.conf @172.17.11.11:

3、配置lvs-server-backup (從服務器)

3.1 修改配置文件

  因為這個配置文件是從主服務器上拷貝過來的,所以只需要修改②實例段,其他都不要變,保證一模一樣

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keer
    }

3.2 開啟keepalived 服務

service keepalived start

  負載均衡策略已經設置好了,注意:主director沒有宕機,從上就不會有VIP
  可以用ipvsadm -Ln 來查看,可能過一會才會顯示

4、配置 real server

4.1 開啟事前准備好的web服務

	systemctl start nginx
	systemctl start mariadb
	systemctl start php-fpm

4.2 因為是DR模式,需在rs上進行設置

4.2.1 配置路由

  配置VIP到本地回環網卡lo上,並只廣播自己

	ifconfig lo:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up

  配置本地回環網卡路由

	route add -host 172.17.100.100 lo:0
4.2.2 使RS “閉嘴”
	echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
	echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

忽略ARP廣播

	echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
	echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

注意:關閉arp應答
1:僅在請求的目標IP配置在本地主機的接收到請求報文的接口上時,才給予響應
2:必須避免將接口信息向非本網絡進行通告

4.2.3 想永久生效,可以寫到配置文件中
vim /etc/sysctl.conf
	net.ipv4.conf.lo.arp_ignore = 1
	net.ipv4.conf.lo.arp_announce = 2
	net.ipv4.conf.all.arp_ignore = 1
	net.ipv4.conf.all.arp_announce = 2

5、測試

5.1 lvs負載均衡作用是否開啟

客戶端訪問http://172.17.100.100/

也可以詳細測試
① 在rs1 上設置一個測試一面
vim /data/web/test.html
real server 1

② 在rs2 上設置一個測試一面
vim /data/web/test.html
real server 2

③ 網頁訪問http://172.17.100.100/test.html 發現有real server 1也有real server 2

5.2 測試keepalived的主從方式

① 使keepalive 的主宕機

	service keepalived stop

  會發現服務能照常訪問,但是VIP 漂移到了從上
  從多了網卡別名,且地址是VIP

[root@server-backup ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:22:8d:75 brd ff:ff:ff:ff:ff:ff
    inet 172.17.251.66/16 brd 172.17.255.255 scope global eth0
    inet 172.17.100.100/32 scope global eth1
    inet6 fe80::20c:29ff:fe22:8d75/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:22:8d:7f brd ff:ff:ff:ff:ff:ff
    inet 192.168.37.128/24 brd 192.168.37.255 scope global eth1
    inet6 fe80::20c:29ff:fe22:8d7f/64 scope link 
       valid_lft forever preferred_lft forever
4: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether ba:21:04:5b:66:60 brd ff:ff:ff:ff:ff:ff

② 使keepalive 的主重新開啟服務,因為主的優先級高,所以VIP又重新漂移到了主上

實驗二:實現keepalived雙主方式高可用基於LVS-DR模式的應用實戰:

實驗原理

互為主從:主從都在工作;其中一個宕機了,VIP漂移到另一個上,提供服務

1、實驗環境,基本同上

機器名稱 IP配置 服務角色 備注
lvs-server-1 VIP:172.17.120.120 DIP:172.17.66.66 負載均衡器 主服務器 開啟路由功能 配置keepalived
lvs-server2 VIP:172.17.120.121 DIP:172.17.251.66 后端服務器 從服務器 開啟路由功能 配置keepalived
rs01 RIP:172.17.77.77 后端服務器 網關指向DIP(橋接)
rs02 RIP:172.17.252.111 后端服務器 網關指向DIP(橋接)

2、配置 lvs-server-master1(第一個主服務器)

  配置基本同上,就是加了一個實例段
  修改keepalived主(lvs-server-master)配置文件實現 virtual_instance 實例

2.1 主的設置 VI_1

vim /etc/keepalived/keepalived.conf  
vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keer
    }
    virtual_ipaddress {
        172.17.120.120
    }
}

virtual_server 172.17.120.120 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    nat_mask 255.255.255.255
    persistence_timeout 600
    protocol TCP

    real_server 172.17.1.7 80 {
        weight 1
        HTTP_GET {
            url {
              path /
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.17.22.22 80 {
        weight 1
        HTTP_GET {
            url {
              path /
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

2.2 從的設置 VI_2

vrrp_instance VI_2 {
    state BACKUP
    interface eth1
    virtual_router_id 52
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass along
    }
    virtual_ipaddress {
        172.17.120.121
    }
}

virtual_server 172.17.120.121 443 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    nat_mask 255.255.255.255
    persistence_timeout 600
    protocol TCP

    real_server 172.17.77.77 443 {
        weight 1
        HTTP_GET {
            url {
	            path /
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.17.252.111 443 {
        weight 2
        HTTP_GET {
            url {
	            path /
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

2.3 開啟keepalived 服務

	service keepalived start

  能看到網卡別名 和 負載均衡策略已經設置好了

2.4 后續

  因為是主從方式,所以從上的配置和主只有一點差別;所以可以把這個配置文件拷過去

	scp /etc/keepalived/keepalived.conf @172.17.11.11:

3、配置 lvs-server-master2(第二個主服務器)

  在lvs-server2 上,基本同1,就是把實例的主從調換一下

3.1 從的設置 VI_1

vim /etc/keepalived/keepalived.conf   
vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 51
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keer
    }
    virtual_ipaddress {
        172.17.120.120
    }
}

3.2 主的設置 VI_2

vrrp_instance VI_2 {
    state MASTER
    interface eth1
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keer
    }
    virtual_ipaddress {
        172.17.120.121
    }
}

3.3 開啟keepalived 服務

	service keepalived start

  能看到網卡別名 和 負載均衡策略已經設置好了,顯示結果會等段時間再顯示
  

4、配置 real server

4.1 開啟事前准備好的web服務

        systemctl start nginx
        systemctl start mariadb
        systemctl start php-fpm

4.2 因為是DR模式,需在rs上進行設置

4.2.1 配置路由

  配置VIP到本地回環網卡lo上,並只廣播自己

	ifconfig lo:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up

  配置本地回環網卡路由

	route add -host 172.17.100.100 lo:0
4.2.2 使RS “閉嘴”
	echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
	echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

忽略ARP廣播

	echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
	echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

注意:關閉arp應答
1:僅在請求的目標IP配置在本地主機的接收到請求報文的接口上時,才給予響應
2:必須避免將接口信息向非本網絡進行通告

4.2.3 想永久生效,可以寫到配置文件中
vim /etc/sysctl.conf
	net.ipv4.conf.lo.arp_ignore = 1
	net.ipv4.conf.lo.arp_announce = 2
	net.ipv4.conf.all.arp_ignore = 1
	net.ipv4.conf.all.arp_announce = 2

5、測試

5.1 lvs負載均衡作用是否開啟

  客戶端訪問http://172.17.100.100/ 公網172.17.100.100只能訪問80
https://172.17.100.101/ 公網172.17.100.101只能訪問443



  也可以詳細測試:
① 在rs1 上設置一個測試一面

	vim /data/web/test.html
	real server 1

② 在rs2 上設置一個測試一面

	vim /data/web/test.html
	real server 2

③ 網頁訪問http://172.17.100.100/test.html或https://172.17.100.101/test.html 發現有real server 1也有real server 2

5.2 測試keepalived的雙主方式

  使keepalive 的任意一個宕機

	service keepalived stop

  會發現服務能照常訪問,另一個機器80、443都能訪問,且宕機的VIP漂移到了另一個服務器上

實驗三:實現keepalived主從方式高可用基於LVS-NAT模式的應用實戰:

實驗原理

主從:一主一從,主的在工作,從的在休息;主的宕機了,VIP漂移到從上,由從提供服務

1、環境准備

機器名稱 IP配置 服務角色 備注
lvs-server-1 VIP:172.17.120.120 DIP:192.168.37.120 負載均衡器 主服務器 開啟路由功能 配置keepalived
lvs-server-2 VIP:172.17.120.120 DIP:192.168.37.120 后端服務器 從服務器 開啟路由功能 配置keepalived
rs01 RIP:192.168.37.222 后端服務器 網關指向DIP
rs02 RIP:192.168.37.111 后端服務器 網關指向DIP

注意:要確保rs和DIP在一個網段,且不和VIP在一個網段

2、配置 lvs-server-master(主服務器)

2.1 配置文件中修改三段

  配置文件為 /etc/keepalived/keepalived.conf
① 全局段,故障通知郵件配置

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from root@keer.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keepalived_lvs
}

② 配置虛擬路由器的實例段,VI_1是自定義的實例名稱,可以有多個實例段

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 190
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keer
    }
    virtual_ipaddress {
        172.17.120.120
        192。168.37.120
    }
}

③ 設置一個virtual server段

virtual_server 172.17.120.120 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind NAT
    nat_mask 255.255.255.255
    persistence_timeout 120
    protocol TCP

④ 配置real server段

    real_server 192.168.37.222 80 {
        weight 1
        HTTP_GET {
            url {
              path /
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.37.111 80 {
        weight 2
        HTTP_GET {
            url {
              path /
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

2.2 因為是NAT模式,所以需開啟路由轉發功能

vim /etc/sysctl.conf
	net.ipv4.ip_forward = 1

  接着使用sysctl -p 讀一下,使參數生效

2.3 開啟keepalived 服務

	service keepalived start

  能看到網卡別名 和 負載均衡策略已經設置好了

2.4 后續

  因為是主從方式,所以從上的配置和主只有一點差別;所以可以把這個配置文件拷過去

scp /etc/keepalived/keepalived.conf @172.17.251.66:

3、配置 lvs-server-backup (從服務器)

3.1 修改配置文件

  因為這個配置文件是從主服務器上拷貝過來的,所以只需要修改②實例段,其他都不要變,保證一模一樣:

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 190
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keer
    }
    virtual_ipaddress {
        172.17.120.120
        192.168.37.120
    }
}

3.2 因為是NAT模式,所以需開啟路由轉發功能

vim /etc/sysctl.conf
	net.ipv4.ip_forward = 1

  接着使用sysctl -p讀一下,使參數生效

3.3 開啟keepalived 服務

	service keepalived start

  負載均衡策略已經設置好了,注意:主director沒有宕機,從上就不會有VIP

4、配置 real server

4.1 開啟事前准備好的web服務

systemctl start nginx
systemctl start mariadb
systemctl start php-fpm

4.2 因為是NAT模式,需在rs上設置

  只需把網關指向DIP

route add default gw 192.168.37.123

  此時,我們可以查看一下網關:

[root@rs01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.37.123  0.0.0.0         UG    0      0        0 ens34
0.0.0.0         172.17.0.1      0.0.0.0         UG    100    0        0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U     100    0        0 ens33
192.168.37.0    0.0.0.0         255.255.255.0   U     100    0        0 ens34
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

  我們發現,還有一個172的網關在生效,所以我們把它down掉:

[root@rs01 ~]# ifconfig ens33 down

  一定要注意這一點,不然多個網關會讓數據不知道從哪走~

5、測試

5.1 lvs負載均衡作用是否開啟

  客戶端訪問http://172.17.120.120/

  也可以進行詳細測試:
① 在rs1 上設置一個測試頁面

vim /data/web/test.html
	real server 1

② 在rs2 上設置一個測試頁面

vim /data/web/test.html
	real server 2

③ 網頁訪問http://172.17.120.120/test.html 發現有real server 1也有real server 2

5.2 測試keepalived的主從方式

① 使keepalive 的主宕機

	service keepalived stop

  會發現服務能照常訪問,但是VIP 漂移到了從上
  從多了網卡別名,且地址是VIP

③ 使keepalive 的主重新開啟服務,因為主的優先級高,所以VIP又重新漂移到了主上

	service keepalived start


  以上~如果有不足之處還請大家多多指教喏٩(๑>◡<๑)۶


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM