项目一


文章目录

目录

项目一

文章目录

前言

一、项目概述

二、项目目的 

三、操作步骤

1.环境准备

2.创建虚拟机

3.配置网络及修改虚拟机名称

4.配置LVS_keepalived1、LVS_keepalived2

五.配置Nginx1、Nginx2


六.配置Web1、Web2


七.启动LVS_keepalived1和LVS_keepalived2

八.反向配置Nginx1、Nginx1


九.进行验证

总结



前言

个人制作完成 有什么问题大家可以留言

这是在VMware中linux centos7版本中完成 


提示:以下是本篇文章正文内容,下面案例可供参考

一、项目概述

        使用两台LVS服务器进行负载均衡和故障转移,一台作为Master服务器,另一台作为Backup服务器,两者在负载均衡的配置上是完全一样的,使用Keepalived对两台LVS服务器的状态进行检测,如果在某个时刻,LVS的Master服务器由于故障宕机,Keepalived就会检测到该故障,并且进行故障下线,然后将Backup机器上线提供服务,从而实现故障转移的功能;配置两台Nginx服务器作为反向代理,通过Nginx的反向代理功能把用户的访问请求发送到后端的Web应用服务器上。在正常情况下,客户端通过虚拟IP访问Web应用的时候,LVS会将该请求转发到Master服务器上,然后Master服务器根据配置的负载均衡策略选择后端的Nginx反向代理,再由Nginx的反向代理将请求发送到后台的Web应用服务器上进行处理。

二、项目目的 

通过部署Keepalived +LVS+Nginx负载均衡实验掌握负载均衡的作用以及应用场景,熟悉如何搭建和部署企业级的高可用Web应用。

CentOS7部署企业级Web应用,网络拓扑结构如图:

容器功能测试用例 容灾测试用例_nginx

三、操作步骤

1.环境准备

项目最少需要六台虚拟主机,配置如下表:

容器功能测试用例 容灾测试用例_容器功能测试用例_02

2.创建虚拟机

创建六台虚拟机,名字分别为LVS_keepalived1;LVS_keepalived2;Nginx1;Nginx2;Web1;Web2

3.配置网络及修改虚拟机名称

启动六台虚拟机

在LVS_keepalived1中输入:

cd /etc/sysconfig/network-scripts/
ls
vi ifcfg-ens32 #每个人的不一样,输入ls查看到的第一个就行
#在vi中输入如下内容;推荐直接使用xshell等工具直接复制粘贴
DEVICE=ens32
IPADDR=192.168.XX.100
NETMASK=255.255.255.0
GATEWAY=192.168.XX.2
DNS1=114.114.114.114
BROADCAST=127.255.255.255
ONBOOT=yes
BOOTPROTO=static

容器功能测试用例 容灾测试用例_nginx_03

这里最重要的就是IPADDR;192.168.xxx.100    xxx为自己的地址

ifdown ifcfg-ens32
ifup ifcfg-ens32

容器功能测试用例 容灾测试用例_java_04

修改主机名:

hostnamectl set-hostname XXX(主机名)

hostnamectl set-hostname LVS_keepalived1

关闭防火墙:非常重要 后面如果发现错误,首先查看防火墙是否关闭

systemctl stop firewalld

这里当下次重启时,名字就会改变

!!!将其它的5台虚拟机重复上述操作,注意修改ip地址以及hostname为环境准备中的名称和ip地址

4.配置LVS_keepalived1、LVS_keepalived2

在LVS_keepalived1、LVS_keepalived2中执行如下代码

yum -y install ipvsadm keepalived  #下载keepalived
ipvsadm     
lsmod | grep ip_vs

容器功能测试用例 容灾测试用例_java_05

在LVS_keepalived1中配置keepalived.conf 文件     注意修改其中的ip地址

vi /etc/keepalived/keepalived.conf
#在vi中写入如下内容,其他内容全部删除
! Configuration File for keepalived
global_defs {
 
   lvs_id director1 #指定lvs的id
}
vrrp_instance LVS {
    state MASTER #指定当前节点为master节点
    interface ens32 #这里是网卡的名称,通过ifconfig或者ip addr可以查看
    virtual_router_id 51 #两个节点要一样
    priority 151 #数值越大优先级越高,master节点要高于backup节点
    advert_int 1     # 指定发送VRRP通告的间隔,单位是秒
    authentication {
        auth_type PASS # 鉴权,默认通过
        auth_pass 123456    # 鉴权访问密码
    }
    virtual_ipaddress {
        192.168.XXX.200   #指定了虚拟ip
    }
}

virtual_server 192.168.XXX.200 80 {
    delay_loop 1    # 健康检查的时间间隔
    lb_algo rr    # 负载均衡策略,这里是轮询
    lb_kind DR    # 调度器类型,这里是DR
    persistence_time 1    # 指定了持续将请求打到同一台真实主机的时间长度
    protocol TCP    # 指定了访问后台真实主机的协议类型
real_server 192.168.XXX.110 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10  # 指定了进行心跳检查的超时时间
            nb_get_retry 3
            delay_before_retry 3   # 指定了在尝试之前延迟多长时间
        }
    }
    real_server 192.168.XXX.111 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

在LVS_keepalived2中配置keepalived.conf 文件

注意:在lvskeepalived2也就是backup 机器上面配置keepalived只和master 有以下三处不同

  • lvs_id director1 改成 lvs_id director2
  • state MASTER 改成 state BACKUP
  • priority 151 改成 priority 101

五.配置Nginx1、Nginx2

在虚拟机Nginx1、Nginx2中输入如下命令:

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

yum install nginx
systemctl start nginx
systemctl stop firewalld

六.配置Web1、Web2

在Web1下输入如下命令

yum -y install httpd

cd /var/www/html
echo "web1" > index.html
systemctl restart httpd

容器功能测试用例 容灾测试用例_java_06

在Web2下输入如下命令

yum -y install httpd
cd /var/www/html
echo "web2" > index.html
systemctl restart httpd

七.启动LVS_keepalived1和LVS_keepalived2

在lvskeepalived1 和 lvskeepalived2 服务器上启动keepalived.

systemctl start keepalived
systemctl enable keepalived

验证:

ip a | grep -i ens33  #可有看到VIP的地址
ipvsadm -Ln

八.反向配置Nginx1、Nginx1

在Nginx1、Nginx2中输入如下内容

yum -y install net-tools
cd /etc/init.d/
vi sh
 #sh中内容为
#!/bin/bash
SNS_VIP=192.168.163.100
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

/sbin/route add -host $SNS_VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)

ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
systemctl restart nginx
systemctl status nginx.service
chmod 755 sh
./sh start

九.进行验证

1、打开电脑浏览器,分别输入Web1Web2Nginx1Nginx2的IP地址,查看是否能够访问。

2、打开LVS_keepalived1、LVS_keepalived2

  1. 输入systemctl restart keepalived
  2. 输入systemctl stop firewalld

3、打开浏览器访问虚拟IP地址(192.168.xxx.200),查看是否与Nginx1和Nginx2访问页面一致.

容器功能测试用例 容灾测试用例_nginx_07


总结

项目的难点包括:

①在LVS的DR模式中对ARP协议的理解;

②在Nginx中设置禁止ARP回应和直接把回应返回给客户端;

③VIP地址与Nginx中的lo地址进行绑定并添加到路由表中。