Cluster基礎(三):配置HAProxy負載平衡集羣、Keepalived高可用服務器、Keepalived+LVS服務器

1、配置HAProxy負載平衡集羣html

目標:web

準備三臺Linux服務器,兩臺作Web服務器,一臺安裝HAProxy,實現以下功能:redis

  •     客戶端訪問HAProxy,HAProxy分發請求到後端Real Server
  •     要求HAProxy能夠根據Cookie爲客戶端分配固定後端服務器
  •     開啓HAProxy監控頁面,及時查看調度器狀態
  •     設置HAProxy爲開機啓動

方案:算法

使用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高可用軟件,一臺做爲客戶端主機,實現以下功能:

  •     使用Keepalived實現web服務器的高可用
  •     Web服務器IP地址分別爲172.16.0.10和172.16.0.20
  •     Web服務器的漂移VIP地址爲172.16.0.1
  •     客戶端經過訪問VIP地址訪問Web頁面

方案:

使用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服務:

  •     路由器對外公網IP地址爲202.114.106.20
  •     路由器內網IP地址爲192.168.0.254
  •     路由器須要設置SNAT及DNAT功能
  •     LVS1調度器真實IP地址爲192.168.0.10
  •     LVS2調度器真實IP地址爲192.168.0.20
  •     服務器VIP地址設置爲192.168.0.253
  •     真實Web服務器地址分別爲192.168.0.一、192.168.0.2
  •     使用加權輪詢調度算法,真實服務器權重與其IP地址末尾數一致

方案:

使用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,查看訪問的頁面是否會輪詢到不一樣的後端真實服務器。

相關文章
相關標籤/搜索