设为首页 收藏本站
查看: 777|回复: 0

[经验分享] lvs(DR)+keepalived做一个小的负载均衡+高可用

[复制链接]

尚未签到

发表于 2018-12-30 09:08:20 | 显示全部楼层 |阅读模式
  我用前端两台服务器做一个lvs+keepalived访问到后端的两台nginx服务器,做一个简单的小测试,这里就不用ipvsadm,直接在keepalived里面配置lvs;首先简单介绍一下lvs-DR模式的工作情况吧,客户端访问到lvs,lvs会根据后端的负载情况,更改目标mac,然后直接发给一台后端服务器,后端服务器接到后会根据本地的route表将包发出去,直接以vip为source发送给客户端,而不经过lvs,所以DR要在本地配置一个vip并将该vip作为广播地址,然后将出口指向这个vip所在接口。

  lvs01:    192.168.40.10
lvs02:    192.168.40.11
nginx01:192.168.40.12
nginx02:192.168.40.13
vip:         192.168.40.100
  首先所有的服务器都开启路由转发功能:

[root@lvs01 ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
  把前端两台安装keepalived。

[root@lvs01 ~]# yum install -y keepalived
[root@lvs02 ~]# yum install -y keepalived
  后端的两台nginx服务器做一个简单的处理,就把nginx服务开起来,确保网页能被访问到。
接下来直接配置keepalived文件。
1、备份keepalived配置文件:

[root@lvs01 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@lvs02 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
  2、修改keepalived配置文件:

[root@lvs01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
sysadmin@firewall.loc
}
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.40.100
}
}
virtual_server 192.168.40.100 80 {
delay_loop 3
lb_algo rr                  ##使用rr算法
lb_kind DR               ##使用DR模式
protocol TCP
real_server 192.168.40.12 80 {
weight 1
HTTP_GET {                  ##设置后端服务器的健康检查
url {
path /
status_code 200            ##检查返回值  
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
real_server 192.168.40.13 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}
  这里要注意的就是健康检查的方式,有多种检查方式,其中我用的是检查网页返回状态码,相应的健康检查要对应检查的内容,否则会容易出错。
3、做好配置文件后将它scp到另一台lvs,也就是备份,然后要把备份的配置文件内容改一下:

state BACKUP             ##状态设置为backup
interface ens33
virtual_router_id 51
priority 90                ##优先等级比master低
  4、启动keepalived,查看vip。

[root@lvs01 ~]# ip addr sh ens33
2: ens33:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:49:e5:44 brd ff:ff:ff:ff:ff:ff
inet 192.168.40.10/24 brd 192.168.40.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.40.100/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe49:e544/64 scope link
valid_lft forever preferred_lft forever
  现在第一台lvs也就是master拥有了vip。
5、把后端的两台web服务器配置一下,可以直接写一个快速配置的脚本:

[root@nginx02 ~]# cat 2.sh
#!/bin/bash
Vip1=192.168.40.100
source /etc/rc.d/init.d/functions
case $1 in
start)
echo "config vip route arp" > /tmp/lvs1.txt
/sbin/ifconfig lo:0 $Vip1 broadcast $Vip1 netmask 255.255.255.255 up
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
route add -host $Vip1 dev lo:0
;;
stop)
echo "deletevip route arp" > /tmp/lvs2.txt
/sbin/ifconfig lo:0 down
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
route del -host $Vip1 dev lo:0
;;
*)
echo"Usage: $0 (start | stop)"
exit 1
esac
  两台后端服务器运行这个脚本:
[root@nginx02 ~]# bash 2.sh start
这里执行start会给本地lo添加一个vip,将禁止arp广播回应,添加一个路由出口指向lo口。

[root@nginx02 ~]# ip addr sh lo
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.40.100/32 brd 192.168.40.100 scope global lo:0
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
[root@nginx02 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.40.2    0.0.0.0         UG    100    0        0 ens33
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens37
192.168.40.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.40.100  0.0.0.0         255.255.255.255 UH    0      0        0 lo
  然后直接开另一台访问一下:

[root@centos ~]# curl http://192.168.40.100
nginx01
[root@centos ~]# curl http://192.168.40.100
nginx02
[root@centos ~]# curl http://192.168.40.100
nginx01
[root@centos ~]# curl http://192.168.40.100
nginx02
  6、如果停止主的keepalived,那么vip会飘到备份上面。

[root@lvs01 ~]# systemctl stop keepalived
[root@lvs02 ~]# ip addr sh ens33
2: ens33:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:38:e6:4e brd ff:ff:ff:ff:ff:ff
inet 192.168.40.11/24 brd 192.168.40.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.40.100/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe38:e64e/64 scope link
valid_lft forever preferred_lft forever
  这时候我将主的服务再次开启那么他会抢占vip,这样可能会导致数据的丢失:

[root@lvs01 ~]# systemctl start keepalived
[root@lvs01 ~]# ip addr sh ens33
2: ens33:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:49:e5:44 brd ff:ff:ff:ff:ff:ff
inet 192.168.40.10/24 brd 192.168.40.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.40.100/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe49:e544/64 scope link
valid_lft forever preferred_lft foreve
  7、设置不抢占模式:

vrrp_instance VI_1 {
state BACKUP              ##设置两台keepalived都为backup或者是master
nopreempt                     ##只需要在主备的配置文件都添加,就不会抢占资源。
interface ens33
virtual_router_id 51
priority 100
  然后重启keepalived。这样就可以了。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657439-1-1.html 上篇帖子: Keepalived 实现MySQL双主HA 下篇帖子: RHEL6搭建 keepalived (HA) 任意单故障节点的高可用集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表