实验环境:

操作系统linux7

所需软件:ipvsadm,keepalived,httpd,bind,bind-ustil,curl,route

实验要求:代理服务器安装ipvsadm和keepalivd实现负载均衡和冗余备份(防止代理服务器崩溃而导致服务的中断keepalived根据优先级重新选举谁的优先级高选谁),后端服务器部署apache实施管理。

代理服务器给后端服务器做代理服务并进行负载均衡,客户机只能访问的是代理服务器IP,但真正是通过代理服务器访问后端的服务器。因而在代理服务器配置DNS域名解析服务使用户可以通过域名访问服务。

通过lvs和keepalived实现高可用和灾备(HA/DR)

IP规划: 客户机CIP  192.168.10.1

  代理服务器DIP  192.168.11.11      

代理服务器VIP  192.168.10.11

  后端服务器RIP  192.168.11.12~14      (后端服务器和代理服务器DIP必须在同一网段)

实验原理图

高可用性负载均衡集群网站搭建_第1张图片

实验架构图

 

高可用性负载均衡集群网站搭建_第2张图片

 

实验部署

先配置后端服务器Real server

给每台后台服务器配置apache(如果服务器过多可能要用到ansible)

yum install -y httpd curl      

systemctl restart httpd       启动apache服务

echo  www.zo12.com > /var/www/html/index.html       配置主页信息(其他后端服务器可改为 [email protected]等)

curl 127.0.0.1       内测

yum install -y net-tools

route -n                        查看路由表信息

route del default gw 192.168.11.2    临时关闭默认网关

route add default gw 192.168.11.11  设置临时默认网关

vim /etc/sysconfig/network-scripts/ifcfg-ens33 永久修改网关

GATEWAY=192.168.11.11      (设置为代理服务器IP)

代理服务器配置

给代理服务器加一块虚拟网卡并配置ip

设置中添加一块nat 模式的网卡

ip a  

cd /etc/systemctl/network-scripts

cp -av ifcfg-ens33  ifcfg-ens37

vim ifcfg-内容如下(红字为要修改的内容)
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
DEVICE=ens37 网卡设备名称
ONBOOT=yes
IPADDR=192.168.10.11
PREFIX=24
GATEWAY=192.168.10.2
DNS1=114.114.114.114
DNS2=8.8.8.8

 

安装lvs

yum install -y ipvsadm

systemctl restart ipvsadm

 

route -n                        查看路由表信息

route del default gw 192.168.11.2    临时关闭默认网关

route del default gw 192.168.10.2

配置LVS负载均衡集群服务列表

ipvsadm -h

ipvsadm  -Ln

ipvsadm  -C 清空ipvs集群配置信息

ipvsadm  -A -t 192.168.10.11:80 -s  rr

ipvsadm  -a -t 192.168.10.11:80 -r 192.168.11.12:80 -m

ipvsadm  -a -t 192.168.10.11:80 -r 192.168.11.13:80 -m

ipvsadm  -Ln

ipvsadm  -Ln --stats

watch -n.5 ipvsadm  -Lnc

watch -n.5 ipvsadm  -Ln --rate

查看并临时开启路由转发功能

cat  /proc/sys/net/ipv4/ip_forward

echo 1 > /proc/sys/net/ipv4/ip_forward

[root@localhost ~]#  vim   lo.sh   脚本内容如下

#!/bin/bash

ifconfig lo:1 192.168.11.100  netmask 255.255.255.255

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

ip   a

运行脚本(在192.168.11.12上做如下操作):
chmod -v +x lo.sh
. lo.sh
scp lo.sh [email protected]:/root/    将脚本上传到192.168.11.13的root目录中
ssh [email protected] '. /root/lo.sh' 远程给192.168.11.13运行lo.sh脚本

 

运行脚本(在192.168.11.12上做如下操作):

chmod  -v  +x  lo.sh

.   lo.sh

scp   lo.sh   [email protected]:/root/

ssh   [email protected]  '.   /root/lo.sh'     远程给192.168.11.13运行lo.sh脚本

给代理服务器配置keepalived

yum install -y keepaived

ipvsadm  -C 清除之前的ipvs配置(并在keepalived配置中重新配置) 其实之前的ipvs配置只是练练手感/呲牙/呲牙/呲牙

vim /ect/keepalived/keepalived.conf   进入keepalived配置文件进行配置

 

 ! Configuration File for keepalived

    global_defs {              全局定义,说明:在实验测试环境中,以下内容可以随便写,但是master和backup的router_id必须相同                    

           notification_email {      设置通知邮箱

                      root@localhost     管理员的邮箱地址                

                  }

           notification_email_from  keepalived@localhost      通知邮件的发件人邮箱

           smtp_server 127.0.0.1                  邮箱服务器IP地址

           smtp_connect_timeout   30            邮件服务器连接超时时间为30秒

           router_id  dr1         路由器ID名称,同一个keepalived高可用集群中master和backup的ID名称必须相同

           }

      

    vrrp_instance VI_1 {                     vrrp虚拟路由冗余协议的实例设置       ,实例名称为VI_1

           state MASTER             //状态,主为MASTER,备为BACKUP状态             

           interface  eth0                            //心跳检测网卡接口,要根据实际情况写网卡接口名,用ip  a查网卡接口名

           virtual_router_id 51              //master主和backup备两边必须一样,此处是集群的群号

           priority 100                          //优先级,MASTER的值必须高于BACKUP的值,类似于现实生活中的竞选的票数

           advert_int  1                                //检查间隔,单位秒。vrrp的组播地址是224.0.0.18

           authentication {         身份认证配置

                  auth_type PASS      //认证类型为密码方式,主备要一致

                  auth_pass 1111      //认证密码为1111,主备要一致

                  }

           virtual_ipaddress {

                  192.168.10.100                        //VIP,可多个IP,每行一个IP地址

                  }

           }

      

    virtual_server 192.168.11.100 80 {                 //LVS 配置

           delay_loop 3                                        //服务论询的时间间隔 

           lb_algo rr                                                                      //LVS 调度算法

           lb_kind DR                                                                      // LVS 集群模式

           protocol TCP                                                

           real_server 192.168.11.13 80 {          //RS的IP及端口号

                  weight 1

                  TCP_CHECK {                                     //RS健康检查

                         connect_timeout 3

                         }

                  }

           real_server 192.168.11.14 80 {

                  weight 1

                  TCP_CHECK {

                         connect_timeout 3

                         }

                  }

    }

 

# cd   /etc/keepalived

# scp keepalived.conf 192.168.11.12:/etc/keepalived/     将配置文件发送给node12的主机

拷贝后,修改配置文件

       state BACKUP

       priority 90

      

      

两个Director上启动服务:

# systemctl    restart    keepalived       重启keepalived服务

 

curl 192.168.11.100  如出现如下内容则再执行一遍lo.sh脚本      

高可用性负载均衡集群网站搭建_第3张图片

高可用性负载均衡集群网站搭建_第4张图片

给代理服务器配置DNS

yum install -y bind bind-ustil

systemctl restart named

systemctl enable named

 

cp -v  /etc/named.conf{,.bak}

cp  -v   /etc/named.rfc1912.zones{,.bak}

sed  -i  's/127.0.0.1/any/'   /etc/named.conf

sed  -i  's/localhost/any/'   /etc/named.conf

systemctl   reload   named

echo  '

zone  "zo.com"  IN {

    type  master;

    file  "zo.com.zone";

    allow-update  { none; };

    allow-transfer  { none; };

};   ' >> /etc/named.rfc1912.zones

named-checkconf

 

cd  /var/named

cp  -av  named.localhost   zo.com.zone

echo  '$TTL 1D

@       IN SOA  dns1.zo.com.    1223915635.qq.com. (

                                        0       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

            NS      dns1.zo.com.

            A       192.168.10.11

            AAAA    ::1      

dns1      A       192.168.10.11

www      A       192.168.11.100

ftp      A      192.168.11.13

mail       A       192.168.11.14       

web     CNAME   www.zo.com.

 

'  >  zo.com.zone

named-checkzone   dns1.zo.com  /var/named/zo.com.zone

systemctl   reload   named

nslookup   www.zo.com   127.0.0.1

nslookup   web.zo.com   127.0.0.1

systemctl reload named

在客户机上做测试

nslookup   www.zo.com  192.168.11.11

将客户机的C:\Windows\System32\drivers\etc\hosts文件末尾添加域名解析

高可用性负载均衡集群网站搭建_第5张图片

最后测试结果如下:

高可用性负载均衡集群网站搭建_第6张图片

高可用性负载均衡集群网站搭建_第7张图片

因为做了负载均衡为测试实验效果给不同的后端服务器创建了不同的主页所以可能是node14.com也可能是node13.com 如果将多个物理服务器(可以是wed服务器,文件服务器,邮件服务器,数据库服务器,FTP服务器等)虚拟成一台虚拟服务器则可以实现同时访问一个虚拟服务器的信息,同时也只需配置一台虚拟服务器就可以完成。

高可用性负载均衡集群网站搭建_第8张图片