LVS:Linux 虚拟服务器
什么是集群:
一组通过高速网络互联的计算组, 并以单一系统的模
式加以管理
? 将很多服务器集中起来一起, 提供同一种服务, 在客
户端看来就象是只有一个服务器
? 可以在付出较低成本的情况下获得在性能, 可靠性,
灵活性方面的相对较高的收益
? 任务调度是集群系统中的核心技术
一, 工作模式
1,NAT
2,TUN: 隧道模式 (很少使用)
3,DR: 应用广泛
4,Full nat: 大规模部署
二, LVS 的调度算法
1, 轮询 rr
2, 加权轮询 wrr
3, 最少连接 lc
4, 加权最少连接 wlc
5, 基于局部的最少连接 lblc
6, 带复制的基于局部的最少连接 lblcr
7, 源地址散列 sh
8, 目标地址散列 dh
9, 期望的最少延迟 sed
10, 最少队列调度 nq
LVS-NAT 模式:
1, 新建虚拟机 vh04.tedu.cn 192.168.4.4
2, 主机角色:
- (1)vh01 -> mysql
- (2)Vh02/vh03 -> web
- (3)Vh04 -> lvs-nat
(4) 物理主机 -> 客户端
3, 基于上午的环境, 做一些改进
(1)web 服务器配置网关
# nmtui -> # ifdown eth0; ifup eth0
(2)vh04 添加另一个 IP 地址. eth2 -> 201.1.1.4/24
[root@vh04 ~]# nmtui
(3)vh04 上开启路由转发 (7 版本默认已经打开, 可以不做)
- [root@vh04 ~]# sysctl -a | grep ip_forward
- [root@vh04 ~]# echo "net.ipv4.ip_forward = 1">> /etc/sysctl.conf
- [root@vh04 ~]# sysctl -p
4, 配置 LVS
(1) 安装
[root@vh04 ~]# yum install -y ipvsadm
(2) 创建虚拟服务器, 调度算法为 rr
[root@vh04 ~]# ipvsadm -A -t 201.1.1.4:80 -s rr
(3) 将 Real server 添加到虚拟服务器中
- [root@vh04 ~]# ipvsadm -a -t 201.1.1.4:80 -r 192.168.4.2 -m -w2
- [root@vh04 ~]# ipvsadm -a -t 201.1.1.4:80 -r 192.168.4.3 -m
(4) 查看规则
[root@vh04 ~]# ipvsadm -Ln
(5) 验证. 可以给两台 web 服务器配置不同的页面
[root@vh02 html]# vim /var/www/html/index.html
(6) 修改调度算法为 wrr
[root@vh04 ~]# ipvsadm -E -t 201.1.1.4:80 -s wrr
(7) 删除
- [root@vh04 ~]# ipvsadm -d -t 201.1.1.4:80 -r 192.168.4.3
- [root@vh04 ~]# ipvsadm -D -t 201.1.1.4:80
LVS-DR 模式
一, 拓扑: LVS 调度器只有一个 IP 地址, 它和 real server 在同一网络.
二, 客户机要把数据发给 VIP.VIP 需要出现在每台服务器上 (调度器, web 服务器)
三, 为了地址不冲突, 需要把 VIP 配置在调度器的 eth0 上, 把 VIP 配置在 web 服务器的 lo 上
四, 每台主机都有 VIP, 客户端发来的请求, 只有 LVS 回应. 为了实现这一点, 需要改 web 服务器的内核参数
五, 实施
1, 仍然使用 vh04 作为调度器, 对它进行清理
- [root@vh04 ~]# ifdown eth2
- [root@vh04 ~]# ipvsadm -D -t 201.1.1.4:80
2, 在 vh04 上配置 vip
- [root@vh04 ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,:0}
- [root@vh04 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
- TYPE=Ethernet
- BOOTPROTO=none
- NAME=eth0:0
- DEVICE=eth0:0
- ONBOOT=yes
- IPADDR=192.168.4.100
- PREFIX=24
- [root@vh04 ~]# ifup eth0:0
3, 在 web 服务器的 lo 上配置 VIP
- [root@vh02 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo{,:0}
- [root@vh02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
- DEVICE=lo:0
- IPADDR=192.168.4.100
- NETMASK=255.255.255.255
- NETWORK=192.168.4.100
- BROADCAST=192.168.4.100
- ONBOOT=yes
- NAME=lo:0
- [root@vh02 ~]# ifup lo:0
4, 在 web 服务器上修改内核参数
- [root@vh02 ~]# sysctl -a | grep arp_ig
- [root@vh02 ~]# echo "net.ipv4.conf.all.arp_ignore = 1">> /etc/sysctl.conf
- [root@vh02 ~]# echo "net.ipv4.conf.lo.arp_ignore = 1">> /etc/sysctl.conf
- [root@vh02 ~]# sysctl -a | grep arp_ann
- [root@vh02 ~]# echo "net.ipv4.conf.all.arp_announce = 2">> /etc/sysctl.conf
- [root@vh02 ~]# echo "net.ipv4.conf.lo.arp_announce = 2">> /etc/sysctl.conf
5, 配置规则
- [root@vh04 ~]# ipvsadm -A -t 192.168.4.100:80 -s lc
- [root@vh04 ~]# ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.3
- [root@vh04 ~]# ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.2 -g
6,ipvsadm 服务
如果启动 ipvsadm 服务时出错, 则
[root@vh04 ~]# ipvsadm-save -n> /etc/sysconfig/ipvsadm
然后再正常控制服务状态
- [root@vh04 ~]# systemctl restart ipvsadm
- [root@vh04 ~]# systemctl enable ipvsadm
在 vh04 上编写服务监控脚本
- [root@vh04 bin]# vim monitor_web.sh
- VIP=192.168.4.100:80
- RIP1=192.168.4.2
- RIP2=192.168.4.3
- while [ : ]
- do
- for ip in $RIP1 $RIP2
- do
- curl http://$ip http://$ip/ &> /dev/null
- web_health=$?
- ipvsadm -Ln | grep $ip &> /dev/null
- web_in_lvs=$?
- if [ $web_health -ne 0 -a $web_in_lvs -eq 0 ]; then
ipvsadm -d -t $VIP -r $ip
elif [ $web_health -eq 0 -a $web_in_lvs -ne 0 ]; then
ipvsadm -a -t $VIP -r $ip
- fi
- done
- sleep 3
- done
验证时, 可以每隔一秒查看一次规则
[root@vh04 bin]# watch -n1 ipvsadm -Ln
来源: http://www.bubuko.com/infodetail-2705357.html