1.关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
2.关闭selinux
vim /etc/sysconfig/selinux
修改
SELINUX=disabled
3.安装keepalived等
yum -y install keepalived ipvsadm net-tools gcc gcc-c++ make popt-devel kernel-devel openssl-devel
#设置开机启动
systemctl enable keepalived
4.修改keepalived.conf
vim /etc/keepalived/keepalived.conf
keepalived.conf 配置,注意修改ip和端口
! Configuration File for keepalived
global_defs {
router_id lvs1 #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}
vrrp_instance VI_1 { #vrrp实例定义部分
state MASTER #设置lvs的状态,MASTER和BACKUP两种,必须大写,只能一个MASTER
interface ens33 #设置对外服务的接口
virtual_router_id 100 #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示
priority 100 #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
advert_int 1 #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码
auth_type PASS #主要有PASS和AH两种
auth_pass 1111 #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
}
virtual_ipaddress { #设置虚拟ip地址,可以设置多个,每行一个
192.168.50.149
}
}
virtual_server 192.168.50.149 6443 { #设置虚拟服务器,需要指定虚拟ip和服务端口
delay_loop 6 #健康检查时间间隔
lb_algo wrr #负载均衡调度算法
lb_kind DR #负载均衡转发规则
persistence_timeout 50 #设置会话保持时间,对动态网页非常有用
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 192.168.50.121 6443 { #配置服务器节点1,需要指定real server的真实IP地址和端口
weight 1 #设置权重,数字越大权重越高
TCP_CHECK { #realserver的状态监测设置部分单位秒
connect_timeout 10 #连接超时为10秒
retry 3 #重连次数
delay_before_retry 3 #重试间隔
connect_port 6443 #连接端口为81,要和上面的保持一致
}
}
real_server 192.168.50.122 6443 { #配置服务器节点1,需要指定real server的真实IP地址和端口
weight 1 #设置权重,数字越大权重越高
TCP_CHECK { #realserver的状态监测设置部分单位秒
connect_timeout 10 #连接超时为10秒
retry 3 #重连次数
delay_before_retry 3 #重试间隔
connect_port 6443 #连接端口为81,要和上面的保持一致
}
}
}
# 启动keepalived
systemctl start keepalived
#设置开机启动
systemctl enable keepalived
5.修改成单播通信,可选,根据实际需要
服务器网络环境中,路由交换层禁用了ARP的广播限制,造成了keepalived主备协议无法通过广播的方式进行通信,造成主备两台服务器都强制占用HAVIP地址,出现同时两台服务器都有VIP地址的情况出现。必须通过配置来指定IP的两台服务器间进行通
priority 100
unicast_src_ip 192.168.2.192 #本机实际IP
unicast_peer {
192.168.2.191 #对端实际IP
}
6.DR模式后端主机执行脚本,两个选择一个
1.第一个方法
vim /etc/rc.d/init.d/realserver.sh
#!/bin/bash
#chkconfig: 345 88 14
in=${1:-start}
SNS_VIP=192.168.50.149
echo $in
#source /etc/rc.d/init.d/functions
case "$in" 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 u+x /etc/rc.d/init.d/realserver.sh
chkconfig --add realserver.sh
chkconfig realserver.sh on
service realserver start
2.第二个方法,这个没有调试
vim /etc/bin/realserver.sh
#!/bin/bash
#chkconfig: 345 88 14
vip=192.168.50.149
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
echo /etc/bin/realserver.sh >> /etc/rc.local
chmod u+x /etc/bin/realserver.sh
bash /etc/bin/realserver.sh
ip a # 查看lo可以看到一下信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.50.149/32 brd 192.168.50.149 scope global lo:0
valid_lft forever preferred_lft forever
6.检查
ip a #查看虚拟ip
#查看后端状态,在本地或者浏览器测试访问查看是否能查看流量状态
ipvsadm -ln
ipvsadm -ln --stats
ipvsadm -lnc
# 注意netstat -lntp 是看不到开放端口的;
#关闭第一台服务器,看ip是否漂移,是否能正常访问;
7.记录日志,可选
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/keepalive.log``tail -3 /``var``/log/keepalive.log`
8.说明
LVS相关术语
- DS:Director Server。指的是前端负载均衡器节点。
- RS:Real Server。后端真实的工作服务器。
- VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
- DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
- RIP:Real Server IP,后端服务器的IP地址。
- CIP:Client IP,访问客户端的IP地址
LVS的八种调度算法
轮叫调度 rr 这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。
加权轮叫 wrr 这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。
最少链接 lc 这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1
加权最少链接 wlc 这个算法比 lc 多了一个权重的概念。
基于局部性的最少连接调度算法 lblc 这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
复杂的基于局部性最少的连接算法 lblcr 记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。
目标地址散列调度算法 dh 该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
源地址散列调度算法 sh 与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
LVS有三种工作模式
1、NAT模式(VS-NAT)
把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS
来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将
目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器
2、IP隧道模式(VS-TUN)
由于互联网上的大多Internet服务的请求包很短小,而应答包通常很大,所以,隧道模式就是把客
户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据
包,处理后,直接返回给客户端,不需要再经过负载均衡器注意,由于RS需要对负载均衡器发过来的数据包
进行还原,所以必须支持IPTUNNEL协议,因此在RS的内核中,必须要编译IPTUNNEL这个选项。
3、直接路由模式(VS-DR)
负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP
请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,
找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS这时RS收到这个数据
包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,
处理后直接返回给客户端由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个
广播域,也可以简单的理解为在同一台交换机上
★DR模式的九大特点
1、通过在调度器上LB上修改数据包的目的的MAC地址实现转发,源IP仍然是客户端的IP,目的IP地址仍然是VIP 2、请求报文警告调度器,而RS响应出来后的报文无需警告调度器LB,因此并发访问量大使用效率很高(和NAT模式比) 3、DR模式是通过MAC地址的改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网中(小缺点)。 4、需要注意RS节点的VIP绑定(lo:vip/32,lo1:vip/32)和ARP抑制问题,抑制没有接网线的那个网卡响应ARP广播。 5、RS节点的默认网关不需要是调度器LB的DIP,而直接是IDC机房分配的上级路由器的IP(RS带有外网IP地址的情况),理讲,只要RS可以出外网即可,不是必须配置外网IP。 6、由于DR模式的调度器仅进行了目的MAC地址的改写,因此调度器LB无法改变请求报文目的端口(和NAT要区别)。 7、当前调度器LB支持几乎所有的UNIX/LINUX系统,但目前不支持Windows系统,真实服务器RS节点可以是Windows系统 8、总的来说DR模式效率很高,但是配置也比较麻烦,因此访问量不是特别大的公司可以用haproxy/nginx取代,符合运维原则:简单、易用、高效,日1000-2000万PV或请求1万以下都可以考虑aproxy/nginx(LVS NAT模式)。 9、直接对外的访问业务,例如:web服务器做RS节点,RS最好用公网IP地址,不直接对外的业务,如数据库、存储系统节点最后用内部IP地址。
参考
https://www.cnblogs.com/quanloveshui/p/11075796.html
https://www.cnblogs.com/huanglingfa/p/13821811.html
https://blog.csdn.net/xia296/article/details/87971439
来源:oschina
链接:https://my.oschina.net/rickywiki/blog/4938518