LVS集群从客户端上看可以将整个集群看成单个服务器对外提供服务,其IP是集群内部的VIP(虚拟IP)。从内部看,转发服务器(DS)其实并没有启动应用层的服务对接口进行监听,那它是怎么发挥作用的呢?这就是LVS属于内核模块的意思了,因为这个模块是在内核编译的时候就有了,所以只要你的Linux启动了就自然有这项功能了。
而下面讲的给DS配置虚拟IP网络接口的时候,其实对于DS来说只是普通的一张网卡对应出多一个网络接口罢了。
那么特殊的地方在哪里呢?特殊的地方就在于LVS模块是通过ipvsadm这个程序来配置和启用的,所以其实要了解LVS最重要的就是ipvsadm这个命令。
内部网络从Director到RealServer的转发过程并没有改变请求的目标IP(虚拟IP),而是改变了请求包的MAC地址,当到达RealServer之后,才对请求进行响应,并以VIP作为IP包头发送响应,这就是为什么整个内部路由网络必须内部网络进行连接,因为通过外网连接的话一定会涉及IP的变化)。整个过程中Director相当于一个路由器,没有改变源IP和目标IP,自然RS响应客户端请求的时候也不会违反TCP/IP协议。
??概念
???VIP:虚拟IP
???DIP:转发服务器IP
?(1)查看网卡信息: ifconfig
?(2)新增一个网络接口,配置IP为VIP:ifconfig eth0:1 192.168.150.200 netmask 255.255.255.0
??注意:此处是临时增加一个网络接口,重启后就会失效,如果要持久建立网络接口,可以在/etc/sysconfig/network-scripts/目录下新增网络接口的配置文件
?(1)修改内核参数:echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
??????
???注:/proc文件夹放的是内核映射文件,是内核启动之后存放信息的地方
????? 内核参数:
??????arp_ignore: 定义接收到ARP请求时的响应级别;
????????0:只要本地配置的有相应地址,就给予响应;
???????? 1:仅在请求的目标(MAC)地址配置请求到达的接口上的时候,才给予响应;
??????arp_announce:定义将自己地址向外通告时的通告级别;
???????? 0:将本地任何接口上的任何地址向外通告;
????????1:试图仅向目标网络通告与其网络匹配的地址;
???????? 2:仅向与本地接口上(MAC)地址匹配的网络进行通告;
?(2)新增隐藏的网络接口:ifconfig lo:1 192.168.150.200 netmask 255.255.255.255 broadcast 192.168.150.200 (此处子网掩码和广播IP是专门设置使其无法正确识别的)
?(3)添加网络接口到路由表:route add -host 192.168.150.200 dev lo:1
?(4)配置hosts文件:在 /etc/hosts文件下新增下列IP域名映射(此步骤不是必须的,只是为了方便主机之间操作)
?????192.168.150.128 node1
?????192.168.150.129 node2
?????192.168.150.130 node3
?????192.168.150.131 node4
?????并复制到其它主机:scp /etc/hosts root@node1:/etc/hosts
?(5)修改httpd服务器的主页vi /var/www/html/index.html 随便写点什么(注意这是新增的文件,原本这个文件夹是空的)
?(6)启动httpd服务监听:service httpd restart
?(1)ipvsadm的安装:yum -y install ipvsadm
?(2)配置集群服务:
?????ipvsadm -A -t 192.168.150.200:80 -s wlc
?????ipvsadm -a -t 192.168.150.200:80 -r 192.168.150.130 -g -w 1
?????ipvsadm -a -t 192.168.150.200:80 -r 192.168.150.131 -g -w 1
?(3)查询集群的配置列表:ipvsadm -Ln,应当显示以下内容
?????
?????说明配置成功。
??(4)ipvsadm的部分选项和参数说明
?????1)管理集群服务中的DS
??????? 添加:ipvsadm -A -t|u|f service-address [-s scheduler]
???????????? -t: TCP协议的集群
-u: UDP协议的集群
service-address: IP:PORT
-f: FWM: 防火墙标记
service-address: Mark Number
?????????修改:ipvsadm -E
?????????删除:ipvsadm -D -t|u|f service-address
??????? 举例: ipvsadm -A -t 172.16.100.1:80 -s rr
?????????其中-s的后面的调度算法有rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接)等,默认wlc
?????2)管理集群服务中的RS
?????添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
???????? -t|u|f service-address:事先定义好的某集群服务
???????? -r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;
???????? [-g|i|m]: LVS类型
?????????? -g: DR
?????????? -i: TUN
?????????? -m: NAT
???????? [-w weight]: 定义服务器权重
????修改:-e
????删除:-d -t|u|f service-address -r server-address
????# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 –g
????# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -g
?????查看
?????? -L|l
????? -n: 数字格式显示主机地址和端口
????? --stats:统计数据
????? --rate: 速率
????? --timeout: 显示tcp、tcpfin和udp的会话超时时长
????? -c: 显示当前的ipvs连接状况
????删除所有集群服务
?????? -C:清空ipvs规则
???? 保存规则
?????? -S
?????? # ipvsadm -S > /path/to/somefile
????载入此前的规则:
?????? -R
?????? # ipvsadm -R < /path/form/somefile
?(1)从浏览器访问VIP:192.168.150.200应该能够正常访问
原理:与nginx+keepalived实现高可用类似,转发服务器分两台,一台主机一台备机,只要配置主备机的keepalived配置文件,即可实现两台机器通过vrrp协议进行通信和监控其在线状态。keepalived有专门针对LVS的RS健康检查模块,实时监控RS的工作状态。
步骤一:主机和备机安装keepalived
????yum -y install keepalived
步骤二:修改主备机的keepalived配置文件
????# vi /etc/keepalived/keepalived.conf
????(主机和备机配置文件基本一致,只有状态state和优先级priority的区别。设置的具体内容可以通过man keepalived.conf查看帮助手册)
????主机配置
??????! Configuration File for keepalived
??????global_defs {
????????notification_email {
????????root@localhost #发送提醒邮件的目标地址可有多个
????????goldbin@126.com
????????}
????????notification_email_from test@localhost #发送邮件的from地址,可以随意写,邮件地址不存在都无所谓
????????smtp_server 127.0.0.1 #邮件服务的地址,一般写本地
????????smtp_connect_timeout 30
????????router_id LVS_DEVEL
??????}
??????vrrp_instance VI_1 {
????????state MASTER | BACKUP # MASTER 主 和 从
????????interface eth0 #VIP需要绑定的网卡名称
????????virtual_router_id 51
????????priority 101 | 50 #优先级 主的优先级要高,主备之间相差应超过50
????????advert_int 1
????????authentication {
??????????auth_type PASS
??????????auth_pass 1111
????????}
????????virtual_ipaddress {
??????????192.168.150.200/24 dev eth0 label eth0:1 #设置VIP
????????}
??????}
??????virtual_server 192.168.150.200 80 { #设置虚拟lvs服务,VIP PORT
????????delay_loop 6
????????lb_algo rr #调度算法wrr
????????lb_kind DR #lvs的模式
????????nat_mask 255.255.255.0
????????persistence_timeout 50 #同一个IP地址在50秒内lvs转发给同一个后端服务器
????????protocol TCP
????????real_server 192.168.150.130 80 { #设置真实服务器的心跳机制 RID PORT
??????????weight 1#权重
??????????HTTP_GET { #心跳检测的方式
????????????url {
??????????????path / #心跳检查的地址
??????????????status_code 200 #心跳检查返回的状态
????????????}
????????????connect_timeout 2 #超时时间
????????????nb_get_retry 3 #重复检查3次
????????????delay_before_retry 1 #每隔1秒钟再次检查
???????? }
??????? }
????????real_server 192.168.150.131 80 { #第二个真实服务器设置
??????????weight 1
????????HTTP_GET {
??? ??????url {
??????????????path /
??????????????status_code 200
?????????}
?????????connect_timeout 2
????????????nb_get_retry 3
????????????delay_before_retry 1
????????}
???????}
??????}
说明:配置好keepalived并启动keepalived之后,服务会自动在主DS上创建VIP的网络接口,以及通过ipvsadm设置相应的集群信息,所以在进行高可用设置的时候,不需要进行像单个LVS那样的设置。
原文:http://www.cnblogs.com/zhangjpn/p/6472430.html