前端負載及高可用配置(Hproxy+Keepalived)

前端負載及高可用配置(Hproxy+Keepalived)

拓撲圖以下:html

wKiom1MNgV2wnG36AAFE7GdVpLI209.jpg

爲了便於之後的維護與運維,採用了比較簡單的技術,但要明白,技術簡單只是相對於使用者,開發者簡化了用戶使用配置,可是功能仍是很強大的。對於負載均衡,咱們採用haproxy技術,高可用性採用keepalived技術。前端

注:Haproxy可提供高可用性、負載均衡以及基於TCPHTTP應用的代理,支持虛擬主機,而且它是免費的。linux

       Haproxy並無使用多進程或多線程,而是實現一種事件驅動、單一進程模型,這樣就沒必要受內存等限制,可是一般來講,它的擴展性會比較差。nginx

       Keepalived是一個相似於layer3,4,5交換機制的軟件,也就是日常說的第3,4,5web

交換。redis

        Layer3,4&5工做在IP/TCP協議棧的IP層,TCPapache

        Layer3:keepalived使用layer3的方式工做時,keepalived會按期向服務器羣中的服務器發送一個ICMP數據包,因此,layer3的方式是以服務器的IP地址是否有效做爲服務器工做正常與否的標準vim

        Layer4:Layer4主要以TCP端口的狀態來決定服務器工做正常與否。windows

        Layer5:Layer5就是工做在具體的應用層,它將根據用戶的設定檢查服務器程序運行是否正常,若是與用戶設定不相符,則會把此服務器從服務器羣中剔除。後端

        Keepalived主要用於RealServer的健康狀態檢查以及LoadBalance主機和Slave主機之間failover的實現

Haproxy配置(Master)

注:本實驗只是一個測試環境,對於WEB服務器等只是簡單的實現。

以圖中環境鏈接好服務器,IP等,咱們將會以haproxy—keepalived順序進行配置。

Haproxy服務安裝

注:請自行下載所需軟件,最好使用最新版本。

注:配置以前要先關閉iptablesselinux

1.更改主機名

咱們以10.1.13.231服務器爲Keepalived主服務器,命名爲Master.KPLD;

10.1.13.232爲輔服務器,命名爲:slave.KPLD

[root@localhost ~]# cat /etc/hosts

127.0.0.1  localhost Master.KPLD localhost4 localhost4.localdomain4

::1        localhost localhost.localdomain localhost6 localhost6.localdomain6

[root@localhost ~]# cat/etc/sysconfig/network

NETWORKING=yes

HOSTNAME=Master.KPLD

2.解壓安裝haproxy軟件包

# tar zxvf haproxy-1.3.20.tar.gz


[root@Master ~]# tar -zxvfhaproxy-1.3.20.tar.gz

[root@Master ~]# cd haproxy-1.3.20

[root@Master haproxy-1.3.20]# uname -r

2.6.32-279.el6.x86_64      //這裏要查看一下內核版本號,安裝haproxy的時候,要指定正確版本號的

          [root@Master haproxy-1.3.20]# vim Makefile        

             64 PREFIX = /usr/local修改成: 64PREFIX = /usr/local/haproxy

由於解壓以後的文件是通過編譯過的,有人直接在安裝的時候使用—prefix=指明安裝路徑,我作了幾回,發現是不能成功的,因此要想把安裝文件放在一個目錄下,只能修改Makefile文件

      [root@Master haproxy-1.3.20]# make TARGET=linux26   //對應上面的內核版本

      [root@Master haproxy-1.3.20]# make install

      [root@Master haproxy-1.3.20]# mkdir /usr/local/haproxy/etc   //建立配置文件目錄

      [root@Master haproxy-1.3.20]# cp -p examples/haproxy.cfg/usr/local/haproxy/etc/    //haproxy源碼下有提供配置文件模板,咱們只須要copy過去,修改便可

3.Haproxy服務配置

[root@Masteretc]# vim haproxy.cfg

global

      log 127.0.0.1   local0

       log 127.0.0.1   local1 notice

       #log loghost    local0 info

       maxconn 4096

       chroot /usr/share/haproxy

       uid 99

       gid 99

       daemon                 //配置haproxy進入後臺運行模式

       nbproc 2                 //建立2個進程進入deamon模式運行

       pidfile /usr/local/haproxy/haproxy.pid

       #debug

       #quiet


defaults

       log    global

       mode   http       //默認模式mode

       option httplog

       option dontlognull   //自動結束完成的連接

       retries 3

       option redispatch       //serverid對應的服務器掛掉後,強制定向到其餘健康的服務器

       maxconn 2000

       contimeout      5000

       clitimeout      50000

       srvtimeout      50000

       stats uri /haproxy_stats         //訪問統計頁面的url

       stats realm user \ passwd        //統計頁面密碼框提示文本

       stats auth haproxy:haproxy       //統計頁面用戶名與密碼

       stats hide-version               //隱藏haproxy版本信息

listen  www.rhel.com 0.0.0.0:80

       cookie SERVERID rewrite

       balanceroundrobin

#       balance source                 //最好使用這個,能夠保證同一臺客戶機,固定訪問一臺服務器

       server 192.168.1.10 192.168.1.10:80 cookie 192.168.1.10 check inter 2000 rise 2fall

       server  192.168.1.20 192.168.1.20:80 cookie192.168.1.20 check inter 2000 rise 2 fall 5

// 服務器定義,checkinter 2000指檢測心中頻率,rise3次正解認爲服務器可用,fall 5指失敗5次認爲服務器不可用,也可設置權值weigth 數字

在配置以後,須要建立一個文件,與配置想對應

[root@Master etc]# mkdir /usr/share/haproxy

4.日誌配置

     [root@Masteretc]# vim /etc/rsyslog.conf      //日誌配置文件

添加此兩行內容

local0.*/var/log/haproxy.log                //增長local0的日誌文件,下同

local1.* /var/log/haproxy.log

             [root@Master etc]# vim/etc/sysconfig/rsyslog

修改此行:SYSLOGD_OPTIONS="-r -m 0"

              [root@Master etc]# servicersyslog restart       //重啓日誌進程

重啓以後就能夠看到/var/log/已經出現了haproxy.log這個文件

5.啓動haproxy服務器

[root@Master ~]#/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg

能夠查看一下進程

[root@Mastersbin]# netstat -tulpn | grep haproxy

tcp        0     0 0.0.0.0:10001  0.0.0.0:*   LISTEN     3451/./haproxy      

udp 0 00.0.0.0:49372 0.0.0.0:*                              3451/./haproxy      

[root@Mastersbin]#

即啓動成功

6.開啓路由轉發功能

[root@Mastersbin]# echo "1">/proc/sys/net/ipv4/ip_forward

7.Haproxy(Slave)

Slave的安裝與Master的安裝是同樣的,咱們只須要修改Slave的主機名便可,這裏不在贅述

配置服務器Web1Web2

注:httpd服務器只是在此階段進行測試使用,到後端Nginx服務器搭建以後,此httpd服務器要關閉!

1.修改Web1Web2主機名

[root@localhost~]# hostname Web1.KPLD      //如須要可配置成永久主機名

root@Web1 ~]#yum install httpd –y             //安裝apache

root@Web1 ~]# echo "Web1.KPLD">/var/www/html/index.html

[root@Web1 ~]#service httpd start

       Web2.rhel.com的配置基本同樣,須要修改一下主機名,建立index.html網頁時更改一下內容

[root@Web2 ~]# echo "Web2.KPLD">/var/www/html/index.html

一.測驗Haproxy服務是否安裝成功

在地址欄中輸入Master/Slaveip地址(這裏的MasterSlave是對keepalived高可用所說的,haproxy負載均衡無關係)

wKiom1MNgb3SA2VHAABgZq4p_wU711.jpg

點擊刷新

wKioL1MNgZfTDKegAABivgO3a-4957.jpg

由於咱們採用的是輪詢,因此會在兩個服務器之間進行輪詢查看.

咱們也可使圖形界面查看Haproxy服務下配置的服務器使用狀態

wKiom1MNgb2Bq3A9AADlqOkyMQ4271.jpg

在更高的版本中,增長了更高級的功能,好比,能夠直接下架服務器。

Keepalived服務配置(Master)

咱們已經實如今haproxy的負載均衡,可是,咱們不能夠一下發布兩個地址,因此要使用keepalived高可用特性來實現虛擬ip,達到高可用性的目的.

1.keepalived的安裝

[root@Master ~]# yum install kernel-devel openssl-devel popt-devel    //安裝依賴文件

[root@Master ~]# tar -zxvf keepalived-1.2.2.tar.gz

[root@Master ~]# cd keepalived-1.2.2

[root@Master keepalived-1.2.2]# ./configure--with-kernel-dir=/usr/src/kernels/2.6.32-279.el6.x86_64/

若是出現如下提示,即爲成功

Keepalivedconfiguration

------------------------

Keepalivedversion       : 1.2.2

Compiler                 : gcc

Compilerflags           : -g -O2

Extra Lib                : -lpopt -lssl -lcrypto

Use IPVSFramework       : Yes

IPVS sync daemonsupport : Yes

IPVS uselibnl           : No

Use VRRPFramework       : Yes

Use Debugflags          : No

[root@Masterkeepalived-1.2.2]#

[root@Masterkeepalived-1.2.2]# make && make install

[root@Masterkeepalived-1.2.2]# cp keepalived/etc/init.d/keepalived.rh.init/etc/init.d/keepalived                            //copy啓動腳本

[root@Masterkeepalived-1.2.2]# chmod +x /etc/init.d/keepalived    //可執行權限

[root@Masterkeepalived-1.2.2]# chkconfig --level 35 keepalived on  //35級別開機啓動

[root@Masterkeepalived-1.2.2]# cp keepalived/etc/init.d/keepalived.sysconfig/etc/sysconfig/keepalived                        //copy啓動初始化文件

[root@Masterkeepalived-1.2.2]# cp /usr/local/sbin/keepalived /usr/sbin/    //copy啓動文件

2.keepalived服務配置

[root@Master keepalived-1.2.2]# vim/usr/local/etc/keepalived/keepalived.conf

! ConfigurationFile for keepalived


global_defs {

  notification_email {

    acassen@firewall.loc

    failover@firewall.loc

    sysadmin@firewall.loc

  }

  notification_email_from Alexandre.Cassen@firewall.loc

  smtp_server 192.168.200.1

  smtp_connect_timeout 30

  router_id LVS_DEVEL

}


vrrp_instanceVI_1 {

   state MASTER

   interface eth2

   virtual_router_id 60

   priority 100

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

   }

   virtual_ipaddress {

      10.1.13.230

   }

}

virtual_server 10.1.13.230 80 {

  delay_loop 6

  lb_algo rr

  lb_kind DR

  nat_mask 255.255.255.0

  persistence_timeout 50

  protocol TCP


   real_server 10.1.13.231 80 {

      weight 1

      TCP_CHECK {

          connect_timeout 3

          nb_get_retry 3

          delay_before_retry 3

      }

   }

  real_server 10.1.13.232 80 {

      weight 1

      TCP_CHECK {

          connect_timeout 3

          nb_get_retry 3

          delay_before_retry 3

      }

   }

}

因爲在啓動腳本/etc/init.d/keepalived的配置中,默認的配置文件爲config:/etc/keepalived/keepalived.conf,因此,咱們要創建一個連接

[root@Masterkeepalived]# ln -s /usr/local/etc/keepalived/keepalived.conf/etc/keepalived/keepalived.conf

啓動keepalived便可

[root@Masterkeepalived-1.2.2]# service keepalived start

Keepalived配置(Slave)

Slave的配置與Master的配置基本相同,只要修改幾個方面便可,這裏再也不貼出完整代碼,只寫出差別的部分


1.將一處state MASTER 修改成state BACKUP

2.將一處priority 100  修改成priority 50

後端NGINX服務器配置

本公司並沒有此服務器,公司真正的服務器爲IIS,我的不喜歡windows服務器方面,因此測試時沒有使用IIS

1.安裝依賴軟件

[root@localhost~]# yum install gcc openssl-devel pcre-devel zlib-devel

2.建立Nginx用戶

# useradd nginx-s /sbin/nologin

3.解壓軟件並安裝

# tar -zxvfnginx-1.4.2.tar.gz

# cd nginx-1.4.2

# ./configure--user=nginx --group=nginx --prefix=/usr/local/nginx--with-http_stub_status_module --with-http_ssl_module

# make&& make install

注:--user,--group:分別指定啓動nginx的賬戶與組

--with-http_stub_status_module:安裝容許狀態模塊

--with-http_ssl_module:安裝ssl模塊

4.啓動nginx

#/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

注:在web1web2中各作一個主頁,web1中內容爲Web1.KPLD,web2中內容爲Web2.KPLD

5.配置靜態路由

因爲咱們的服務器是內部網絡,不能與外部網絡相通,可是Keepalived配置時咱們使用的是DR模型,因此,當一個請求到達時,是由內部服務器直接返回給客戶端,因此,咱們必然要保證內部主機能夠與外網相連通

/etc/rc.local中添加以下路由

  route add defaultgw 192.168.200.253

6.除了配置在web服務器上配置IP以外,還須要對內網作SNAT,可在兩臺Keepalived上作SNAT

iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -j SNAT--to 10.1.13.231-10.1.13.232



測試Keepalived

因爲設定的是Masterkeepalived爲主服務器,因此能夠在Master上查看是否有虛擬地址

[root@Master keepalived]# ip addr

應該能找到以下內容

2: eth2:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether 00:0c:29:3a:4d:dd brdff:ff:ff:ff:ff:ff

   inet 10.1.13.231/24 brd 10.1.13.255 scopeglobal eth2

   inet 10.1.13.230/32 scope global eth2               //能夠看出,虛擬IP出現。

   inet6 fe80::20c:29ff:fe3a:4ddd/64 scopelink

      valid_lft forever preferred_lft forever

也能夠安裝ipvsadm來查看配置

     [root@Masterkeepalived]# yum install ipvsadm

使用ipvsadm –L來查看

如今使用虛擬ip地址來查看網頁

wKioL1MNggbzC8DMAABo9SFNrqo976.jpg

如今咱們來測試一下高可用性,Masterkeepalived stop,看會不會進行vip的轉移

Master上關閉keepalived服務,查看Slaveip addr是否出現vip

[root@Master keepalived]# servicekeepalived stop

Slave上查看

[root@Slave ~]# ip addr

2: eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether 08:00:27:a5:0e:93 brdff:ff:ff:ff:ff:ff

   inet 10.1.13.232/24 brd 10.1.13.255 scopeglobal eth1

   inet 10.1.13.230/24 scope global secondaryeth1          //虛擬IP出現

   inet6 fe80::a00:27ff:fea5:e93/64 scope link

     valid_lft forever preferred_lftforever

再經過瀏覽器查看網頁,自行查看。


也是正常的,高可用性也是成功的.

配置排錯

Keepalived配置出現的問題及解決方法

錯誤一:

configure: error:

 !!!OpenSSL is not properly installed on your system. !!!

 !!!Can not include OpenSSL headers files.            !!!

安裝openssl-devel

  yum install openssl-devel


錯誤二:

configure: error: Popt libraries isrequired

安裝popt開發包

 yum install popt-devel

錯誤三:

[root@Master keepalived-1.2.2]# servicekeepalived start

Starting Keepalived for LVS: /bin/bash:keepalived: command not found

                                                         [FAILED]

解決方法:

[root@Slave ~]# cp/usr/local/sbin/keepalived /usr/sbin/


錯誤四:

    Ipvs協議不可用

  Dec31 10:51:02 Slave Keepalived_healthcheckers: Registering Kernel netlink commandchannel

Dec 31 10:51:02 SlaveKeepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'.

Dec 31 10:51:02 SlaveKeepalived_healthcheckers: Configuration is using : 14529 Bytes

Dec 31 10:51:02 Slave Keepalived:Healthcheck child process(19805) died: Respawning

Dec 31 10:51:02 Slave Keepalived: StartingHealthcheck child process, pid=19807

Dec 31 10:51:02 SlaveKeepalived_healthcheckers: IPVS: Can't initialize ipvs: Protocol not available

Dec 31 10:51:02 SlaveKeepalived_healthcheckers: Netlink reflector reports IP 10.1.13.232 added

解決方法:

手動加載ip_vs模塊

modprobe ip_vs

modprobe ip_vs_wrr

而且加入開機啓動

 #cat /etc/rc.local

   /sbin/modprobeip_vs

/sbin/modprobe ip_vs_wrr



錯誤五:

 Master服務器與Slave服務器都出現虛擬IP地址,並用當主服務器斷開後,從服務器不能切換,日誌顯示以下

Dec 18 22:37:24 localhost Keepalived_vrrp:bogus VRRP packet received on eth1 !!!

Dec 18 22:37:24 localhost Keepalived_vrrp:VRRP_Instance(VI_1) ignoring received advertisment...

Dec 18 22:37:25 localhost Keepalived_vrrp:ip address associated with VRID not present in received packet : 10.1.13.230

Dec 18 22:37:25 localhost Keepalived_vrrp:one or more VIP associated with VRID mismatch actual MASTER advert

出現這個緣由主要是virtual_router_id配置不正確,默認狀況下是51,可是有些狀況下須要更改,好比修改成:virtual_router_id 60 ,切換就會成功了

相關文章
相關標籤/搜索