3.linux负载均衡lvs+Keepalived实现高可用配置案例

时间:2022-04-07 03:03:54

部署环境说明:
2个DR服务器做高可用,IP地址分别是192.168.100.24/24和192.168.100.25/24,VIP地址是192.168.100.30/32,配置在ens33接口上
2个RS服务器提供http服务,IP地址分别是192.168.100.26/24和192.168.100.27/24

实现效果:
1、DR任意挂掉一个,VIP地址漂移到另一个DR服务器上继续提供服务
2、RS任意挂掉一个,在DR的ipvsadm条目上会自动减少这个条目
3、RS再次上线后,在DR的ipvsadm条目上会自动增加这个条目
4、当2个RS都挂掉后,主DR提供一个错误页面,我这里直接用nginx的404页面作为错误页面的index.html

操作步骤:
1、RS的配置都是一样的,指令我就写在下面
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.ens33.arp_announce=2
net.ipv4.conf.ens33.arp_ignore=1
ifconfig lo:0 192.168.100.30/32 broadcast 192.168.100.30
route add -host 192.168.100.30 dev lo:0

2、DR的配置几乎也是一样的,为什么说几乎,只是Keepalived.conf中的细微差别,一个配置主MASTER,优先级Priority 101,另一个DR是备BACKUP,Priority 100
首先安装软件:yum -y install nginx keepalive ipvsadm
ipvsadm不需要配置,安装好了就行,nginx把/usr/share/nginx/html/404.html改成index.html以提供2个RS都挂了后的错误提醒页面,你可以照自己的需求整,不存在的。然后启动nginx。
最后,也是最关键的是配置keepalived.conf了,这个配置文件在/etc/keepalived/keepalived.conf处,我贴一个keepalived.conf的出来,把另一个不同的地方单独标记一下,以减少篇幅,我反正是测试通过了的哦

欢迎加入技术群70539804

 1 global_defs {
 2    notification_email {
 3      root@localhost
 4    }
 5    notification_email_from keepalived@localhost
 6    smtp_server 127.0.0.1
 7    smtp_connect_timeout 30
 8    router_id LVS_DEVEL
 9 }
10 
11 vrrp_instance VI_1 {
12     state MASTER ###这个DR设置成主的,所以写的MASTER,另一个DR就必须写BACKUP,一山不容二虎 13     interface ens33
14     virtual_router_id 51
15     priority 101 ###这个101在另一个DR上改成100,实际上0-255都行,保证2个值不一样就行
16     advert_int 1
17     authentication {
18         auth_type PASS
19         auth_pass 1111
20     }
21     virtual_ipaddress {
22         192.168.100.30/32 brd 192.168.100.30 dev ens33
23     }
24 }
25 
#这下面是定义2个RS的地址,其实就是VIP的地址对应的RS的地址 26 virtual_server 192.168.100.30 80 { 27 delay_loop 6 28 lb_algo rr 29 lb_kind DR 30 net_mask 255.255.255.255 31 protocol TCP 32 sorry_server 127.0.0.1 80 33 real_server 192.168.100.26 80 { 34 weight 1 35 HTTP_GET { 36 url { 37 path / 38 status_code 200 39 } 40 connect_timeout 3 41 nb_get_retry 3 42 delay_before_retry 3 43 } 44 } 45 real_server 192.168.100.27 80 { 46 weight 1 47 HTTP_GET { 48 url { 49 path / 50 status_code 200 51 } 52 connect_timeout 3 53 nb_get_retry 3 54 delay_before_retry 3 55 } 56 } 57 }