基于LVS实现高可用

简介

示意图

基于LVS实现高可用

lvs承受的压力大,但是lvs如果宕机,内网有再多的服务器都无法与外网进行连接,这就需要使用高可用

服务类型
有状态服务MYSQL,数据在发生动态变化
无状态服务APACHE LVS,更适合使用高可用

Keepalived

基于LVS实现高可用
基于LVS实现高可用

keepalived+LVS-DR模式

实验环境

实验目标keepalived+httpd+lvs轮询+一台nfs
lvs和内网web服务器在同一网段内一定要设置一种类型的网卡要vmnet8就全部都vmnet8,网卡设定仅主机模式或者net模式(生产环境一般为主机模式),ip设置的网段跟自己的网卡类型对应上就行
主负载均衡lvs:192.168.1.10
从负载均衡lvs:192.168.1.11
web1:192.168.1.12
web2:192.168.1.13
nfs服务器:192.168.1.14

修改主机名

基于LVS实现高可用

修改后:主lvs:master 从lvs:slave web1 web2 和 nfs

web1配置

下载httpd
yum -y install httpd
优化配置文件
sed -i '/#S/ s/#//' /etc/httpd/conf/httpd.conf
开启httpd,设置开机自启动
systemctl start httpd.service && systemctl enable httpd
输入网页信息
echo "1111" >/var/www/html/index.html
页面检测
curl localhost

基于LVS实现高可用

编写脚本,执行脚本

vim /opt/lvs-dr

#!/bin/bash
# lvs-dr 
VIP="192.168.1.20"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255
/sbin/route add -host $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

这个脚本大致意思是

VIP="192.168.1.20"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255
为网卡配置一个子接口lo:0,并设置IP(及VIP)为192.168.1.20,并设置子网掩码为四个255(为了安全,优化方案之一)

/sbin/route add -host $VIP dev lo:0
当有人访问VIP时,交给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
修改arp相应级别和通告行为,将响应级别调至最低(这样才会防止IP冲突造成混乱)

增加执行权限并执行脚本
chmod +x /opt/lvs-dr
/opt/lvs-dr

查看网卡配置
ip a
当子接口lo:0出现VIP即可

基于LVS实现高可用

将脚本执行写入到开机自启中
echo "/opt/lvs-dr" >>/etc/rc.local

web2配置

下载包
yum -y install httpd

优化配置文件,开启httpd并配置页面
sed -i '/#S/ s/#//' /etc/httpd/conf/httpd.conf
这句话的意思是匹配到所有#S开头的行,并将注释替换成空
systemctl start httpd.service && systemctl enable httpd
echo "2222" > /var/www/html/index.html

检测页面
curl localhost

基于LVS实现高可用

将web1服务器的脚本拉入到web2服务器中,并执行脚本,设置开机自动执行脚本
scp -p 192.168.1.12:/opt/lvs-dr /opt/
输入yes和密码
/opt/lvs-dr
echo "/opt/lvs-dr" >>/etc/rc.local

主负载均衡器配置

增加模块ip_vs
modprobe ip_vs
查看模块是否加载
lsmod | grep ip_vs
(或者使用cat /proc/net/ip_vs)
下载keepalived和ipvsadm
yum -y install ipvsadm keepalived

备份并修改keepalived配置文件
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.origin
vim keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id LVS1
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100 
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.20 
    }
}

virtual_server 192.168.1.20 80 {
    delay_loop 2
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.1.12 80 {
        weight 1
	TCP_CHECK {
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 3
	    connect_port 80
        }
    }
    real_server 192.168.1.13 80 {
        weight 1
	TCP_CHECK {
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 3
	    connect_port 80
        }
    }
}

配置详解
global_defs 全局配置
router_id 运行Keepalived服务器标识
notification_email_from 设置邮件的发送地址
state MASTER 指定Keepalived的角色,MASTER表示主服务器,BACKUP或SLAVE表示备用服务器。
interface ens33 指定HA检测网络的接口
virtual_router_id 51 虚拟路由标识,这个标识是一个数字,并且同一个vrrp实例使用唯一的标识,即同一个vrrp_instance下,MASTER和BACKUP必须是一致的
priority 100 优先级1- 254,数字越大优先级越高,主服务器一定要高过备份服务器,且两者之间的数值差越小越好。如此MASTER优先级为100,BACKUP可设为99
advert_int 2 设定MASTER与BACKUP负载均衡器之间同步检查的间隔时间2秒

authentication {   //设定验证类型和密码
        auth_type PASS  //设置验证类型,主要有PASS和AH两种
        auth_pass 1111   //设置验证密码,在一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
    }

virtual_ipaddress{}
设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
virtual_server 192.168.1.20 设置虚拟服务器,需要指定虚拟ip地址和服务端口,ip与端口之间用空格隔开
delay_loop 2 设置健康检查时间,2秒(秀恩爱频率)
lb_algo rr 设置负载调度算法,这里设置为rr,即轮询算法
lb_kind DR 设置LV S实现负载均衡的机制,可以有NAT、TUN和DR三个模式
protocol TCP 指定转发协议,TCP或UDP
real_server 192.168.1.20 80{}
设置虚拟服务器
weight 1 配置服务节点的权值,数字越大,权值越高

real_server 192.168.1.13 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3 //3秒无响应超时
            nb_get_retry 3  重试次数3次(由于网络波动可能会造成心跳检测未检测到,但不一定主服务器就宕机了,所以需要多检测几次)
            delay_before_retry 3  两次重试的间隔为3秒
            connect_port 80   测试连接的端口
        }
    }

设置连接规则
ipvsadm --set 1 2 1

开启keepalived
systemctl start keepalived.service

查看ipvsadm规则
ipvsadm -ln

基于LVS实现高可用

查看网卡信息
ip a

基于LVS实现高可用

从负载均衡服务器配置

加载模块
modprobe ip_vs
cat /proc/net/ip_vs

下载ipvsadm命令工具
yum -y install ipvsadm keepalived

备份配置文件
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.origin

从主lvs服务器配置文件中获取主配置文件并修改

scp 192.168.1.10:/etc/keepalived/keepalived.conf /etc/keepalived/

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
    router_id LVS2
}

vrrp_instance VI_1 {
    state SLAVE
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {   
        auth_type PASS  
        auth_pass 1111   
    }
    virtual_ipaddress {
        192.168.1.20 80
    }
}

virtual_server 192.168.1.20 80 {
    delay_loop 2
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.1.12 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 192.168.1.13 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3 
            nb_get_retry 3  
            delay_before_retry 3
            connect_port 80  
        }
    }
}

修改配置文件测试时要用systemctl stop keepalived,和使用systemctl start keepalived才能使配置文件生效,切记不要用restart

修改的内容:
MASTER修改成SLAVE或BACKUP
虚拟服务器优先级修改为99
router_id 修改为LVS2

开启keepalived服务

开启服务
systemctl start keepalived.service
设置TCP连接断开时间为1秒
ipvsadm --set 1 2 1

ip a
不可以出现VIP就对了

基于LVS实现高可用

查看规则
ipvsadm -ln

基于LVS实现高可用

测试

测试轮询(用lvs从服务器或者nfs服务器,内网随便一个服务器测试)

基于LVS实现高可用

测试自动剔除和增加web服务器
关闭并重新开启web1

基于LVS实现高可用
基于LVS实现高可用
基于LVS实现高可用
基于LVS实现高可用

测试心跳检测

关闭主lvs的keepalived服务

基于LVS实现高可用

VIP飘到了从服务器的ens33网卡上

基于LVS实现高可用

再次开启lvs主服务器的keepalived,VIP再次飘回来

基于LVS实现高可用

搭建nfs服务器

nfs服务器配置

下载包
yum -y install nfs-utils rpcbind

设定/opt/www目录为挂载目录
mkdir /opt/www

创建配置
vim /etc/exports

设定共享192.168.1.0全网段IP,以只读方式挂载并且不进行root权限压缩
/opt/www 192.168.1.0/24(ro,sync,no_root_squash)

/opt/www 192.168.1.0/24(ro,sync,no_root_squash)

开启rpcbind和nfs服务并设置开机自启动
systemctl start rpcbind nfs
systemctl enable rpcbind nfs

查看共享信息
exportfs(或者show -e 192.168.1.14)

基于LVS实现高可用

写一个测试文件

echo "<h1>it works</h1>" >/opt/www/index.html

web1服务器配置

下载包
yum -y install nfs-utils

将nfs服务器目录挂载到网站根目录下
mount 192.168.1.14:/opt/www/ /var/www/html/

查看挂载
df -hT

基于LVS实现高可用

开机自动挂载
cp -p /etc/fstab /etc/fstab.bak
vim /etc/fstab
192.168.1.14:/opt/www/ /var/www/html/ nfs defaults,_netdev 1 2

基于LVS实现高可用

使开机自动挂载立即生效
umount /var/www/html/
mount -a
查看挂载
df -hT

web2配置(仿照web1)
yum -y install nfs-utils
cp -p /etc/fstab /etc/fstab.bak
echo "192.168.1.14:/opt/www/ /var/www/html/ nfs defaults,_netdev 1 2" >>/etc/fstab
mount -a
df -hT

基于LVS实现高可用

测试

使用内网除了主lvs和web1,web2其他服务器测试,多刷几次(我使用nfs测试)

基于LVS实现高可用

使用主lvs服务器查看连接状态

基于LVS实现高可用

使用tcpdump工具
tcpdump -i ens33 -nn host 192.168.1.10

基于LVS实现高可用

主lvs一直广播在声明自己的优先级为100

发布者:LJH,转发请注明出处:https://www.ljh.cool/6056.html

(1)
上一篇 2022年8月31日 下午8:14
下一篇 2022年9月1日 下午1:55

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注