LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
本次搭建的服务器为虚拟机CentOS7.6系统,均有外网环境,故安装软件比较方便,如果内网环境可能需要自行制作yum源,这里不做展示
从架构可以看出来,从用户的角度来说,会直接访问10.13.109.17,也就是说不管系统如何设计要保证此ip的可用性,从设计的角度考虑:用户访问10.13.109.17,这是一个虚拟iP,用户不关心内部如何协调
我们使用10.13.109.15作为主机 Master机器,然后使用keepalived 技术配置 HA(high avilable)配置高可用行,也就是说如果 分发的机器Master宕机了,keepalived会自动转到10.13.109.16 backup机器,
这就是HA配置,保证master即使宕机了,也不影响转发;master机器负责把用户的请求转发到 真实的机器, web1和web2,他们会按照一定的轮训机制,访问,如果web1宕机,master会自动转发到web2;
我们在两台负载均衡的机器上面,配置keepalived保证分发机器的高可用行HA;
1、确定服务器时间一致
date
2、关闭防火墙和selinux
systemctl stop firewalld && systemctl disable firewalld && setenforce 0 && sed -i s#SELINUX=enforcing#SELINUX=disable#g /etc/selinux/config
3、更改四台主机名
vi /etc/hostname
4、更改hosts文件
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.13.109.15 LVS-master
10.13.109.16 LVS-backup
10.13.109.18 PACS-web1
10.13.109.19 PACS-web2
yum install -y nginx
如果yum安装nginx时报错:No package nginx available. Error: Nothing to do,是因为本地yum源中没有我们想要的nginx,那么我们就需要下载新的CentOS-Base.repo,如果正常安装,请跳过
解决步骤:
1、备份原来的CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/
####centos 6版本
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
####centos 7版本
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
####centos 8版本
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
3、运行 yum makecache
yum makecache
作用:就是把服务器的包信息下载到本地电脑缓存起来,makecache建立一个缓存,以后用install时就在缓存中搜索,提高了速度
4、安装epel源
yum -y install epel-release
5、安装NGINX服务
yum -y install nginx
启动nginx,加入开机自启动
systemctl start nginx.service
systemctl enable nginx.service
备份原有默认页面
mv /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.bak
登录主机web1,修改默认页面
vi /usr/share/nginx/html/index.html
清空内容,新增完整内容如下:
This is PACS-web1 10.13.109.18
同理,登录主机web2,修改默认页面
This is PACS-web2 10.13.109.19
6、访问页面
10.13.109.18,访问时报403错误
于是查看nginx日志,路径为/var/log/nginx/error.log。打开日志发现报错Permission denied,详细报错如下:
发现是权限问题,如果nginx没有目录的操作权限,也会出现403错误。
于是修改权限为777
chmod 777 index.html
再次访问,发现正常
web服务器绑定VIP
2台web服务器为lo:0绑定VIP地址、抑制ARP广播
cd /qhapp
vi lvs_rs.sh
#!/bin/bash
vip=10.13.109.17
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
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
sysctl -p >/dev/null 2>&1
#执行脚本
bash lvs-rs.sh
查看
ip a
#复制到另外一台
scp lvs-rs.sh root@10.13.109.16:~
#执行脚本
bash lvs-rs.sh
查看
ip a
yum install -y ipvsadm keepalived
主节点master配置
vi /etc/keepalived/keepalived.conf
! Configuration File For keepalived
#email 通知,基本不用此处所以删掉
global_defs{
# 路由id,全局唯一,表示当前keepalived节点的唯一性
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
# 指定Keepalived的角色,MASTER为主,BACKUP为备
state MASTER
# 网卡id
interface ens192
# 虚拟路由编号,主备要一致
virtual_router_id 51
# 定义优先级,数字越大,优先级越高,主DR必须大于备DR
priority 100
# 检查间隔,默认为1s
advert_int 1
authentication {
# 这里配置的密码最多为8位,主备要一致,否则无法正常通讯
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# 定义虚拟IP为10.13.109.17,可多设,每行一个
10.13.109.17
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 10.13.109.17 80 {
# 设置健康检查时间,单位是秒
delay_loop 6
# 设置负载调度的算法为wlc
lb_algo rr
# 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
lb_kind DR
#设置会话保持时间,对动态网页非常有用
persistence_timeout 0
#指定转发协议类型,有TCP和UDP两种
protocol TCP
# 指定real server1的IP地址,此处是PACS-web1的地址
real_server 10.13.109.18 80 {
# 配置节点权值,数字越大权重越高
weight 1
#realserver的状态监测设置部分单位秒
TCP_CHECK {
#超时时间
connect_timeout 10
#重试次数
nb_get_retry 3
#重试间隔
delay_before_retry 3
#监测端口
connect_port 80
}
}
# 指定real server2的IP地址,此处是PACS-web2的地址
real_server 10.13.109.19 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
2、keepalived从节点配置文件
vi /etc/keepalived/keepalived.conf
! Configuration File For keepalived
global_defs{
# 路由id,全局唯一,表示当前keepalived节点的唯一性
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
# 指定Keepalived的角色,MASTER为主,BACKUP为备
state MASTER
# 网卡id
interface ens192
# 虚拟路由编号,主备要一致
virtual_router_id 51
# 定义优先级,数字越大,优先级越高,主DR必须大于备DR
priority 100
# 检查间隔,默认为1s
advert_int 1
authentication {
# 这里配置的密码最多为8位,主备要一致,否则无法正常通讯
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# 定义虚拟IP为10.13.109.17,可多设,每行一个
10.13.109.17
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 10.13.109.17 80 {
# 设置健康检查时间,单位是秒
delay_loop 6
# 设置负载调度的算法为wlc
lb_algo rr
# 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
lb_kind DR
persistence_timeout 0
protocol TCP
# 指定real server1的IP地址,此处是PACS-web1的地址
real_server 10.13.109.18 80 {
# 配置节点权值,数字越大权重越高
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
# 指定real server2的IP地址,此处是PACS-web2的地址
real_server 10.13.109.19 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
3、Keepalived 2个节点开启流量转发
echo 1 > /proc/sys/net/ipv4/ip_forward
4、启动PACS-web两个节点的nginx
systemctl start nginx
5、启动LVS两个节点keepalived,注意先启动主后启动从
systemctl start keepalived.service && systemctl enable keepalived.service
6、测试漂移切换,在keepalived主节点停止keepalived查看
关闭前主节点
关闭前备节点
systemctl stop keepalived.service
主节点关闭keepalived后,在keepalived从节点查看IP是否能看到VIP
关闭后主节点
关闭后备节点
以上可以看到,主节点keepalived关闭后,虚拟IP自动漂移到备节点
此时再把主节点keepalived服务器开启
systemctl start keepalived.service
开启后主节点
开启后备节点
以上可看到主节点开启keepalived服务器,VIP又自动漂移回主节点
网页访问VIP地址
发现这里出现的是PACS-web1的nginx信息
可以多访问几次,也可以直接关闭10.13.109.18,再测试访问,如下
可以发现这里显示的是PACS-web2的nginx信息,至此,验证完成
1、修改/etc/sysconfig/keepalived日志保存路径
sed -i s/KEEPALIVED_OPTIONS=\"-D"/KEEPALIVED_OPTIONS=\"-D -d -S 0"/gp /etc/sysconfig/keepalived
2、添加rsyslog记录日志存放位置
echo "local0.* /var/log/keepalived.log" >>/etc/rsyslog.conf
3、重启rsyslog日志服务和keepalived服务
systemctl restart rsyslog && systemctl restart keepalived.service
4、检查日志文件是否存在和记录日志
ls /var/log/keepalived.log
tail -3 /var/log/keepalived.log
测试keepalived的监控检测
网页访问虚拟ip 10.13.109.17
ipvsadm -ln
ipvsadm -ln --stats
ipvsadm -lnc
至此部署完成