1 环境配置

1.1服务器配置

准备5台虚拟机,作用如下表:

作用名称(虚拟机名称)IP作用描述
192.168.88.66虚拟IP,对外提供的ip,即通过192.168.88.66:端口的方式来访问
Keepalived1(server2)192.168.88.70lvs主机(master),将请求负载到nginx1或者nginx2
Keepalived2(server3)192.168.88.71lvs备机(backup),将请求负载到nginx1或者nginx2
nginx1(server4)192.168.88.80nginx1将请求负载到后端
nginx2(server5)192.168.88.81nginx2将请求负载到后端
testserver(server6)192.168.88.30测试机

1.2工具安装

在搭建进行配置的过程中可能会出现没有相关工具的提示,所以将所需工具在外网下载后,上传到内网安,如下图。
链接:工具包链接 提取码:6666

在这里插入图片描述
将工具包上传到需要进行配置的服务器(两台keepalived机器和两台nginx机器)

#进入工具包目录

cd /home/tools

#安装所有工具包

rpm -Uvh *.rpm --nodeps --force

2 Keepalived服务器配置

2.1配置Keepalived-master

设置DR模式的访问策略。设置客户端进入lvs调度器的入口地址,调度算法是轮询。192.168.88.66为虚拟IP(1.1服务器配置中的虚拟ip),81为其端口(自定义)

ipvsadm -A -t 192.168.88.66:81 -s rr

设置lvs的策略。入口的第一台后端服务器(server4)和第二台后端服务器(server5)的信息(192.168.88.66为虚拟IP,81为其端口,192.168.88.80、192.168.88.81对应server4和server5的ip)

ipvsadm -a -t 192.168.88.66:81 -r 192.168.88.80:81 -g
ipvsadm -a -t 192.168.88.66:81 -r 192.168.88.81:81 -g

开启组播和对应端口。所有Keepalived+lvs服务器都要开启组播,不然会发生脑裂状况

/sbin/iptables -I INPUT -i eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
/sbin/iptables -I OUTPUT -o eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT

开启端口,不然VIP的该端口无法正常访问,所有Keepalived服务器都需要开启,本例使用81端口

/sbin/iptables -I INPUT -p tcp --dport 81 -j ACCEPT

离线安装Keepalived
解压缩压缩包

tar -zxvf keepalived-2.2.4.tar.gz

解压成功会生成一个keepalived的目录
在这里插入图片描述
进入解压后的目录

cd keepalived-2.2.4

编译,–prefix用于指定安装目录,自定义

./configure --prefix=/usr/local/keepalived

安装

make && make install

编译完成后

ll /usr/local/keepalived/

出现以下结果则Keepalived安装成功
在这里插入图片描述
将Keepalived做成服务和并设置自启动
/usr/local/keepalived是keepalived的安装路径,与2.2中–prefix指定的对应
/home/keepalived-2.2.4是keepalived解压后的路径

mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /home/keepalived-2.2.4/keepalived/etc/init.d/keepalived /etc/init.d/

给Keepalived添加执行权限

chmod 755 /etc/init.d/keepalived
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

编写配置文件

vi /etc/keepalived/keepalived.conf

文件内容如下:

global_defs {
   router_id LVS_MASTER  #名称标记为master,名字随便取

3   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER #指定当前节点为master节点,只能有一个master,其余只能是backup
    interface ens33 #绑定此虚拟路由使用的网卡的名称,使用ifconfig或者ip addr查看
    virtual_router_id 51 #指定虚拟路由id,虚拟路由的唯一标识,范围是0-255,mater和backup节点需要指定一样的,相同id为一组
    priority 200 #指定当前结点的优先级,master节点要大于backup节点。
    advert_int 1 #指定发送VRRP通告的间隔,单位是秒
    authentication {
        auth_type PASS #鉴权认证,为pass或者ha
        auth_pass 123456 #鉴权访问密码,自己更改,pass密码最长为8位
    }
    virtual_ipaddress {
        192.168.88.66 #指定虚拟ip,自己定义的虚拟ip
    }
}

#lvs配置
virtual_server 192.168.88.66 81 { #设置LVS的VIP地址和端口
    delay_loop 6 #服务轮询(健康检查)的间隔,检查真实主机的间隔
    lb_algo rr #负载均衡策略,这里为rr
    lb_kind DR #调度器类型,这里选择为DR,DR模式要求负载均衡器必须与物理网卡在同一个网段
    #persistence_timeout 1 #是否启用持久连接,会话保持时长
    protocol TCP #健康检查协议,指定了访问后台真实主机的协议类型

#nginx1的配置
    real_server 192.168.88.80 81 { #nginx1的ip和端口
        weight 1 #指定当前主机的权重
        TCP_CHECK {
            connect_timeout 10 #指定了进行心跳检查的超时时间
            nb_get_retry 3 #指定心跳超时后的重复次数
            delay_before_retry 3 #指定在尝试之前延迟多长时间
        }
    }

#nginx2的配置
    real_server 192.168.88.81 81 { #nginx2的ip和端口
        weight 1 #指定当前主机的权重
        TCP_CHECK {
            connect_timeout 10 #指定了进行心跳检查的超时时间
            nb_get_retry 3 #指定心跳超时后的重复次数
            delay_before_retry 3 #指定在尝试之前延迟多长时间
        }
    }
}

注意事项:
virtual_router_id在一个集群中必须一样
state的MASTER和BUCKUP必须大写
priority:主备优先级,MASTER要比BACKUP大
authentication:主备之间的认证方式,一般使用pass即可,主备配置必须一致,否则无法通讯;密码不能大于8位
virtual_ipaddress允许配置多个

重启keepalived

systemctl restart keepalived

查看状态

systemctl status keepalived

keepalived启动成功
在这里插入图片描述

2.2配置Keepalived-backup

除了配置文件部分不一样,其他步骤与2.1配置Keepalived-master步骤一样。

编写配置文件

vi /etc/keepalived/keepalived.conf

文件内容如下:

global_defs {
   router_id LVS_BACKUP_1  #名称标记为backup,随便取名

3   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP #指定当前节点为backup节点,只能有一个master,其余只能是backup
    interface ens33 #绑定此虚拟路由使用的网卡的名称,使用ifconfig或者ip addr查看
    virtual_router_id 51 #指定虚拟路由id,虚拟路由的唯一标识,范围是0-255,mater和backup节点需要指定一样的,相同id为一组
    priority 199 #指定当前结点的优先级,master节点要大于backup节点
    advert_int 1 #指定发送VRRP通告的间隔,单位是秒
    authentication {
        auth_type PASS #鉴权认证,为pass或者ha
        auth_pass 123456 #鉴权访问密码,自己更改,pass密码最长为8位
    }
    virtual_ipaddress {
        192.168.88.60 #指定虚拟ip,自己定义的虚拟ip
    }
}

#设置lvs配置
virtual_server 192.168.88.60 81 { #设置LVS的VIP地址和端口
    delay_loop 6 #服务轮询(健康检查)的间隔,检查真实主机的间隔
    lb_algo rr #负载均衡策略,这里为rr
    lb_kind DR #调度器类型,这里选择为DR,DR模式要求负载均衡器必须与物理网卡在同一个网段
    #persistence_timeout 1 #是否启用持久连接,会话保持时长
    protocol TCP #健康检查协议,指定了访问后台真实主机的协议类型

#nginx1的配置
    real_server 192.168.88.80 81 { #nginx1的ip和端口
        weight 1 #指定当前主机的权重
        TCP_CHECK {
            connect_timeout 10 #指定了进行心跳检查的超时时间
            nb_get_retry 3 #指定心跳超时后的重复次数
            delay_before_retry 3 #指定在尝试之前延迟多长时间
        }
    }

#nginx2的配置
    real_server 192.168.88.81 81 { #nginx2的ip和端口
        weight 1 #指定当前主机的权重
        TCP_CHECK {
            connect_timeout 10 #指定了进行心跳检查的超时时间
            nb_get_retry 3 #指定心跳超时后的重复次数
            delay_before_retry 3 #指定在尝试之前延迟多长时间
        }
    }
}

2.3验证master、backup服务器是否配置成功

验证方法:master和backup同时运行Keepalived时,虚拟ip漂移到master,直到master停止Keepalived,虚拟ip漂移到优先级更高的backup。若两台backup优先级相同,虚拟ip随机漂移到其中一台backup。
server2、server3同时开启Keepalived

systemctl restart keepalived

查看server2(master)的网卡

ip a

在这里插入图片描述
查看server3(backup)的网卡

ip a

在这里插入图片描述
由server2和server3的网卡信息可知,虚拟IP(192.168.88.60)漂移到了server2(master)。

停止server2(master)的Keepalived

systemctl stop keepalived

查看server2(master)的网卡

ip a

在这里插入图片描述
查看server3(backup)的网卡

ip a

在这里插入图片描述
由于server2(master),停止了Keepalived,所以虚拟IP(192.168.88.60)漂移到了server3(backup)。
以上为验证成功。

若虚拟IP漂移到了两台或多台启动Keepalived服务的机器,说明发生了脑裂,需要开启组播,即2.1中

/sbin/iptables -I INPUT -i eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
/sbin/iptables -I OUTPUT -o eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT

3 nginx服务器配置

3.1 nginx1(server4)服务器配置

开启端口,不然无法正常访问对应服务器的nginx

/sbin/iptables -I INPUT -p tcp --dport 81 -j ACCEPT

安装pcre,把pcre-8.43.tar.gz上传到 /home/目录下,进入并解压

cd /home/
tar -zxvf pcre-8.43.tar.gz

进入解压后的目录编译安装

cd /home/pcre-8.43
./configure --prefix=/etc/pcre
make && make install

安装libtool,把libtool-2.4.2.tar.gz上传到 /home/目录下,进入并解压

cd /home/
tar -zxvf  libtool-2.4.2.tar.gz

进入解压后的目录编译安装

cd libtool-2.4.2
./configure --prefix=/etc/libtool
make && make install

安装nginx

cd /home/
tar  -zxvf  nginx-1.14.2.tar.gz

进入解压后的目录编译安装

 cd /home/nginx-1.14.2
./configure --prefix=/etc/nginx  

./configure --prefix=/etc/nginx在编译时可能会报缺少pcre的错误,用下面这条命令替代即可

./configure --prefix=/etc/nginx --with-pcre=/home/pcre-8.43

编译完成再进行安装即可

make && make install

配置nginx启动服务

vi /usr/lib/systemd/system/nginx.service

文件内容如下:
// 以下配置成功的前提是nginx的安装路径为/etc/nginx/

[Unit]
Description=The Nginx HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/etc/nginx/sbin/nginx   
ExecReload=/etc/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT ${MAINPID}

[Install]
WantedBy=multi-user.target

赋予执行权限

chmod +x /usr/lib/systemd/system/nginx.service

重载systemctl命令

systemctl daemon-reload

修改nginx配置文件

vi /etc/nginx/conf/nginx.conf

文件内容如下:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       81;
        #listen       1:8080;
        server_name  somename  alias  another.alias;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}

编辑nginx的默认页面(主要用于测试nginx的访问情况)

 vi /etc/nginx/html/index.html
<html>
<body>
<h1>Welcome to nginx!</h1>
<h1>this ip is nginx1: 192.168.88.80:81</h1>
</body>
</html>

编写脚本,把虚拟ip绑定在nginx服务器的回环接口上,并且停掉ngixn服务器的包转发和arp响应

vi /etc/init.d/lvsrs

脚本内容如下:

SNS_VIP=192.168.88.66 #虚拟ip 
/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

保存并设置脚本的执行权限

chmod 755 /etc/init.d/lvsrs
chmod 755 /etc/rc.d/init.d/functions

执行脚本

sh /etc/init.d/lvsrs start

重启nginx

 systemctl restart nginx

3.2 nginx2(server5)服务器配置

与3.1步骤一致

3.3 测试nginx配置是否成功

#登入测试机器(server6),访问nginx1(server4)

 curl 192.168.88.80:81

出现下面内容说明访问成功
在这里插入图片描述
访问nginx2(server5)

curl 192.168.88.81:81

出现下面内容说明访问成功
在这里插入图片描述

4 测试高可用

测试通过虚拟ip访问nginx的服务
登入测试机器(server6),多次访问虚拟IP:端口

curl 192.168.88.66:81

在这里插入图片描述
由上图可见每次通过相应的端口访问虚拟ip都会随机负载到nginx的服务器上。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐