简介
示意图
lvs承受的压力大,但是lvs如果宕机,内网有再多的服务器都无法与外网进行连接,这就需要使用高可用
服务类型
有状态服务MYSQL,数据在发生动态变化
无状态服务APACHE LVS,更适合使用高可用
Keepalived
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: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
编写脚本,执行脚本
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即可
将脚本执行写入到开机自启中
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
将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
查看网卡信息
ip a
从负载均衡服务器配置
加载模块
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就对了
查看规则
ipvsadm -ln
测试
测试轮询(用lvs从服务器或者nfs服务器,内网随便一个服务器测试)
测试自动剔除和增加web服务器
关闭并重新开启web1
测试心跳检测
关闭主lvs的keepalived服务
VIP飘到了从服务器的ens33网卡上
再次开启lvs主服务器的keepalived,VIP再次飘回来
搭建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)
写一个测试文件
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
开机自动挂载
cp -p /etc/fstab /etc/fstab.bak
vim /etc/fstab
192.168.1.14:/opt/www/ /var/www/html/ nfs defaults,_netdev 1 2
使开机自动挂载立即生效
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和web1,web2其他服务器测试,多刷几次(我使用nfs测试)
使用主lvs服务器查看连接状态
使用tcpdump工具
tcpdump -i ens33 -nn host 192.168.1.10
主lvs一直广播在声明自己的优先级为100
发布者:LJH,转发请注明出处:https://www.ljh.cool/6056.html