keepalived+lvs負載均衡兩個httpd

準備4臺主機172.16.71.2 172.16.71.3 172.16.71.4 172.16.71.5

前兩個做后端httpd服務器。后兩個做keepalived


首先配置好后端主機172.16.71.2 和172.16.71.3

# 172.16.71.2
yum install httpd
cd /var/www/html
vim index.html
server1 71.2
# 172.16.71.3
yum install httpd
cd /var/www/html
vim index.html
server2 71.3

由于lvs采用的是DR模式,所以要寫腳本修改內核參數并添加路由信息,以下是keepalived雙主需要的腳本,兩臺主機上都需要運行一次:

#!/bin/bash
#
vip=172.16.71.80
vip2=172.16.71.90
mask='255.255.255.255'
interface='lo:0'
interface2='lo:1'

case $1 in
start)
       echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
       echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
       echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
       echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
       ifconfig $interface  $vip netmask $mask broadcast $vip up
       ifconfig $interface2  $vip2 netmask $mask broadcast $vip2 up
       route add -host $vip dev $interface
       route add -host $vip2 dev $interface2
       ;;
stop)
       ifconfig $interface down
       ifconfig $interface2 down
       echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
       echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
       echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
       echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
       ;;
*)
       echo "Usage $(basename $0) start|stop"
       exit 1
       ;;
esac

執行完成后啟動httpdsystemctl start httpd


然后配置前端的keepalived,這里采用的是雙主模式。

配置文件如下:

# 172.16.71.4

! Configuration File for keepalived

global_defs {
  notification_email {
   root@localhost
  }  

  notification_email_from kaadmin@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node1
  vrrp_mcast_group4 224.0.71.1
}

vrrp_instance VI_1 {
   state MASTER
   interface eno16777736
   virtual_router_id 71
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass bashrc
   }  
   virtual_ipaddress {
       172.16.71.80/16 dev eno16777736 label eno16777736:0
   }  
   track_interface {
       eno16777736
   }  
   notify_master "/etc/keepalived/notify.sh master"
   notify_backup "/etc/keepalived/notify.sh backup"
   notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_instance VI_2 {
   state BACKUP
   interface eno16777736
   virtual_router_id 45
   priority 98
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass shell
   }
   virtual_ipaddress {
       172.16.71.90/16 dev eno16777736 label eno16777736:1
   }
   track_interface {
       eno16777736
   }
   notify_master "/etc/keepalived/notify.sh master"
   notify_backup "/etc/keepalived/notify.sh backup"
   notify_fault "/etc/keepalived/notify.sh fault"
}

virtual_server fwmark 3 {
   delay_loop 2
   lb_algo rr
   lb_kind DR
   nat_mask 255.255.0.0
   protocol TCP

   sorry_server 127.0.0.1 80

   real_server 172.16.71.2 80 {
       weight 1
       HTTP_GET {
           url {
             path /
             status_code 200
           }
           connect_timeout 2
           nb_get_retry 3
           delay_before_retry 2
       }
   }

   real_server 172.16.71.3 80 {
       weight 1
       HTTP_GET {
           url {
             path /
             status_code 200
           }
           connect_timeout 2
           nb_get_retry 3
           delay_before_retry 2
       }
   }
}
# 172.16.71.5

! Configuration File for keepalived

global_defs {
  notification_email {
   root@localhost
  }  

  notification_email_from kaadmin@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node2
  vrrp_mcast_group4 224.0.71.1
}

vrrp_instance VI_1 {
   state BACKUP
   interface eno16777736
   virtual_router_id 71
   priority 98
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass bashrc
   }  
   virtual_ipaddress {
       172.16.71.80/16 dev eno16777736 label eno16777736:0
   }  
   track_interface {
       eno16777736
   }  
       notify_master "/etc/keepalived/notify.sh master"
       notify_backup "/etc/keepalived/notify.sh backup"
       notify_fault "/etc/keepalived/notify.sh fault"


}
vrrp_instance VI_2 {
   state MASTER
   interface eno16777736
   virtual_router_id 45
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass shell
   }
   virtual_ipaddress {
       172.16.71.90/16 dev eno16777736 label eno16777736:1
   }
   track_interface {
       eno16777736
   }
       notify_master "/etc/keepalived/notify.sh master"
       notify_backup "/etc/keepalived/notify.sh backup"
       notify_fault "/etc/keepalived/notify.sh fault"
}


virtual_server fwmark 3 {
   delay_loop 2
   lb_algo rr
   lb_kind DR
   nat_mask 255.255.0.0
   protocol TCP

   sorry_server 127.0.0.1 80

   real_server 172.16.71.2 80 {
       weight 1
       HTTP_GET {
           url {
             path /
             status_code 200
               }
           connect_timeout 2
           nb_get_retry 3
           delay_before_retry 2
       }
   }

   real_server 172.16.71.3 80  {
       weight 1
       HTTP_GET {
           url {
             path /
             status_code 200
           }
           connect_timeout 2
           nb_get_retry 3
           delay_before_retry 2
       }
   }
}

# 告警腳本

#!/bin/bash
#
contact='root@localhost'
notify() {
   mailsubject="$(hostname) to be $1, vip floating"
   mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
   echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
   notify master
   ;;
backup)
   notify backup
   ;;
fault)
   notify fault
   ;;
*)
   echo "Usage: $(basename $0) {master|backup|fault}"
   exit 1
   ;;
esac            

在兩個主機上添加iptables

iptables -t mangle -A PREROUTING -d 172.16.71.80 -p tcp --dport 80 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -d 172.16.71.90 -p tcp --dport 80 -j MARK --set-mark 3

在兩臺主機上安裝httpd并添加sorry page,啟動httpd和keepalived

# 172.16.71.4
yum install httpd
cd /var/www/html
vim index.html
sorry page 1
systemctl start httpd keepalived
# 172.16.71.5
yum install httpd
cd /var/www/html
vim index.html
sorry page 2
systemctl start httpd keepalived

測試

訪問172.16.71.80或者172.16.71.90時,會顯示server1 71.2 或server2 71.3頁面。

斷掉后端兩個httpd服務器,再次訪問會顯示sorry page 1或者sorry page 2。

斷掉不同的keepalived會顯示不同的sorry page


下面是keepalived單主模式的配置:

# /etc/keepalived/keepalived.conf

# 172.16.71.4

! Configuration File for keepalived

global_defs {
  notification_email {
   root@localhost
  }  

  notification_email_from kaadmin@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node1
  vrrp_mcast_group4 224.0.71.1
}

vrrp_instance VI_1 {
   state MASTER
   interface eno16777736
   virtual_router_id 71
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass bashrc
   }  
   virtual_ipaddress {
       172.16.71.80/16 dev eno16777736 label eno16777736:0
   }  
   track_interface {
       eno16777736
   }  
   notify_master "/etc/keepalived/notify.sh master"
   notify_backup "/etc/keepalived/notify.sh backup"
   notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_instance VI_2 { # 這段可以注釋掉,不用。
   state BACKUP
   interface eno16777736
   virtual_router_id 45
   priority 98
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass shell
   }
   virtual_ipaddress {
       172.16.71.90/16 dev eno16777736 label eno16777736:1
   }
   track_interface {
       eno16777736
   }
   notify_master "/etc/keepalived/notify.sh master"
   notify_backup "/etc/keepalived/notify.sh backup"
   notify_fault "/etc/keepalived/notify.sh fault"
}

virtual_server 172.16.71.80 80 {
   delay_loop 2
   lb_algo rr
   lb_kind DR
   nat_mask 255.255.0.0
   protocol TCP

   sorry_server 127.0.0.1 80

   real_server 172.16.71.2 80 {
       weight 1
       HTTP_GET {
           url {
             path /
             status_code 200
           }
           connect_timeout 2
           nb_get_retry 3
           delay_before_retry 2
       }
   }

   real_server 172.16.71.3 80 {
       weight 1
       HTTP_GET {
           url {
             path /
             status_code 200
           }
           connect_timeout 2
           nb_get_retry 3
           delay_before_retry 2
       }
   }
}

# /etc/keepalived/keepalived.conf

# 172.16.71.5

! Configuration File for keepalived

global_defs {
  notification_email {
   root@localhost
  }  

  notification_email_from kaadmin@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node2
  vrrp_mcast_group4 224.0.71.1
}

vrrp_instance VI_1 {
   state BACKUP
   interface eno16777736
   virtual_router_id 71
   priority 98
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass bashrc
   }  
   virtual_ipaddress {
       172.16.71.80/16 dev eno16777736 label eno16777736:0
   }  
   track_interface {
       eno16777736
   }  
       notify_master "/etc/keepalived/notify.sh master"
       notify_backup "/etc/keepalived/notify.sh backup"
       notify_fault "/etc/keepalived/notify.sh fault"


}
vrrp_instance VI_2 { # 這段可以注釋掉,不用。
   state MASTER
   interface eno16777736
   virtual_router_id 45
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass shell
   }
   virtual_ipaddress {
       172.16.71.90/16 dev eno16777736 label eno16777736:1
   }
   track_interface {
       eno16777736
   }
       notify_master "/etc/keepalived/notify.sh master"
       notify_backup "/etc/keepalived/notify.sh backup"
       notify_fault "/etc/keepalived/notify.sh fault"
}


virtual_server 172.16.71.80 80 {
   delay_loop 2
   lb_algo rr
   lb_kind DR
   nat_mask 255.255.0.0
   protocol TCP

   sorry_server 127.0.0.1 80

   real_server 172.16.71.2 80 {
       weight 1
       HTTP_GET {
           url {
             path /
             status_code 200
               }
           connect_timeout 2
           nb_get_retry 3
           delay_before_retry 2
       }
   }

   real_server 172.16.71.3 80  {
       weight 1
       HTTP_GET {
           url {
             path /
             status_code 200
           }
           connect_timeout 2
           nb_get_retry 3
           delay_before_retry 2
       }
   }
}

單主模式不需要手動添加iptables。


原創文章,作者:wangshuai,如若轉載,請注明出處:http://www.www58058.com/68329

(0)
wangshuaiwangshuai
上一篇 2017-02-13 20:28
下一篇 2017-02-13 20:56

相關推薦

  • class15磁盤管理(二) 高級磁盤管理(一)

    掛載點和/etc/fstab 配置文件系統體系 被mount、fsck和其它程序使用 系統重啟時保留文件系統體系 可以在設備欄使用文件系統卷標 使用mount -a命令掛載  /etc/fstab 中的所有文件系統 文件掛載配置文件 /etc/fstab每行定義一個要掛載的文件系統;   &nbsp…

    Linux干貨 2016-09-05
  • 用戶和組管理

    Linux用戶和用戶組管理   Linux是個多用戶多任務的分時操作系統,所有要使用系統資源的用戶必須向系統管理員申請一個賬號,然后以這個身份進入系統。用戶登陸系統是也是一種驗證方式,系統通過用戶的UID(Username IDentification)這種機制來識別用戶的身份和權限。每個用戶賬號都是唯一的用戶名和用戶口令。用戶在登陸時鍵入正確的用…

    Linux干貨 2016-08-07
  • 淺談Linux終端類型

    Linux終端類型 作者:任飛鵬            日期:2016-10-13 終端是什么: 終端(Terminal)也稱終端設備,是計算機網絡中處于網絡最外圍的設備,主要用于用戶信息的輸入以及處理結果的輸出等。 早期計算機系統中,由于計算機主機…

    Linux干貨 2016-10-19
  • 馬哥教育網絡班20期+第二周課程練習

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。  答:文件管理類命令有: touch :創建一個新文件 示例:在/tmp/目錄下創建一個1.log文件 touch /tmp/1.log mv:移動文件  示例:將/etc/fstab文件移至/tmp/目錄中。  mv /etc/fstab /tmp/…

    Linux干貨 2016-06-23
  • 優質代碼的十誡

    1.- DRY: Don’t repeat yourself. DRY 是一個最簡單的法則,也是最容易被理解的。但它也可能是最難被應用的(因為要做到這樣,我們需要在泛型設計上做相當的努力,這并不是一件容易的事)。它意味著,當我們在兩個或多個地方的時候發現一些相似的代碼的時候,我們需要把他們的共性抽象出來形一個唯一的新方法,并且改變現有的地方的代碼讓…

    Linux干貨 2015-04-01
  • rpm與yum

    rpm包及yum 包查詢 rpm -q –query  搭配別的選項可用來包查詢 -a -f -p rpmfile:針對尚未安裝的程序包文件做查詢操作   -p 選項參數為文件名(一定要指定路徑) 例子: rpm -qpl /media/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm…

    Linux干貨 2016-08-24
欧美性久久久久