1、配置HAProxy負載平衡集羣html
目標:web
準備三臺Linux服務器,兩臺作Web服務器,一臺安裝HAProxy,實現以下功能:redis
方案:算法
使用3臺虛擬機,1臺做爲HAProxy調度器、2臺做爲Real Server、物理機做爲客戶端,拓撲結構以下圖所示。vim
步驟:後端
步驟一:配置後端Web服務器瀏覽器
1)配置兩臺Web服務器網絡參數服務器
[root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.1
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.106.0.10
[root@web1 ~]# service network restart
[root@web1 ~]# iptables -F
[root@web1 ~]# service iptables save
[root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.2
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.106.0.10
[root@web2 ~]# systemctl restart NetworkManagercookie
2)設置後端Web服務網絡
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# echo 「192.168.0.1」 > /var/www/html/index.html
[root@web2 ~]# yum -y install httpd
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# echo 「192.168.0.2」 > /var/www/html/index.html
步驟二:部署HAProxy服務器
1)配置網絡,安裝軟件
[root@haproxy ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=202.114.106.20
[root@haproxy ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.254
NETMASK=255.255.255.0
DNS1=202.106.0.20
[root@haproxy ~]# systemctl restart NetworkManager
[root@haproxy ~]# sed -i '/ip_forward/s/0/1/' sysctl.conf //開啓路由轉發
[root@haproxy ~]# sysctl -p
[root@haproxy ~]# yum -y install haproxy
2)修改配置文件
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2 ###[err warning info debug]
chroot /usr/local/haproxy
pidfile /var/run/haproxy.pid ###haproxy的pid存放路徑
maxconn 4000 ###最大鏈接數,默認4000
user haproxy
group haproxy
daemon ###建立1個進程進入deamon模式運行
defaults
mode http ###默認的模式mode { tcp|http|health } log global ###採用全局定義的日誌
option dontlognull ###不記錄健康檢查的日誌信息
option httpclose ###每次請求完畢後主動關閉http通道
option httplog ###日誌類別http日誌格式
option forwardfor ###後端服務器能夠從Http Header中得到客戶端ip
option redispatch ###serverid服務器掛掉後強制定向到其餘健康服務器
timeout connect 10000 #若是backend沒有指定,默認爲10s
timeout client 300000 ###客戶端鏈接超時
timeout server 300000 ###服務器鏈接超時
maxconn 60000 ###最大鏈接數
retries 3 ###3次鏈接失敗就認爲服務不可用,也能夠經過後面設置
listen stats
bind 0.0.0.0:1080 #監聽端口
stats refresh 30s #統計頁面自動刷新時間
stats uri /stats #統計頁面url
stats realm Haproxy Manager #統計頁面密碼框上提示文本
stats auth admin:admin #統計頁面用戶名和密碼設置
#stats hide-version #隱藏統計頁面上HAProxy的版本信息
listen websrv-rewrite 0.0.0.0:80
cookie SERVERID rewrite
balance roundrobin
server web1 192.168.20.101:80 cookie \
app1inst1 check inter 2000 rise 2 fall 5
server web2 192.168.20.102:80 cookie \
app1inst2 check inter 2000 rise 2 fall 5
3)啓動服務器並設置開機啓動
[root@haproxy ~]# systemctl start haproxy
[root@haproxy ~]# systemctl enable haproxy
步驟三:客戶端驗證
客戶端配置與HAProxy相同網絡的IP地址,並使用火狐瀏覽器訪問http://202.114.106.20,測試調度器是否正常工做,客戶端訪問http://202.114.106.20/haproxy-admin測試狀態監控頁面是否正常。
2、Keepalived高可用服務器
目標:
準備三臺Linux服務器,兩臺作Web服務器,並部署Keepalived高可用軟件,一臺做爲客戶端主機,實現以下功能:
方案:
使用3臺虛擬機,2臺做爲Web服務器,並部署Keepalived、1臺做爲客戶端,拓撲結構以下圖所示。
步驟:
步驟一:配置網絡環境
1)設置Web服務器網絡參數
[root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.0.10
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.106.0.20
[root@web1 ~]# systemctl restart NetworkManager
[root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.0.20
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.106.0.20
[root@web2 ~]# systemctl restart NetworkManager
2)自定義Web頁面
[root@web1 ~]# echo 「172.16.0.10」 > /var/www/html/index.html
[root@web2 ~]# echo 「172.16.0.20」 > /var/www/html/index.html
3)啓動Web服務器軟件
[root@web1 ~]# systemctl start httpd
[root@web2 ~]# systemctl start httpd
步驟二:安裝Keepalived軟件
注意:兩臺Web服務器作相同的操做。
[root@web1 ~]# yum install -y keepalived
[root@web2 ~]# yum install -y keepalived
步驟三:部署Keepalived服務
1)修改web1服務器Keepalived配置文件
[root@web1 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
admin@tarena.com.cn //設置報警收件人郵箱
}
notification_email_from ka@localhost //設置發件人
smtp_server 127.0.0.1 //定義郵件服務器
smtp_connect_timeout 30
router_id web1 //設置路由ID號
}
vrrp_instance VI_1 {
state MASTER //主服務器爲MASTER
interface eth0 //定義網絡接口
virtual_router_id 50 //主輔VRID號必須一致
priority 100 //服務器優先級
advert_int 1
authentication {
auth_type pass
auth_pass forlvs //主輔服務器密碼必須一致
}
virtual_ipaddress { 172.16.0.1 }
}
2)修改web2服務器Keepalived配置文件
[root@web1 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
admin@tarena.com.cn //設置報警收件人郵箱
}
notification_email_from ka@localhost //設置發件人
smtp_server 127.0.0.1 //定義郵件服務器
smtp_connect_timeout 30
router_id web2 //設置路由ID號
}
vrrp_instance VI_1 {
state SLAVE //從服務器爲SLAVE
interface eth0 //定義網絡接口
virtual_router_id 50 //主輔VRID號必須一致
priority 50 //服務器優先級
advert_int 1
authentication {
auth_type pass
auth_pass forlvs //主輔服務器密碼必須一致
}
virtual_ipaddress { 172.16.0.1 }
}
3)啓動服務
[root@web1 ~]# systemctl start keepalived
[root@web2 ~]# systemctl start keepalived
步驟四:測試
1)登陸兩臺Web服務器查看VIP信息
[root@web1 ~]# ip addr show
[root@web2 ~]# ip addr show
2) 客戶端訪問
客戶端使用curl命令鏈接http://172.16.0.1,查看Web頁面;關閉Web1服務器的網卡,客戶端再次訪問http://172.16.0.1,驗證是否能夠正常訪問服務。
3、Keepalived+LVS服務器
目標:
使用Keepalived爲LVS調度器提供高可用功能,防止調度器單點故障,爲用戶提供Web服務:
方案:
使用5臺虛擬機,1臺做爲Linux路由器、2臺做爲LVS調度器、2臺做爲Real Server、物理機做爲客戶端,拓撲結構以下圖所示。
步驟:
步驟一:配置網絡環境
1)設置Web服務器網絡參數
[root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.1
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.106.0.20
[root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.253
NETMASK=255.255.255.255
[root@web1 ~]# vim /etc/sysctl.conf
.. ..
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[root@web1 ~]# sysctl -p
[root@web1 ~]# systemctl restart NetworkManager
[root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.2
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.106.0.20
[root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.253
NETMASK=255.255.255.255
[root@web2 ~]# vim /etc/sysctl.conf
.. ..
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[root@web2 ~]# sysctl -p
[root@web2 ~]# systemctl restart NetworkManager
2)自定義Web頁面
[root@web1 ~]# echo 「192.168.0.1」 > /var/www/html/index.html
[root@web2 ~]# echo 「192.168.0.2」 > /var/www/html/index.html
3)啓動Web服務器軟件
[root@web1 ~]# systemctl start httpd;systemctl enable httpd
[root@web2 ~]# systemctl start httpd;systemctl enable httpd
4)設置LVS調度器網絡參數
[root@lvs1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.10
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.106.0.20
[root@lvs1 ~]# systemctl restart NetworkManager
[root@lvs2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.20
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=202.106.0.20
[root@lvs2 ~]# systemctl restart NetworkManager
5)設置Linux路由器網絡參數
[root@router ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=202.114.106.20
DNS1=202.106.0.20
[root@router ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.254
NETMASK=255.255.255.0
DNS1=202.106.0.20
[root@router ~]# systemctl restart NetworkManager
6)設置Linux路由器
[root@router ~]# sed -i '/ip_forward/s/0/1/' sysctl.conf //開啓路由轉發
[root@router ~]# sysctl -p
步驟二:調度器安裝Keepalived與ipvsadm軟件
注意:兩臺LVS調度器執行相同的操做。
安裝軟件
[root@lvs1 ~]# yum install -y keepalived
[root@lvs1 ~]# systemctl enable keepalived
[root@lvs1 ~]# yum install -y ipvsadm
[root@lvs2 ~]# yum install -y keepalived
[root@lvs2 ~]# systemctl enable keepalived
[root@lvs2 ~]# yum install -y ipvsadm
步驟三:部署Keepalived實現LVS-DR模式調度器的高可用
1)LVS1調度器設置Keepalived,並啓動服務
[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
admin@tarena.com.cn //設置報警收件人郵箱
}
notification_email_from ka@localhost //設置發件人
smtp_server 127.0.0.1 //定義郵件服務器
smtp_connect_timeout 30
router_id lvs1 //設置路由ID號
}
vrrp_instance VI_1 {
state MASTER //主服務器爲MASTER
interface eth0 //定義網絡接口
virtual_router_id 50 //主輔VRID號必須一致
priority 100 //服務器優先級
advert_int 1
authentication {
auth_type pass
auth_pass forlvs //主輔服務器密碼必須一致
}
virtual_ipaddress { 192.168.0.253 }
}
virtual_server 192.168.0.253 80 { //設置VIP爲192.168.0.253
delay_loop 6
lb_algo wrr //設置LVS調度算法爲RR
lb_kind DR //設置LVS的模式爲DR
persistence_timeout 1
protocol TCP
real_server 192.168.0.1 80 {
weight 1 //設置權重爲1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.0.2 80 {
weight 2 //設置權重爲2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
[root@lvs1 ~]# systemctl start keepalived
[root@lvs1 ~]# ipvsadm -Ln
2)LVS2調度器設置Keepalived
[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
admin@tarena.com.cn //設置報警收件人郵箱
}
notification_email_from ka@localhost //設置發件人
smtp_server 127.0.0.1 //定義郵件服務器
smtp_connect_timeout 30
router_id lvs2 //設置路由ID號
}
vrrp_instance VI_1 {
state SLAVE //從服務器爲SLAVE
interface eth0 //定義網絡接口
virtual_router_id 50 //主輔VRID號必須一致
priority 50 //服務器優先級
advert_int 1
authentication {
auth_type pass
auth_pass forlvs //主輔服務器密碼必須一致
}
virtual_ipaddress { 192.168.0.253 }
}
virtual_server 192.168.0.253 80 { //設置VIP爲192.168.0.253
delay_loop 6
lb_algo wrr //設置LVS調度算法爲RR
lb_kind DR //設置LVS的模式爲DR
persistence_timeout 1
protocol TCP
real_server 192.168.0.1 80 {
weight 1 //設置權重爲1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.0.2 80 {
weight 2 //設置權重爲2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
[root@lvs2 ~]# systemctl start keepalived
[root@lvs2 ~]# ipvsadm -Ln
步驟四:客戶端測試
客戶端使用curl命令反覆鏈接http://202.114.106.20,查看訪問的頁面是否會輪詢到不一樣的後端真實服務器。