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.178linux.com/68329

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

相关推荐

  • linux文件系统

    linux的文件系统:             根文件系统为rootfs(root file system)           &nbsp…

    Linux干货 2015-12-19
  • 网络班23期学习宣言

    马哥Linux运维学院 学习宣言 亲爱的小伙伴:        欢迎大家报名马哥Linux运维网络学习班,跟随马哥学习Linux技术,成就Linux大牛之梦。在这里,我们不仅可以学习到最优秀的技术课程,还可以跟着追梦的小伙伴们一起学习、一起进步。 为了督促大家一直积极认真努力的学习,请各位同学在评论区写出你的学习宣言。…

    2016-09-05
  • 以洪荒之力打开linux德·摩根定律

    德·摩根定律让学习liunx的小伙伴绕得头疼,现在我就用洪荒之力为大家理顺一下这个定律。 由图片可以看出, A=4+3 B=3+2 非A=2+1 非B=4+1 A且B就是代表既是A又是B的地方,A和B都有色块3,所以色块3代表了A且B 同时,我们再看A=4+3 ,B=3+2,我们可以推断出,且运算的结果就是两个算数式中重复的数字。 A且B=3 A或B就是代表…

    Linux干货 2016-08-15
  • 计算机基础知识及基本命令(20170214)

    计算机基础知识 操作系统相关 linux分区介绍 安装linux linux基本命令    一、计算机基础知识       计算机(computer):计算机(Computer):俗称电脑,是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动、高速地处理,然后把处理结果输出的现代化智能电子设备 …

    Linux干货 2017-02-14
  • 用户和组

    一、概述   Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。   用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。 &nbsp…

    Linux干货 2016-10-22
  • grep命令系列:grep中的正则表达式

     grep :是一款文本过滤工具 。其作用:根据用户指定的“模式”对目标文本进行逐个的匹配检查。  正则表达式 REGEXP:有一类特殊字符及文本字符所编写的模式,其中有些字符不表示字面的意义,而表示控制或通配的功能。    正则表达式分为两种:         基本正则表达式:…

    Linux干货 2017-04-10