目录
一、LVS
负载均衡的结构
①负载调度器:LVS即四层(传输层)负载均衡,根据算法调度用户请求给业务服务器处理
②业务服务器池:真正处理用户请求的业务服务器集群
LVS三种工作模式
①LVS-NAT:DNAT原理,缺点是路由器转发修改mac地址压力过大。
②LVS-DR:每台服务器都配置虚拟ip,通过改写请求报文中的mac地址来实现。
③IP隧道:转发时借助隧道。
LVS调度算法
①RR:轮询,每个服务器分配一次反复轮询。
②LC:最小连接数轮询,查看那个服务器处理的请求最少则处理,以此类推。
③WRR:加权轮询,根据管理员给每个服务器添加的weight权重分配用户请求任务,默认全部是1。
④SH:session或者源地址hash分配,通过用户来源地址hash算法将分配给固定的服务器处理。
⑤DH:模板地址hash,通过用户访问目的地址hash算法将,分配给固定的服务器处理。
⑥WLC:加权最小连接数
ipvsadm工具
ipvsadm是LVS负载均衡的真实服务名称。
-A 添加虚拟服务器
-D 删除整个虚拟机服务器
-s 指定负载调度算法
-a 添加真实服务器
-d 删除某个节点
-t 指定VIP地址及TCP端口
-r 指定RIP地址及TCP端口
-w 设置权重
-l 列表查看LVS虚拟服务器‘
-n 以数字形式显示地址
-m 指定nat模式
-g 指定DR模式
-C 清空策略
二、KEEPALIVED
KEEPALIVED作用
保证负载均衡的高可用性,完美解决了LVS所有问题,可以检查后端服务器池种的服务器健康。
KEEPALIVED原理
利用VRRP协议原理,主备模式通过优先级判断谁是主谁是备。备机是否切换为主机依靠的是主备之间的心跳线。
KEEPALIVED工作模式
①抢占模式(默认模式):主坏了之后直接切换备为主服务器,主修好后直接抢占回主服务器。
②延时抢占模式:主坏了之后直接切换备为主服务器,主修好后检查是否完全稳定后再抢占回主服务器。
③不抢占模式:主坏了之后切换备为主服务器,原来的主服务器修好也不会再抢占为主服务器。
④心跳线模式:主备服务器之间心跳线模式默认是广播模式,可以根据需求改为组播或者单播模式。
KEEPLIVED问题及优化
①默认是抢占模式,根据需求改为非抢占模式或延时抢占模式。
②心跳线默认是广播模式,根据需求改为组播或单播模式。
③脑裂:备机由于种种原因收不到主机发送的心跳线,导致用户不知道访问那个服务器。例如:防火墙拦截心跳线广播报文、主备之间物理网线心跳线断裂等。
④日志分隔:keepalived的默认日志在/var/log/message里,通过修改 /etc/sysconfig/keepalived中参数KEEPALIVED_OPTIONS="-D -S local数字" ,并利用rsyslog将日志分隔出来。
三、LVS+KEEPALIVED架构实现
实验目的
①通过客户端访问LVS高可用集群虚IP 192.168.30.100可以访问到NFS业务服务器的内容。
②当LVS_01负载均衡断开服务后,LVS_02可以进行备用,不影响用户访问业务。
③当WEB1或者WEB2关闭服务后,另外一台服务器可以正常访问业务。
实验拓扑
实验准备
①1台客户机用于访问业务,IP地址192.168.30.10。
②2台LVS负载均衡,并使用keepalived做成高可用,LVS_01 IP地址:192.168.30.14,LVS_02 IP地址:192.168.30.15。
③2台nginx web代理服务器安装nginx并将nfs服务器内容挂载到默认目录,web1 IP地址:192.168.30.12,web2 IP地址:192.168.30.13。
④NFS业务服务器创建文件夹共享给web1和web2,内容为"this is nfs share"
实验过程
①关闭所有服务器firewalld.service和selinux
systemctl stop firewalld.service
setenforce 0
②NFS业务服务器配置,创建共享文件夹 /share,并在/share文件夹中创建index.html文件,输入内容为"this is nfs share"
mkdir /share
#创建共享文件夹
echo "this is nfs share">/share/index.html
#创建共享文件内容
vim /etc/exports
内容:
/share 192.168.30.0/24(rw,sync)
#配置共享文件夹/share 共享网段192.168.0.0/24 rw可读写,sync并同步
systemctl start nfs
#启动ngs服务
exportfs -vr
显示内容:exporting 192.168.30.0/24:/share
#热加载并查看本机nfs共享
③配置web服务器,安装nginx并挂载NFS到默认根目录下并创建虚拟网卡lo:0配置ip192.168.30.100。
web1和web2执行:
yum install epel-release -y
#先安装额外源
yum install nginx -y
#yum安装nginx
systemctl start nginx
#开启nginx服务
showmount -e 192.168.30.11
显示内容:/share 192.168.30.0/24
#查看此服务器是否有NFS共享
rpm ql nginx |grep html
#查看nginx默认web根目录
mount 192.168.30.11:/share /usr/share/nginx/html/
#临时挂载 nfs服务器的/share文件夹到/usr/share/nginx/html/目录下,所以问/usr/share/nginx/html/的内容即访问/share内容
curl 192.168.30.13
curl 192.168.30.12
#显示内容this is nfs share
#分别访问俩个web服务器内容,查看是否挂载nfs成功显示网页内容。
ifconfig lo:0 192.168.30.100 netmask 255.255.255.2555
#添加虚拟网卡lo:0并配置ip
route add -host 192.168.30.100 dev lo:0
#添加路由192.168.30.100走lo:0网卡
vim /etc/sysctl.conf
#编辑内核参数,添加内容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
#保存退出后查看配置
sysctl -p
#查看内核参数是否配置完成
④LVS_01和LVS_02安装ipvsadm并启动服务
yum install ipvsadm -y
#yum安装ipvsadm服务,即LVS负载均衡的真实服务名
systemctl start ipvsadm.service
#开启ipvsadm服务,此步骤启动服务报错
systemctl status ipvsadm.service>1.txt
cat 1.txt
#将ipvsadm服务启动报错提示导给1.txt文件并查看。内容如下截图
ipvsadm-save>/etc/sysconfig/ipvsadm
#报错信息提示是没有/etc/sysconfig/ipvsadm文件,解决方法是将ipvsadm保存到/etc/sysconfig/ipvsadm文件下。
systemctl restart ipvsadm.service
#重新启动ipvsadm成功
⑤LVS_01和LVS_02安装keepalived服务并配置启动
yum install keepalived.x86_64 -y
#安装keepalived.x86_64
vim /etc/sysctl.conf
#编辑内核文件
添加内容:
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#保存退出
sysctl -p
#查看添加内核内容有则成功
vim keepalived.conf
#编辑配置文件
修改内容:
global_defs模块中
smtp_server 127.0.0.1
#改为127.0.0.1即改为本机
router_id LVS_01
#第一条LVS名称改为LVS_01
#vrrp_skip_check_adv_addr
#vrrp_strict
#vrrp_garp_interval 0
#vrrp_gna_interval 0
#以上4行安全机制添加#号注释掉
virtual_ipaddress {
192.168.30.100
}
#虚拟主机地址改为要配置的虚拟ip,可配置多个,若只写一个将模板的其他2个删除。
virtual_server 192.168.30.100 80 {
#虚拟ip地址改为配置的虚拟ip和web服务端口号
delay_loop 6
lb_algo rr
lb_kind DR
#模式改为DR模式即直连模式
persistence_timeout 50
protocol TCP
real_server 192.168.30.12 80 {
#第一台真实ip地址和web服务端口号
weight 1
TCP_CHECK {
#添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器
connect_port 80
#添加连接端口80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.30.13 80 {
#第二台真实ip地址和web服务端口号
weight 1
TCP_CHECK {
#添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器
connect_port 80
#添加连接端口80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
#俩台真实服务器后的所有内容删除即可,修改完成后保存退出。完整配置文件如下图
scp keepalived.conf 192.168.30.15:/etc/keepalived/
LVS_02配置文件修改:
#将配置好的配置文件传到LVS_02服务器上
#第一步修改 router_id LVS_02 名称改为LVS_02
#第二步要修改vrrp_instance VI_1模块中的state为BACKUP,和priority 90改为比主LVS优先级低的等级
#其他不用修改保存即可
systemctl restart ipvsadm keepalived
#重启服务
ipvsadm -ln
显示内容:
TCP 192.168.30.100:80 rr persistent 50
-> 192.168.30.12:80 Route 1 0 0
-> 192.168.30.13:80 Route 1 0 1
#查看有2个真实服务器的ip即可。
实验结果检验
①在客户机上curl 192.168.30.100查看内容是否为nfs服务器共享的内容“this is nfs share”
②关闭LVS_01测试查看内容是否还为nfs服务器共享的内容“this is nfs share”
③关闭nginx web1服务器测试查看内容是否还为nfs服务器共享的内容“this is nfs share”