LVS(linux virtual server)其实就是针对高可伸缩、高可用网络服务的需求,给出基于ip层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器。所以,lvs需要内核有ipvs支持,linux-2.4.23以后ipvs都编译到内核里,如果你是之前版本确保你的内核支持ipvs后,只需安装ipvsadm就可以把一台服务器配置成负载调度器(Load Balancer)。对外提供服务的IP,也就是我们访问的IP称做VIP。调度器LB的任务主要是分发请求,真正处理的是真实服务器(Real Server)。
LB收到用户请求包后,LB将请求包中虚拟服务器的IP地址转换为某个选定RS的IP地址,转发给RS;RS将应答包发给LB,LB将应答包中RS的IP转为虚拟服务器的IP地址,回送给用户。
1、所有realserver与director在同一个子网中
2、rip真实服务器ip地址为私有地址,仅用于集群节点之间使
3、客户端的请求,响应都要经过director
4、ripserver 网关指向dip
5、可以实现端口映射 80
6、realserver可以是任何操作系统
7、dirctor可能成为系统瓶颈
LB收到请求包后,将请求包中目标MAC地址转换为某个选定RS的MAC地址后将包转发出去,RS收到请求包后 ,可直接将应答内容传给用户。此时要求LB和所有RS都必须在一个物理段内,且LB与RS群共享一个虚拟IP。
1、集群节点必须在一个物理网络上(mac)
2、rip可以使用公网地址
3、director处理入站请求,
4、realserver网关不指向director
5、不支持端口映射
6、大多数操作系统支持realservers
7、dr dirctor 比nat director性能优越
LB收到用户请求包后,根据IP隧道协议封装该包,然后传给某个选定的RS;RS解出请求信息,直接将应答内容传给用户。此时要求RS和LB都要支持IP隧道协议。
集群节点可跨互联网
1、director和realserver不需要在一个网络中
2、rip一定不是私有地址
3、director 仅处理入站请求
4、realserver网关不能指向director ip
5、不支持端口映射
6、仅有支持ip遂道功能操作系统才能用在realserver
轮叫RR加权轮叫WRR目标地址hash DH源地地址hash SH
最少链接(Least Connections)
加权最少链接(Weighted Least Connections)WLC
linux默认的调度 shortest expected delay SED
never queue NQ
基于本地的最少链接(Locality-Based Least Connections:DH)LBLC
带复制的基于本地最少链接(Locality-Based Least Connections with Replication)LBLCR
192.168.1.100是LVS与互联网的虚拟server ip地址,简称为VIP
192.168.1.1是LVS与内部真实服务器通信的ip地址,简称为DIP
192.168.1.100与192.168.1.101就是LVS通过一些调度算法,选择服务器响应的真实服务器地址
Eth0网卡使用hostonly连接
Eth1网卡使用vmnet2连接
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl �Cp #使路由功能生效
[root@localhost ~]# uname -r
2.6.18-164.el5
[root@localhost ~]# grep -i ip_vs /boot/config-2.6.18-164.el5
如果是CONFLIG_IP_VS_PROTO_TCP=y 则说明支持ipvs
[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
[root@localhost ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo
[root@localhost ~]# yum install -y ipvsadm
1.定义集群服务
语法:
ipvsadm -A|-E -t|-u VIP:port -s scheduler -s指调度算法
ipvsadm -D -t|-u VIP:port
-A 在虚拟服务器表中添加新的虚拟服务器记录
-E 编辑内核虚拟服务器表中虚拟服务器记录。
-D 删除虚拟服务器表中虚拟服务器记录。
-L 查看
-t|-u 代表tcp和udp服务
VIP指虚拟服务器ip地址,即LVS与internet通信的网卡地址
2. 真实服务器的规则定义
ipvsadm -a|e -t|u VIP:port -r REALSERVER -g|-i|-m [-w weight]
ipvsadm -d -t|-u VIP:port -r REALSERVER
-a 在虚拟服务器表的添加一条新的真实服务器
-e 编辑虚拟服务器记录中真实服务器记录
-d删除虚拟服务器记录的真实服务器记录
-r 提供服务响应的真实服务器
-g 指LVS 的工作模式为直接路由模式
-i 指LVS 的工作模式为隧道模式
-m 指LVS 的工作模式为NAT 模式
-z 清空计数器
-n 数字的方式来显示地址
--stats 状态信息
--rate 每秒速率
添加或修改集群服务:ipvsadm -A|E -t|u|f VIP:port -s 调度算法 删除一个集群服务: ipvsadm -D -t|u|f VIP:port
添加或者修改REALSERVER:ipvsadm -a|e -t|u|f VIP:port -r REALSERVER[:port] -g|-i|-m [-w 权重]
删除一个REALSERVER: ipvsadm -d -t|u|f VIP:port -r REALSERVER[:port]
[root@localhost ~]# ipvsadm -A -t 192.168.10.100:80 -s rr #定义一个 集群服务,-s指调度算法为rr
[root@localhost ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.1.100 -m #向集群服务添加RS -m为nat方式
[root@localhost ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.1.101 �Cm #向集群服务添加RS -m为nat方式
[root@localhost ~]# service ipvsadm save #对规则进行保存
Saving IPVS table to /etc/sysconfig/ipvsadm: [确定]
[root@localhost ~]# service ipvsadm start
查看规则被保存
[root@localhost ~]# vim /etc/sysconfig/ipvsadm
Eth0网卡选择vmnet2连接,Eth0配置
#yum install �Cy httpd
#cd /var/www/html
#echo”web1”>index.html
#service httpd restart
Eth0网卡选择vmnet2连接,Eth0配置
#yum install �Cy httpd
#cd /var/www/html
#echo”web2”>index.html
#service httpd restart
测试
不断刷新之后,查看请求会话结果
[root@localhost ~]# ipvsadm �Cln
至此,实现了轮询。。
先配置内核参数再配置ip地址,顺序不能颠倒
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2">>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.all.arp_announce = 2">>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1">>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.all.arp_ignore = 1">>/etc/sysctl.conf
[root@localhost ~]# sysctl �Cp #立即生效
新加个
[root@localhost ~]# route add -host 192.168.10.101 dev lo:0
[root@localhost ~]# yum install �Cy httpd
[root@localhost ~]# cd /var/www/html
[root@localhost ~]# echo”web1”>index.html
[root@localhost ~]# service httpd restart
直接从real server1拷贝内核参数到real server2
[root@mail ~]# scp 192.168.10.200:/etc/sysctl.conf
[root@mail ~]# sysctl �Cp #立即生效
新加个
[root@mail ~]# route add -host 192.168.10.101 dev lo:0
[root@localhost ~]# route add -host 192.168.10.101 dev lo:0
[root@localhost ~]# yum install �Cy httpd
[root@localhost ~]# cd /var/www/html
[root@localhost ~]# echo”web1”>index.html
[root@localhost ~]# service httpd restart
[root@mail ~]# mkdir /mnt/cdrom/
mkdir: cannot create directory `/mnt/cdrom/': File exists
[root@mail ~]# mount /dev/cdrom /mnt/cdrom/
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@mail ~]# cd /mnt/cdrom/Cluster
[root@mail Cluster]# rpm -ivh ipvsadm-1.24-10.i386.rpm
Preparing... ########################################### [100%]
1:ipvsadm ########################################### [100%]
[root@mail Cluster]# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
[root@mail Cluster]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@mail Cluster]# ipvsadm -A -t 192.168.10.101:80 -s rr
[root@mail Cluster]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.101:80 rr
[root@mail Cluster]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.200 -g
[root@mail Cluster]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.201 -g
[root@mail Cluster]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.101:80 rr
-> 192.168.10.201:80 Route 1 0 0
-> 192.168.10.200:80 Route 1 0 0
紧接着以上的lvs-Dr做
[root@mail ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.101:80 rr
-> 192.168.10.201:80 Route 1 0 0
-> 192.168.10.200:80 Route 1 0 0
[root@mail ~]# ipvsadm �CC #清空规则
[root@mail ~]# ipvsadm �Cln #查看清空后的规则
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@mail ~]# ipvsadm -A -t 192.168.10.101:0 -s rr -p 1800
[root@mail ~]# ipvsadm -a -t 192.168.10.101:0 -r 192.168.10.200 -g
[root@mail ~]# ipvsadm -a -t 192.168.10.101:0 -r 192.168.10.201 -g
[root@mail ~]# ipvsadm -ln
测试,不断刷新之后,一直出现的是web2页面
新打开一个终端ssh 192.168.10.101
在director上显示
[root@mail ~]# ipvsadm �Cln
[root@mail ~]# ipvsadm -C
[root@mail ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@mail ~]# ipvsadm -A -t 192.168.10.101:80 -s rr -p 1800
[root@mail ~]# ipvsadm -A -t 192.168.10.101:22 -s rr -p 1800
[root@mail ~]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.200 -g
[root@mail ~]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.201 -g
[root@mail ~]# ipvsadm -a -t 192.168.10.101:22 -r 192.168.10.201 -g
[root@mail ~]# ipvsadm -a -t 192.168.10.101:22 -r 192.168.10.200 �Cg
测试
可以看出http的交给192.168.10.201
Ssh到192.168.10.101 可以看出ssh都交给了192.168.10.200
[root@localhost ~]# vim /etc/pki/tls/openssl.cnf
[root@localhost ~]# cd /etc/pki/CA/
[root@localhost CA]# mkdir crl certs newcerts
[root@localhost CA]# ll
total 20
drwxr-xr-x 2 root root 4096 Oct 11 21:07 certs
drwxr-xr-x 2 root root 4096 Oct 11 21:07 crl
drwxr-xr-x 2 root root 4096 Oct 11 21:07 newcerts
drwx------ 2 root root 4096 Jun 30 2009 private
[root@localhost CA]# touch serial index.txt
[root@localhost CA]# echo "01">serial
[root@localhost CA]# openssl genrsa 1024 >private/cakey.pem
[root@localhost CA]# chmod 600 private/cakey.pem
[root@localhost CA]# openssl req -new -key private/cakey.pem -x509 -days 3650 -out cacert.pem
[root@localhost CA]# mkdir -pv /etc/httpd/certs
mkdir: created directory `/etc/httpd/certs'
[root@localhost CA]# cd /etc/httpd/certs/
[root@localhost certs]# openssl genrsa 1024 >httpd.key
[root@localhost certs]# openssl req -new -key httpd.key -out httpd.csr
[root@localhost certs]# openssl ca -in httpd.csr -out httpd.cert
[root@localhost certs]# yum install -y mod_ssl
[root@localhost certs]# vim /etc/httpd/conf.d/ssl.conf
[root@mail CA]# mkdir certs newcerts crl
[root@mail CA]# touch serial index.txt
[root@mail CA]# scp 192.168.10.200:/etc/pki/tls/openssl.cnf /etc/pki/tls/
[root@mail CA]# scp 192.168.10.200:/etc/pki/CA/serial /etc/pki/CA/
[root@mail CA]# scp 192.168.10.200:/etc/yum.repos.d/rhel-debuginfo.repo /etc/yum.repos.d/
[root@mail CA]# mount /dev/cdrom /mnt/cdrom/
[root@mail CA]# yum install -y mod_ssl
[root@mail CA]# scp 192.168.10.200:/etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/
[root@mail CA]# mkdir -pv /etc/httpd/certs
[root@mail CA]# scp 192.168.10.200:/etc/httpd/certs/* /etc/httpd/certs/
[root@mail CA]# scp 192.168.10.200:/etc/pki/CA/cacert.pem /etc/pki/CA/
[root@mail CA]# scp 192.168.10.200:/etc/pki/CA/private/cakey.pem /etc/pki/CA/private/
[root@mail pki]# ipvsadm �CC
[root@mail pki]# iptables -t mangle -A PREROUTING -p tcp --dport 80 -d 192.168.10.101 -j MARK --set-mark 10
[root@mail pki]# iptables -t mangle -A PREROUTING -p tcp --dport 443 -d 192.168.10.101 -j MARK --set-mark 10
查看mangle表格
[root@mail pki]# service iptables save #保存规则
[root@mail pki]# ipvsadm -A -f 10 -s rr -p 1800
[root@mail pki]# ipvsadm -a -f 10 -r 192.168.10.200
[root@mail pki]# ipvsadm -a -f 10 -r 192.168.10.201
规则显示
测试