LVS-DR集群
原理:
-
当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
-
PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
-
IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群
服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP
地址及端口,并将新的数据包发往POSTROUTING链
- POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将
数据包最终发送给后端的服务器
组成:
LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层,用Load Balancer表示,中间的服务器群组层,用Server Array表示,最底端的数据共享存储层,用Shared Storage表示。
搭建
192.168.190.200 作为调度器director
192.168.190.201 为web服务器1
192.168.190.202 为web服务器2
1、安装ipvsadm工具
bash
yum install ipvsadm -y
2、配置虚拟ip
bash
ifconfig ens33:200 192.168.190.150 netmask 255.255.255.0 up
3、手动添加两台RS
bash
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t 192.168.190.200:80 -s rr -p 20
ipvsadm -a -t 192.168.190.200:80 -r 192.168.190.201:80 -g
ipvsadm -a -t 192.168.190.200:80 -r 192.168.190.202:80 -g
ipvsadm-save > /etc/sysconfig/ipvsadm
查看配置信息
[root@node1 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP localhost.localdomain:http wrr persistent 20
-> 192.168.190.201:http Route 1 0 0
-> 192.168.190.202:http Route 1 0 0
4、给两台RS修改配置文件
bash
RS1上执行
ifconfig lo:200 192.168.190.200 netmask 255.255.255.255 up
route add -host 192.168.190.200 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
RS2上执行
ifconfig lo:200 192.168.190.200 netmask 255.255.255.255 up
route add -host 192.168.190.200 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
NGINX负载均衡
1、准备1台服务主机,两台web服务器
服务主机
192.168.121.135
web服务器
192.168.121.140
192.168.121.150
在服务主机上修改配置文件
bash
vim /etc/nginx/nginx.conf
upstream pool1 {
# 负载均衡池,里面记录的是要转发到的服务器
server 192.168.121.140:80 weight=1; # 主机及权重值
server 192.168.121.150:80 weight=1;
}
server {
listen 80; # 监听端口
server_name www.web.com;
location / {
proxy_pass http://pool1; # 当访问到www.web.com 时将会转发到 负载均衡池
}
}
在两台web服务器上,添加一下内容:
bash
在192.168.121.140上
vim /etc/nginx/nginx.conf
在http 区块里面新增以下内容:
server {
listen 80;
server_name 192.168.121.140;
location / {
root /usr/share/nginx/html1; # 访问的目录
index index.html; # 需要寻找的类型
}
然后创建目录写入数据
mkdir /usr/share/nginx/html1
echo web1 > /usr/share/nginx/html1/index.html
在192.168.121.150上
vim /etc/nginx/nginx.conf
在http 区块里面新增以下内容:
server {
listen 80;
server_name 192.168.121.150;
location / {
root /usr/share/nginx/html1; # 访问的目录
index index.html; # 需要寻找的类型
}
然后创建目录写入数据
mkdir /usr/share/nginx/html1
echo web2 > /usr/share/nginx/html1/index.html
在服务主机上添加域名解析文件
bash
echo "192.1668.121.135 www.web.com" >> /etc/hosts
测试:
bash
[root@node1 ~]# for((i=0;i<6;i++)); do curl www.web.com; done
web1
web2
web1
web2
web1
web2