LVS 集群采用 IP 负载均衡技术和基于内容请求分发技术. 调度器具有很好的吞吐率, 将请求均衡地转移到不同的服务器上执行, 且调度器自动屏蔽掉服务器的故障, 从而将一组服务器构成一个高性能的, 高可用的虚拟服务器. 整个服务器集群的结构对客户是透明的, 而且无需修改客户端和服务器端的程序. 为此, 在设计时需要考虑系统的透明性, 可伸缩性, 高可用性和易管理性.
直接路由 (DirectRouting); 简称 DR 模式, 采用半开放式的网络结构, 与 TUN 模式的结构类似, 但各节点并不是分散在各地, 而是与调度器位于同一个物理网络. 负载调度器与各节点服务器通过本地网络连接, 不需要建立专用的 IP 隧道.
Keepalived 的作用是检测服务器的状态, 如果有一台 web 服务器宕机, 或工作出现故障, Keepalived 将检测到, 并将有故障的服务器从系统中剔除, 同时使用其他服务器代替该服务器的工作, 当服务器工作正常后 Keepalived 自动将服务器加入到服务器群中, 这些工作全部自动完成, 不需要人工干涉, 需要人工做的只是修复故障的服务器.
实验需求
服务器主机 | IP: ( VIP:192.168.200.100) | 需要安装配置 |
---|---|---|
NFS 共享服务器 | 192.168.200.105 | NFS 共享存储 |
LVS 主调度器 | 192.168.200.103 | keepalived 、ipvsadm |
LVS 从调度器 | 192.168.200.104 | keepalived 、ipvsadm |
节点服务器 1 | 192.168.200.101 | httpd 、NFS |
节点服务器 2 | 192.168.200.102 | httpd 、NFS |
windows 客户机 | 192.168.200.200 | 测试专用 |
LVS 调度服务器
主从调度服务器配置基本相同 (不同之处已经标注)
# yum install keepalived ipvsadm -y
调整 proc 响应参数
- # vi /etc/sysctl.conf
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.send_redirects = 0
- net.ipv4.conf.default.send_redirects = 0
- net.ipv4.conf.ens33.send_redirects = 0
- //proc 响应关闭重定向功能 //
- # sysctl -p // 立即生效
配置虚拟 VIP
- # cd /etc/sysconfig/network-scripts
- # cp ifcfg-ens33 ifcfg-ens33:0
- # vim ifcfg-ens33:0
- DEVICE=ens33:0
- ONBOOT=yes
- IPADDR=192.168.200.100
- NETMASK=255.255.255.0
- # ifup ens33:0 // 启用虚拟 IP
配置负载分配策略
编写脚本方便管理
- # cd /etc/init.d/
- # vi dr.sh
- #!/bin/bash
- GW=192.168.200.1
- VIP=192.168.200.100
- RIP1=192.168.200.101
- RIP2=192.168.200.102
- case "$1" in
- start)
- /sbin/ipvsadm --save> /etc/sysconfig/ipvsadm
- systemctl start ipvsadm
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
- /sbin/route add -host $VIP dev ens33:0
- /sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
- echo "ipvsadm starting --------------------[ok]"
- ;;
- stop)
- /sbin/ipvsadm -C
- systemctl stop ipvsadm
- ifconfig ens33:0 down
- route del $VIP
- echo "ipvsamd stoped----------------------[ok]"
- ;;
- status)
- if [ ! -e /var/lock/subsys/ipvsadm ];then
- echo "ipvsadm stoped---------------"
- exit 1
- else
- echo "ipvsamd Runing ---------[ok]"
- fi
- ;;
- *)
- echo "Usage: $0 {start|stop|status}"
- exit 1
- esac
- exit 0
- # chmod +x dr.sh
- # service dr.sh start
keepalived 部署
- # vim /etc/keepalived/keepalived.conf
- global_defs {
- ...
- smtp_server 127.0.0.1 #指向本地
- router_id LVS_01 #指定名称, 备份服务器不同名称
- ...
- }
- vrrp_instance VI_1 {
- state MASTER #备份服务器是 BACKUP
- virtual_router_id 10 # 组号 备份服务器相同
- ...
- auth_pass abc123 #验证密码 备份服务器相同
- priority 100 #优先级 备份小于主
- ...
- virtual_ipaddress {
- 192.168.200.100 // 指定 VIP 地址
- }
- ...
- virtual_server 192.168.200.100 80 {
- lb_kind DR // 指定 DR 模式
- ...
- real_server 192.168.200.101 80 { #web 节点地址端口
- weight 1 #节点的权重
- TCP_CHECK { #健康检查方式
- connect_port 80 #添加端口
- connect_timeout 3 #连接超时
- nb_get_retry 3 #重试次数
- delay_before_retry 3 #重试间隔 (秒)
- }
- }
- real_server 192.168.200.102 80 {
- weight 1
- TCP_CHECK {
- connect_port 80 #添加端口
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 3
- }
- }
- }
- # systemctl start keepalived
- # ip addr show dev ens33:0 #查看虚拟网卡
- # systemctl stop firewalld.service #关防火墙
- # setenforce 0
配置 NFS 共享服务器
- # systemctl stop firewalld.service // 关防火墙
- # setenforce 0
- # yum install nfs-utils rpcbind -y // 安装 NFS 服务
- # systemctl start rpcbind.service
- # systemctl start nfs.service
- # cd /opt | mkdir benet accp // 创建共享目录
- (在实际工作中 还是要共享挂载磁盘阵列 raid 的目录)
- # vi /etc/exports
- /usr/share *(ro,sync)
- /opt/benet 192.168.200.0/24(rw,sync)
- /opt/accp 192.168.200.0/24(rw,sync)
- # exportfs -rv // 发布共享
节点服务器配置
两个节点服务器配置基本相同 (不同之处已经标注)
- # yum install nfs-utils rpcbind -y // 安装 NFS 服务
- # mount.nfs 192.168.200.105:/opt/benet /var/www/html // 挂载 NFS
- # yum install -y httpd #安装 httpd 服务
- # systemctl start httpd.service #启动 httpd 服务
- # systemctl stop firewalld.service #关防火墙
- # setenforce 0
建立一个测试页面
两个节点服务器测试页面要不同
- # echo "this is 7.1 web"> /var/www/html/index.html #节点服务器 1
- # echo "this is 7.2 web"> /var/www/html/index.html #节点服务器 2 (方便查看测试结果)
配置虚拟 VIP
作用: 仅发送 web 响应数据包的源地址
- # cd /etc/sysconfig/network-scripts
- # cp ifcfg-lo ifcfg-lo:0
- # vim ifcfg-lo:0
- DEVICE=lo:0
- IPADDR=192.168.200.100
- NETMASK=255.255.255.0
- ONBOOT=yes
编写服务脚本方便管理
添加 VIP 本地访问路由
调整 proc 响应
- # cd /etc/init.d/
- # vim web.sh
- #!/bin/bash
- VIP=192.168.200.100
- case "$1" in
- start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
- /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
- sysctl -p>/dev/null 2>&1
- echo "RealServer Start OK"
- ;;
- stop)
- ifconfig lo:0 down
- route del $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 Stopd"
- ;;
- *)
- echo "Usage: $0 {start|stop}"
- exit 1
- esac
- exit 0
- # chmod +x web.sh
- # service web.sh start
- # ifup lo:0 // 启用虚拟 VIP
- # firefox "http://127.0.0.1/" & // 火狐查看测试页
- # service web.sh stop
- # service web.sh start //(建议重启服务)
测试
在 windows7 浏览器输入 虚拟 VIP 192.168.200.100
(多刷新几次可以看到节点 1 和节点 2 的测试页面为成功)
来源: http://www.bubuko.com/infodetail-2654163.html