lvs配置(DR)
在server1:
首先,重新配置yum源
vim /etc/yum.repos.d/rhel-source.repo
添加一个虚拟ip
ip addr add 172.25.70.100/24 dev eth0
ip addr ###查看是否添加
yum install ipvsadm -y
ipvsadm -ln ##列出ipvsadm策略
ipvsadm -A -t 172.25.70.100:80 -s rr ##添加策略 指定vip 172.25.66.100:80,-t指tcp,-s rr 指定轮询
ipvsadm -a -t 172.25.70.100:80 -r 172.25.70.2:80 -g
##将虚拟ip映射到真实的ip,-r指定realserver -t指定tcp协议 -g指dr模式
ipvsadm -a -t 172.25.70.100:80 -r 172.25.70.3:80 -g
ipvsadm -ln
/etc/init.d/ipvsadm save ##保存,关机再开机后还存在
在server2中
ip addr add 172.25.70.100/24 dev eth0
ip addr
为防止客户端在访问vip时直接访问到realserver,在realserver设置一定的策略
yum install arptables_jf -y
/etc/init.d/httpd start
arptables -nL
arptables -A IN -d 172.25.70.100 -j DROP ##访问realserver的100ip时的请求直接丢弃
arptables -A OUT -s 172.25.70.100 -j mangle --mangle-ip-s 172.25.70.2 #realserver发出的信息全部转为他的真实ip
arptables -nL
/etc/init.d/arptables_jf save
在server3中
ip addr add 172.25.70.100/24 dev eth0
ip addr
yum install arptables_jf -y
arptables -nL
arptables -A IN -d 172.25.70.100 -j DROP
arptables -A OUT -s 172.25.70.100 -j mangle --mangle-ip-s 172.25.70.3
arptables -nL
/etc/init.d/arptables_jf save
在真机中测试:对比mac地址可查看这个100的资源时来自调度器server1,而不是realserver
上面的操作无法实现健康检查;我们通过ldiretord服务实现
Ldirector是一个监控集群服务节点运行状态的插件。Ldirector如果监控到集群节点中某个服务出现故障,就屏蔽此节点的对外连接功能,同时将后续请求转移到正常的节点提供服务。这个插件经常用在LVS负载均衡集群中。
lvs是一个四层负载均衡,是在内核层面,分为netfilter+ipvs和ipvsadm(用户层面的使用工具)
LVS负载均衡:四种负载均衡模式:DR,TUN(ip隧道),NAT,fullNAT,这里我们介绍DR模式
DR模式工作在链路层,采用了arp协议,rs表示realserver,vs表示vitrualserver,假设client的ip为cip,mac地址为m1,调度器vs的ip为vip,mac地址为m2,后端服务器的ip为rip,mac地址为m3,由于DR模式工作在数据链路层,没有经过路由器,所以vs和rs必须在同一个网段,当client访问vip时,在DR模式下,vs通过它本身的一些算法m2改为m3,这样就可以实现直接将数据包丢给rs(这里rs上必须有vip,因为客户端访问的时vip),rs通过解封,得到了vip,通过与自己vip匹配判断数据包确实是给自己的,rs在通过封装,直接将数据发给client,数据包不用原路返回)。由于vs和rs上都有vip,会有冲突,因此这里我们应用arptables协议,在rs上添加策略,控制数据传输
在server1中:
yum install ldirectord-3.9.5-3.1.x86_64.rpm
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
cd /etc/ha.d/
ls
vim ldirectord.cf
/etc/init.d/ipvsadm stop
/etc/init.d/ldirectord start
ipvsadm -ln
vim /etc/httpd/conf/httpd.conf ####将httpd端口改为80
/etc/init.d/httpd restart
ipvsadm -ln
cd /var/www/html/
vim index.html
写入:server1--正在维护中
在真机中测试,当server2和server3都没有启动时,server1会顶上
一旦有任何一台realsever开着,server1都不会工作的
当两台realserver都关着时:
当server3开启时:
2.keeplived
keepalived在这里主要做realserver健康检查以及loadbalance主机和backup主机之间failover的实现。
keepalived是一个基于VRRP协议来实现WEB服务高可用方案,可以用来避免单点故障,一个web服务器至少有两台服务器运行keepalived,一台主服务器(MASTER),一台备用服务器(BACKUP),但是对外只表现一个vip,主服务器会发送特定消息给备用服务器,当备用服务器收到消息时,备用服务器就会接管ipswich,继续提供服务,从而保证了高可用性。
通过keepalived实现健康检查和高可用
在server1中:
1)网上找到keepalived安装包
tar zxf keepalived-2.0.6.tar.gz ###解压
ls
cd keepalived-2.0.6
ls
./configure --prefix=/usr/local/keepalived --with-init=SYSV ###编译
yum search OpenSSL ###解决依赖性,安装其所需软件
yum install openssl-devel.x86_64 -y
./configure --prefix=/usr/local/keepalived --with-init=SYSV
make
make install ###安装
cd /usr/local/keepalived ###下面为做软链接
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived ###给文件执行的权限
/etc/init.d/keepalived start
/etc/init.d/keepalived stop
打开和关闭都显示ok的话,证明安装成功
vim /etc/keepalived/keepalived.conf ##编辑配置文件
global_defs {
notification_email {
root@localhost ##设置报警邮件地址,如果要开启邮件报警,要开启本机的sendmail服务
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict ###一定要注释,不然它会自动给server1上防火墙加一条策略,导致实验不能进行
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER ##指定keepalived的角色,MASTER表示此主机为主服务器,若为BACKUP则表示备用服务器
interface eth0 ##指定HA检测网络的接口
virtual_router_id 70 ##虚拟路由标识,MASTER和BACKUP的必须相同
priority 100 ##定义优先级,数字越大优先级越高,因此MASTER的必须年比BACKUP的数字大,否则就会有冲突
advert_int 1 ##设定MASTER和BACKUP负载均衡之间同步检查的时间间隔,单位为秒
authentication {
auth_type PASS ##设定验证类型和密码
auth_pass 1111
}
virtual_ipaddress {
172.25.70.100 ##指定虚拟ip
}
}
virtual_server 172.25.70.100 80 { ##设定虚拟服务器ip地址及端口,两者以空格隔开
delay_loop 3 ##设置运行情况检查时间,单位为秒
lb_algo rr ##设置负载均衡算法,这里设置为rr算法,即轮询算法
lb_kind DR ##设置lvs实现负载均衡机制,有NAT,TUN,DR三种模式
#persistence_timeout 50 ###注释掉
protocol TCP
real_server 172.25.70.2 80 { ##配置realserver,需要指定真实ip与其端口,用空格隔开
weight 1 ##配置服务节点的权重值
TCP_CHECK { ##realserver检查状态设置部分
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 172.25.70.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
cat /var/log/messages ###看见有master,和send证明配置没问题
cd /usr/local/
scp -r keepalived/ server4:/usr/local/ ###将配置好的文件发给server4
在server4中:
cd /usr/local/
ls
cd keepalived/
pwd
ls ####同server1一样做4次软链接
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
vim /etc/keepalived/keepalived.conf ##编辑配置文件,只需要更改如下部分
vrrp_instance VI_1 {
state BACKUP ##状态写为backup
interface eth0
virtual_router_id 70
priority 50 ###将优先级修改到比master低
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.70.100
}
}
再去真机中测试,keepalived的好处就是会自动判断realserver的状态,并且及时更新
keepalived作用下,如果两台realserver都不工作,它不会顶上,会报错