企业系统LVS集群(四)-----LVS(DR)模式+KeepAlive(HA高可用)实现高可用集群

####lvs####
#1.开3台虚拟机,在调度器上配置好yum源,这里是server1,在另外两台rs上安装httpd
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.0.250/rhel6.5/x86_64/dvd/LoadBalancer
gpgcheck=0

#2.安装ipvsadm,编写调度策略
yum install -y ipvsadm

ipvsadm -l ##查看策略,size=4096()

lsmod ##查看内核模块
lsmod |grep ip_vs
ip_vs 125220 0

######DR模式######

#3.添加策略
ipvsadm -A -t 172.25.0.100:80 -s rr ##调度策略,rr轮询,ipvsadm --help看到,共10种调度算法
ipvsadm -a -t 172.25.0.100:80 -r 172.25.0.2:80 -g ##后端两个rs
ipvsadm -a -t 172.25.0.100:80 -r 172.25.0.3:80 -g

ipvsadm -l 查看策略
/etc/init.d/ipvsadm save ##保存策略

给调度器添加vip:
ip addr add 172.25.0.100/24 dev eth0

然后在物理机上测试访问,发现不能返回结果,但是ipvsadm -l可以看到调度是成功的
所以需要给rs上也添加vip

‘因为数据的走向是 client -> vs -> rs -> client’

server2和server3上:
ip addr add 172.25.0.100/32 dev eth0 ##子网掩码为32是因为这个ip不对外,只有自己用

再次测试,成功调度

#在物理机上,arp -an | grep 100 , 可以看到默认缓存的是server1的mac地址
#用arp -d 172.25.0.100清除缓存,再次访问时,可能就不轮询,因为可能缓存了某台rs的mac地址
#这样对rs来说不安全,因为直接访问到了后端rs
#访问量过大可能会宕机

##解决方法1:
##添加arptable策略解决##
arptables是用户空间工具,用来管理 linux内核中的ARP规则表.这些规则用来
检查ARP帧.arptables类似于iptables,但没有那么复杂.iptables工作于ip层,
用于对ip包进行管理.arptables工作与arp协议层,用于对arp数据帧进行管理.
arptables可以像iptables那样对arp数据帧进行各种规则设置,可以ACCEPT,
DROP等
在两台rs(server2和server3)上安装arptables:
yum install -y arptables_jf

arptables -L ##查看策略

arptables -A IN -d 172.25.0.100 -j DROP ##添加策略,让目的地址为172.25.0.100的访问不能到达rs
-d, --destination [!] address[/mask]目的地址
-j, --jump target跳到目标

arptables -A OUT -s 172.25.0.100 -j mangle --mangle-ip-s 172.25.0.2 ##让返回的数据来自server2

/etc/init.d/arptables_jf save ##保存策略

‘正常访问’

##解决方法2:
##配置内核参数
##arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作。这两个参数很重要,特别是在LVS的DR场景下,它们的配置直接影响到DR转发是否正

arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应
1:只响应目的IP地址为接收网卡上的本地地址的arp请求
arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址
2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

sysctl -p

######隧道模式######
#在server1上
1.ipvsadm -C ##清除之前的规则

2.modprobe ipip ##添加隧道使用的模块

ip addr del 172.25.0.100/24 dev eth0
ip addr add 172.25.0.100/24 dev tunl0
ip link set up tunl0 ##删除原来网卡上的vip,添加到tunl0上,并激活

ipvsadm -A -t 172.25.0.100:80 -s rr
ipvsadm -a -t 172.25.0.100:80 -r 172.25.0.2:80 -i
ipvsadm -a -t 172.25.0.100:80 -r 172.25.0.3:80 -i ##添加隧道规则

#在server2和server3(rs)上
modprobe ipip ##添加tunl模块

ip addr del 172.25.0.100/32 dev eth0

ip addr add 172.25.0.100/32 dev tunl0 ##添加vip到tunl上

ip link set up tunl0 ##激活tunl0

sysctl -a | grep rp_filter ##查看反向过滤规则
sysctl -w net.ipv4.conf.default.rp_filter = 0
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.lo.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.tunl0.rp_filter=0 ##关闭反向过滤(如果开启,会对流入的数据包的反向路径进行校验,如果不符合要求,就 丢弃,设置为0则不进行校验)

sysctl -p ##使生效

‘NAT模式最简单,留为作业’

####配置ldirectord####
‘当前lvs配置,没有对后端的健康检查,停掉一台rs的httpd,会出现connection refused,怎么解决? --> ldirectord’

#先在调度器和rs上清除之前配置的隧道规则,去掉ipip模块,重新配置为DR模式

1.首先给调度器(server1)添加高可用yum源
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.0.250/rhel6.5/x86_64/dvd/HighAvailability
gpgcheck=0

#rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm 查看配置文件路径

2.复制配置文件并配置
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d

vim /etc/ha.d/ldirectord.cf

virtual=172.25.0.100:80
real=172.25.0.2:80 gate ##两个后端rs
real=172.25.0.3:80 gate
fallback=127.0.0.1:80 gate ##两个rs都挂了,就访问调度器自己的80端口
service=http
scheduler=rr ##轮询算法
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request=“index.html”
#receive=“Test Page”
#virtualhost=www.x.y.z

/etc/init.d/ldirectord start ##启动

3.测试
在物理机上访问 curl 172.25.0.100, 看到轮询,关闭一台rs的http服务
访问不会报错,只会访问一台rs,并且会将down掉的rs从ipvsadm策略里去除
再次开启http,又会加入到ipvsadm策略里,访问又变成轮询

##########配置keepalived##########
‘这个时候实现了故障排除,也就是健康检查’
‘但是如果调度器宕机,整个集群就无法访问,所以需要高可用’

#再开一台虚拟机,用来做高可用,配置好yum源

1.源码编译keepalived

tar zxf keepalived-2.0.6.tar.gz
yum install openssl-devel -y
yum install libnl -y
yum install libnl-devel -y
yum install libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm -y
make && make install
./configure --help ##可以看到–with-init=(upstart|systemd|SYSV|SUSE|openrc)specify init type,systemd为rhel7版本

./configure --with-init=SYSV ##编译前安装gcc,openssl-devel
./configure --prefix=/usr/local/keepalived --with-init=SYSV
#编译完成后看到下面选项为yes,表示成功
Use IPVS Framework : Yes

make && make install

2.把编译好的目录scp到server4

3.配置启动脚本及配置文件 #调度器(server1和server4)都做
chmod +x /usr/local/keepalived/etc/rc.d/init.d/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/

4.配置keepalived

#先关闭ldirectord,因为keepalived也有健康检查
#/etc/init.d/ldirectord stop
#chkconfig ldirectord off

1)先删除调度节点(server1,server4)上的vip,因为keepalived会自己加上

ip addr del 172.25.0.100/24 dev eth0

2)编辑server1(主节点)的keepalived配置文件
global_defs {
notification_email {
root@localhost ##节点宕机给谁发送邮件
}
notification_email_from keepalived@localhost ##发送人名称
smtp_server 127.0.0.1 ##发送服务器(本机)
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict ##注释掉,不然会有问题
vrrp_garp_interval 0
vrrp_gna_interval 0
}

vrrp_instance VI_1 {
state MASTER ##主节点
interface eth0
virtual_router_id 51 ##做实验时候,让学生修改此ID,每个人的都不能一样,不然会出问题
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.0.100 ##VIP
}
}

virtual_server 172.25.0.100 80 {
delay_loop 3 ##当rs报错时,尝试多少次之后才邮件告知
lb_algo rr
lb_kind DR ##DR模式
#persistence_timeout 50
protocol TCP

real_server 172.25.0.2 80 {
TCP_CHECK {
    weight 1
        connect_timeout 3
        retry 3
        delay_before_retry 3
    }
}
real_server 172.25.0.3 80 {
TCP_CHECK {
    weight 1
        connect_timeout 3
        retry 3
        delay_before_retry 3
    }
}

}

yum install mailx -y
3)编辑备节点(server4)的配置文件
state BACKUP
priority 50 ##修改这两个选项

4)启动keepalived
/etc/init.d/keepalived start

5)测试
在物理机上访问:curl 172.25.0.100
可以看到轮询

在server1上查看日志:
vim /var/log/messages
Dec 8 16:44:15 server1 Keepalived_vrrp[7656]: (VI_1) Entering MASTER STATE
Dec 8 16:44:15 server1 Keepalived_vrrp[7656]: (VI_1) setting VIPs.

在server4上查看日志:
vim /var/log/messages
Dec 8 16:50:26 server4 Keepalived_vrrp[1090]: (VI_1) removing VIPs.
Dec 8 16:50:26 server4 Keepalived_vrrp[1090]: (VI_1) Entering BACKUP STATE (init)

关闭一台rs的http服务,再次在物理机上访问(可能稍有延迟),也不会报错
ipvsadm策略里也会把down掉的那台rs自动剔除
#vim /var/log/messages 可以看到,server2在down掉后,调度器会检测三次,三次都失败就会剔除
#也就是配置文件中delay_loop 3的作用

mail可以看到会有邮件告知哪台的down了 #(没有mail命令的话,yum install -y mailx)

#测试VIP漂移
down掉server(主节点)的keepalived服务
可以看到VIP会自动去掉,然后会漂移到server4上
服务正常访问,看日志可以看到VIP和主备切换的信息

server1再次开启keepalived,会自动接管VIP,并进入MASTER状态

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值