5-Keepalived_LVS-NAT

5.Keepalived+LVS-NAT

Keepalived高可用服务器

访问虚拟IP 192.168.4.80

配置环境

web1和web2 
安装http,写个测试页面
yum install -y keepalived

修改配置

修改web1服务器Keepalived配置文件

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                 // 指定初始主服务器
  interface eth0               // 定义网络接口
  virtual_router_id 50         // 分组,主备ID号需一致
  priority 100                 // 服务器优先级,优先级高优先获取VIP
  advert_int 1            // 比对优先级的间隔时间(秒)
  authentication {        // 密码,每隔一秒比对一次密码,再对优先级
    auth_type pass       // 不配密码的话,有攻击者配置一个优先级比你高的keepalived就可抢夺VIP
    auth_pass forlvs      // 主辅服务器密码必须一致
  }
  virtual_ipaddress { 192.168.4.80 }    // 谁是主服务器谁获得该VIP,可以有不止一个IP
}

修改web2服务器Keepalived配置文件

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                       
}
vrrp_instance VI_1 {
  state BACKUP                  
  interface eth0                    
  virtual_router_id 50             
  priority 50                       
  advert_int 1
  authentication {
     auth_type pass
     auth_pass forlvs  
  }
  virtual_ipaddress {  192.168.4.80  } 
}

启动服务(web1和web2)

systemctl start keepalived

启动keepalived会自动添加一个drop的防火墙规则,需要清空:
iptables -F
setenforce 0

测试

登录两台Web服务器查看VIP信息
ip addr show
ip addr show eth0
此时web2没有4.80这个IP,因为它的优先级低,此时只要将web1的keepalived的服务关闭,web2就可获得VIP

Keepalived+LVS-DR调度器的高可用

ad6ff3b5eb5bb8a8dde12c8d1775e983.png

配置web1和web2

配置 eth0
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
nmcli connection up eth0

配置 vip
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo{,:0}
vim ifcfg-lo:0

DEVICE=lo:0
NAME=lo:0
IPADDR=192.168.4.15
NETMASK=255.255.255.255   # 必须为32
NETWORK=192.168.4.15      # 网络地址
BROADCAST=192.168.4.15    # 广播地址
ONBOOT=yes

注意:这里因为web1也配置与调度器一样的VIP地址,默认肯定会出现地址冲突。

写入这四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应。

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

#当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应
#本机不要向外宣告自己的lo回环地址是192.168.4.15

yum -y install httpd
echo "192.168.4.100" > /var/www/html/index.html
systemctl start httpd ; systemctl enable httpd
systemctl restart network
ifconfig
systemctl stop firewalld
setenforce 0

配置proxy1和proxy2

配置如图的ip,不配置VIP,不配置ipvs的集群规则,都由keepalvied自动配置
yum install -y keepalived ipvsadm
systemctl enable keepalived
ipvsadm -C

改配置文件

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号xzs(实验需要修改)
}
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.4.15  }    # 配置VIP(实验需要修改)
}
virtual_server 192.168.4.15 80 {          # 设置ipvsadm的VIP规则(实验需要修改),与手打A的效果一样
  delay_loop 6
  lb_algo wrr                             # 设置LVS调度算法为WRR(加权轮询算法)
  lb_kind DR                              # 设置LVS的模式为DR
  #persistence_timeout 50                 # 客户端50秒之内只访问一台服务器
  protocol TCP
  real_server 192.168.4.100 80 {            # 设置后端web服务器真实IP(实验需要修改)
  weight 1                              # 上边为wrr才有用,设置权重为1
    TCP_CHECK {
      connect_timeout 3
      nb_get_retry 3
      delay_before_retry 3
    }
  }
  real_server 192.168.4.200 80 {            # 设置后端web服务器真实IP(实验需要修改)
  weight 2                              # 设置权重为2
    TCP_CHECK {                           
      connect_timeout 3                     # 每隔3秒做健康检查     
      nb_get_retry 3                        # 如果第一次连发现坏了,但是会试三次
      delay_before_retry 3                  # 一旦坏了,延迟3s再去连一次
    }
  }
}

systemctl start keepalived

查看

ipvsadm -Ln
ip a  s

HTTP_GET {

url {

path /testurl/test.jsp

digest 640205b7b0fc66c1ea91c463fac6334d     #检查页面内容有没有被人动,64-4d是md5码

}

url {

path /testurl2/test.jsp

digest 640205b7b0fc66c1ea91c463fac6334d

}

url {

path /testurl3/test.jsp

digest 640205b7b0fc66c1ea91c463fac6334d

}

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

测试

客户端使用curl命令反复连接http://192.168.4.15,查看访问的页面会轮询到不同的后端真实服务器。

systemctl stop keepalived.service   关闭一台调度器,另一台立刻抢过优先权继续工作


配置HAProxy负载平衡集群

client  eth0 192.168.4.10/24

proxy  eth0 192.168.4.5/24

eth1 192.168.2.5/24

web1   eth1 192.168.2.100/24

web2   eth1 192.168.2.200/24

注意事项:

删除所有设备的VIP,清空所有LVS设置,关闭keepalived

配置web1和web2

yum -y install httpd
systemctl start httpd
echo "192.168.2.100" > /var/www/html/index.html
posted @ 2024-05-11 15:39  立勋  阅读(2)  评论(0编辑  收藏  举报