LVS ( Linux Virtual Server ) 集群由3部分组成,最前端是负载均衡层( Load Balancer ),中间是服务器群组层 ( Server Array ) ,底端是数据共享层 ( Share Storage )html
VS/NAT 即 Virtual Server via Nitwork Address Translation 网络地址翻译技术实现虚拟服务器前端
VS/TUN 即 Virtual Server via IP Tunneling 经过IP隧道技术实现虚拟服务器算法
VS/DR 即 Virtual SErver via Direct Routing 直接路由技术实现虚拟服务器vim
http://sbexr.rabexc.org/latest/sources/ac/22ff6f9bd1bf8c.html 静态调度 1. rr Round Robin 轮询调度 2. wrr weight 加权 以权重之间的比例实如今各主机之间进行调度 3. sh source hashing 源地址散列 主要实现会话绑定,可以将此前创建的session信息保留 4. dh Destination hashing 目标地址散列 把同一个IP地址的请求,发送给同一个server 5. mh maglev hashing scheduling 磁悬浮哈希调度 动态调度 1. lc Least-Connection 最少链接 2. wlc Weighted Least-Connection Scheduling 加权最少链接 3. sed Shortest Expected Delay 最短时间望延迟 4. nq never queue 永不排队(改进的sed) 5. lblc Locality-Based Least Connection 基于局部性的最少链接 6. lblcr Locality-Based Least Connections withReplication 带复制的基于局部性最少连接 7. fo weighted failover scheduling 加权故障转移调度算法 8. ovf weighted overflow scheduling 加权溢出调度 ip_vs_fo found in Linux kernels: 3.18–3.19, 4.0–4.18, 4.19-rc+HEAD ip_vs_ovf found in Linux kernels: 4.3–4.18, 4.19-rc+HEAD ip_vs_mh found in Linux kernels: 4.18, 4.19-rc+HEAD
地址规划bash
主负载调度器 Director Server Hostname DR1 eth1: 192.168.12.130 eth1:1 192.168.12.200 Virtual IP eth2: 10.10.10.11 备负载调度器 Director Server Hostname DR2 eth1: 192.168.12.131 eth1:1 192.168.12.200 Virtual IP eth2 10.10.10.12 Real server 1 Hostname rs1 eth1 192.168.12.132 eth2 10.10.10.13 Real server 2 Hostname rs2 eth1 192.168.12.133 eth2 10.10.10.14
yum -y install keepalived ipvsadm服务器
chkconfig --level 2345 keepalived on网络
systemctl enable keepalivedsession
在DR1和DR2打开ip_forward负载均衡
cat <<EOF >> /etc/sysctl.conf
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.conf
oop
vim /etc/sysconfig/keepalived
修改 KEEPALIVED_OPTIONS="-D -d -S 0"
或用命令修改 sed -i 's/KEEPALIVED_OPTIONS=.*/KEEPALIVED_OPTIONS="-D -d -S 0"/' /etc/sysconfig/keepalived
修改配置文件 /etc/rsyslog.conf
cat >> /etc/rsyslog.conf << EOF
#keepalived -S 0
local0.* /var/log/keepalived.log
EOF
重启日志服务 service rsyslog restart 检查 /var/log/keepalived.log 文件是否存在
touch /etc/sysconfig/modules/ipvs.modules chmod 755 /etc/sysconfig/modules/ipvs.modules cat << EOF > /etc/sysconfig/modules/ipvs.modules #!/bin/bash ipvs_modules_dir="/usr/lib/modules/\`uname -r\`/kernel/net/netfilter/ipvs" for i in \`ls \$ipvs_modules_dir | sed -r 's#(.*).ko.*#\1#'\`; do /sbin/modinfo -F filename \$i &> /dev/null if [ \$? -eq 0 ]; then /sbin/modprobe \$i fi done EOF sh /etc/sysconfig/modules/ipvs.modules 查看内核支持的ipvs模块 grep -i ip_vs /boot/config-`uname -r` 查看内核已加载的ipvs模块 lsmod | grep ip_vs
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc # 设置报警邮件,每行一个 failover@firewall.loc # 须要开启本机sendmail服务 sysadmin@firewall.loc } notification_email_from Keepalived@localhost # 设置邮件发送地址 smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL # 表示Keepalived 服务器的一个标识.发邮件时显示在邮件主题中的信息 } # vrrp 实例定义部分 vrrp_instance VI_1 { state MASTER # 指定Keepalived 角色,BACKUP表示备用 interface eth1 # 指定 HA监测网络的接口 virtual_router_id 51 # 虚拟路由标识,同一个 vrrp_instancd下, MASTER AND BACKUP 必须是一致的 priority 100 # 定义优先级,数字越大,优先级越高 在同一个 vrrp_instancd下. MASTER 优先级必须大于 BACKUP advert_int 1 # 主备同步检查时间间隔,时间为秒 authentication { # 设置验证类型和密码 auth_type PASS # 设置验证类型 主要有 PAS S和 AH 两种 auth_pass 1111 # 设置验证密码 在同一个 vrrp_instancd下 } virtual_ipaddress { 192.168.12.200 # 虚拟IP,能够设置多个,每行一个 } } # 虚拟服务器定义部分 virtual_server 192.168.12.200 80 { delay_loop 6 # 设置运行状况检查时间,单位为秒 lb_algo rr # 设置负载调度算法 rr 即轮询算法 lb_kind DR # 设置 LVS 负载均衡机制 NAT TUR DR nat_mask 255.255.255.0 persistence_timeout 50 # 会话保持时间 注释掉此行才会轮询. 这个选项对动态网页很是有用,为集群session 共享提供了很好的解决方案, 有了这个会话保持功能,用户的 # 请求会被一直发到某个服务节点, 直到超过这个会话保持时间. 须要注意的是这个会话保持时间是最大无响应超时时间,也就是说,用户在操做动态 # 页面时, 若是在50秒内没有执行任何操做, 那么接下来的操做会被分发到另外的节点, 可是若是用户一直在动态页面, 则不受50秒时间限制 protocol TCP # 指定转发协议 TCP UDP两种 real_server 192.168.12.132 80 { weight 3 # 权重 数字越大, 权重越高 TCP_CHECK { connect_timeout 3 nb_get_retry 3 # 重试次数 delay_before_retry 3 # 重试间隔 } } real_server 192.168.12.133 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
配置完成后将此文件复制到备用 Director Server , 进行如下修改便可
将 state MASTER 改成 state BACKUP
priority 100 更改成一个较小的值,这里改成80
在 LVS 的 DR 和 TUN 模式下,用户的访问请求到达 Real Server 后, 是直接返回给用户的, 再也不通过前端的 Director Server ,所以 ,须要在每一个Real server 节点上增长虚拟的 VIP 地址,
这样数据才能直接返回给用户.增长 VIP 地址的操做能够经过建立脚本的方式来实现.
建立文件 /etc/init.d/lvsrs
touch /usr/bin/lvsrs
chmod 755 /usr/bin/lvsrs
vi /usr/bin/lvsrs
脚本内容以下
#!/bin/bash # description : Start Real Server VIP=192.168.12.200 . /etc/rc.d/init.d/functions case "$1" in start) echo " Start LVS of Real Server " /usr/sbin/ip addr add ${VIP}/28 dev lo 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 ;; stop) /usr/sbin/ip addr del ${VIP}/28 dev lo echo " close LVS Director server " 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 "Usage: $0 {start|stop}" exit 1 esac
在主 备Director Server 上分别启动 Keepalived 服务
/etc/init.d/keepalived start
在两个 Real server 上执行以下脚本
/etc/init.d/lvsrs start