Linux利用keepalived实现lvs的高可用性的操作方法

吾爱主题 阅读:102 2024-04-05 13:54:51 评论:0

lvs+keepalived是什么?

keepalived工作原理

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。 keepalived是以vrrp协议为实现基础的,vrrp全称virtual router redundancy protocol,即虚拟路由冗余协议。 虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将n台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据vrrp的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

 lvs简介

lvs是linux virtual server的简写,意即linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种ip负载均衡技术(vs/nat、vs/tun和vs/dr),十种调度算法。

本文重点给大家介绍linux利用keepalived实现lvs的高可用性的操作方法,感兴趣的朋友参考下吧。

单主模型ipvs示例

配置keepalive

高可用的ipvs集群示例:修改keepalived配置文件

修改主机:192.168.234.27的keepalived配置文件

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 [root@234c27 ~] # vim /etc/keepalived/keepalived.conf ! configuration file for keepalived global_defs { notification_email { root@localhost // 接受邮件地址 } notification_email_from keepalived@localhost // 发送邮件地址 smtp_server 127.0.0.1 // 发送邮件服务器ip smtp_connect_timeout 30 // 邮件连接超时时长 router_id kptwo // 路由 id vrrp _mcast_group4 234.10.10.10 // 指定vrrp协议的多播地址 } vrrp_instance vi_1 { //vrrp 协议的 state master //lvs 的master服务器 interface ens37 // virtual_router_id 50 // 虚拟路由 priority 100 // 权重为100.越大越先 advert_int 1 // 发送组博包的间隔 authentication { // 验证 auth_type pass // 方式为pass( 明文) auth_pass 1111 // 密码 } virtual_ipaddress { //keepalived 虚拟ip 10.0.0.100 /24 } } virtual_server 10.0.0.100 80 {   delay_loop 6 // 检查后端服务器的时间间隔   lb_algo wrr // 定义调度方法   lb_kind dr // 集群的类型   #persistence_timeout 50 //持久连接时长   protocol tcp // 服务协议,仅支持tcp   real_server 192.168.234.47 80 { // 后端real_server服务器地址    weight 1 // 权重    http_get { // 应用层检测     url {      path / // 定义要监控的url      status_code 200 // 判断上述检测机制为健康状态的响应码     }     connect_timeout 3 // 连接请求的超时时长     nb_get_retry 3 // 重试次数     delay_before_retry 3 // 重试之前的延迟时长    }   }   real_server 192.168.234.57 80 {    weight 2    http_get {     url {      path /      status_code 200     }     connect_timeout 3     nb_get_retry 3     delay_before_retry 3    }   } }

修改主机:192.168.234.37的keepalived配置文件

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 [root@234c37 ~] # vim /etc/keepalived/keepalived.conf ! configuration file for keepalived global_defs {   notification_email {    root@localhost   }   notification_email_from keepalived@localhost   smtp_server 127.0.0.1   smtp_connect_timeout 30   router_id kptwo   vrrp _mcast_group4 234.10.10.10 } vrrp_instance vi_1 {   state backup   interface ens37   virtual_router_id 50   priority 80   advert_int 1   authentication {    auth_type pass    auth_pass 1111   }   virtual_ipaddress {    10.0.0.100 /24   } } virtual_server 10.0.0.100 80 {   delay_loop 6   lb_algo wrr   lb_kind dr   #persistence_timeout 50   protocol tcp   sorry_server 127.0.0.1:80   real_server 192.168.234.47 80 {    weight 1    http_get {     url {      path /      status_code 200     }     connect_timeout 3     nb_get_retry 3     delay_before_retry 3    }   }   real_server 192.168.234.57 80 {    weight 2    http_get {     url {      path /      status_code 200     }     connect_timeout 3     nb_get_retry 3     delay_before_retry 3    }   } }

查看keepalived

?
1 2 3 4 5 6 7 8 9 10 [root@234c37 ~] # systemctl status keepalived ● keepalived.service - lvs and vrrp high availability monitor   loaded: loaded ( /usr/lib/systemd/system/keepalived .service; disabled; vendor preset: disabled)   active: inactive (dead) ………… [root@234c37 ~] # ipvsadm -ln ip virtual server version 1.2.1 (size=4096) prot localaddress:port scheduler flags   -> remoteaddress:port   forward weight activeconn inactconn // 暂无ipvsadm

启动服务

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@234c27 keepalived] # systemctl start keepalived.service [root@234c27 keepalived] # systemctl status keepalived.service ● keepalived.service - lvs and vrrp high availability monitor   loaded: loaded ( /usr/lib/systemd/system/keepalived .service; disabled; vendor preset: disabled)   active: active (running) since fri 2018-08-31 20:30:02 cst; 12s ago   process: 9657 execstart= /usr/sbin/keepalived $keepalived_options (code=exited, status=0 /success )   main pid: 9658 (keepalived) ……………… [root@234c27 keepalived] # ipvsadm -ln ip virtual server version 1.2.1 (size=4096) prot localaddress:port scheduler flags   -> remoteaddress:port   forward weight activeconn inactconn tcp 10.0.0.100:80 wrr   -> 192.168.234.47:80   route 1  0   0   -> 192.168.234.57:80   route 2  0   0 // 启动服务lvs vs已配置好

后端real_server准备

增加ip在网卡上 修改限制arp通告及应答级别 rs1 rs2都做,网关并指向路由

?
1 2 3 4 5 6 ip a a 10.0.0.100 /32 dev ens37 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce route add default gw 192.168.234.17

安装httpd服务 写好网页文件

启动服务

image

多主模型ipvs示例

配置keepalive

高可用的ipvs集群示例:修改keepalived配置文件

修改主机:192.168.234.27的keepalived配置文件

 

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 [root@234c27 keepalived] # vim /etc/keepalived/keepalived.conf global_defs {    notification_email {     root@localhost    }    notification_email_from keepalived@localhost    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id kpone    vrrp _mcast_group4 234.10.10.10 } vrrp_instance vi_1 {    state master    interface ens37    virtual_router_id 50    priority 100    advert_int 1    authentication {      auth_type pass      auth_pass 1111    }    virtual_ipaddress {      10.0.0.100 /24    } } vrrp_instance vi_2 {    state backup    interface ens37    virtual_router_id 51    priority 80    advert_int 1    authentication {      auth_type pass      auth_pass 2222    }    virtual_ipaddress {      10.0.0.200 /24    } } virtual_server 10.0.0.100 80 {    delay_loop 6    lb_algo wrr    lb_kind dr    #persistence_timeout 50    protocol tcp    #sorry_server 127.0.0.1:80    real_server 192.168.234.47 80 {      weight 1      http_get {        url {         path /         status_code 200        }        connect_timeout 3        nb_get_retry 3        delay_before_retry 3      }    } } virtual_server 10.0.0.200 80 {    delay_loop 6    lb_algo wrr    lb_kind dr    #persistence_timeout 50    protocol tcp    #sorry_server 127.0.0.1:80    real_server 192.168.234.57 80 {      weight 1      http_get {        url {         path /         status_code 200        }        connect_timeout 3        nb_get_retry 3        delay_before_retry 3      }    } }

修改主机:192.168.234.37的keepalived配置文件

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [root@234c37 ~] # vim /etc/keepalived/keepalived.conf ! configuration file for keepalived global_defs {    notification_email {     root@localhost    }    notification_email_from keepalived@localhost    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id kptwo    vrrp _mcast_group4 234.10.10.10 } vrrp_instance vi_1 {    state backup    interface ens37    virtual_router_id 50    priority 80    advert_int 1    authentication {      auth_type pass      auth_pass 1111    }    virtual_ipaddress {      10.0.0.100 /24    } } vrrp_instance vi_2 {    state master    interface ens37    virtual_router_id 51    priority 100    advert_int 1    authentication {      auth_type pass      auth_pass 2222    }    virtual_ipaddress {      10.0.0.200 /24    } } virtual_server 10.0.0.100 80 {    delay_loop 6    lb_algo wrr    lb_kind dr    #persistence_timeout 50    protocol tcp    #sorry_server 127.0.0.1:80    real_server 192.168.234.47 80 {      weight 1      http_get {        url {         path /         status_code 200        }        connect_timeout 3        nb_get_retry 3        delay_before_retry 3      }    } } virtual_server 10.0.0.200 80 {    delay_loop 6    lb_algo wrr    lb_kind dr    #persistence_timeout 50    protocol tcp    #sorry_server 127.0.0.1:80    real_server 192.168.234.57 80 {      weight 1      http_get {        url {         path /         status_code 200        }        connect_timeout 3        nb_get_retry 3        delay_before_retry 3      }    } }

让10.0.0.100的ip优先分配至192.168.234.47 192.168.234.57备用

让10.0.0.200的ip优先分配至192.168.234.57 192.168.234.47备用

后端real_server准备

修改192.168.234.57的vip为10.0.0.200/32

?
1 2 3 4 5 6 7 8 [root@234c27 keepalived] # ipvsadm -ln ip virtual server version 1.2.1 (size=4096) prot localaddress:port scheduler flags   -> remoteaddress:port      forward weight activeconn inactconn tcp 10.0.0.100:80 wrr   -> 192.168.234.47:80      route  1   0     0 tcp 10.0.0.200:80 wrr -> 192.168.234.57:80      route  1   0     0

 

现在宕掉一个lvs

?
1 2 3 4 5 [root@234c27 keepalived] # systemctl stop keepalived.service [root@234c27 keepalived] # ipvsadm -ln ip virtual server version 1.2.1 (size=4096) prot localaddress:port scheduler flags -> remoteaddress:port      forward weight activeconn inactconn

 

依然提供服务

?
1 2 3 4 5 6 7 8 [root@234c37 ~] # ipvsadm -ln ip virtual server version 1.2.1 (size=4096)   prot localaddress:port scheduler flags   -> remoteaddress:port      forward weight activeconn inactconn   tcp 10.0.0.100:80 wrr    -> 192.168.234.47:80      route  1   0     21   tcp 10.0.0.200:80 wrr    -> 192.168.234.57:80      route  1   0     39

后一个实现基于前一个的基础上修改来的

假设要实现sorry_server

1.把rs服务都停掉。然后在lvs上安装apache或者nginx服务

2.将keepalived配置文件中的

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 virtual_server 10.0.0.200 80 {    delay_loop 6    lb_algo wrr    lb_kind dr    #persistence_timeout 50    protocol tcp    #sorry_server 127.0.0.1:80 //这一行来修改 写出服务出错之后的页面    real_server 192.168.234.57 80 {      weight 1      http_get {        url {         path /         status_code 200        }        connect_timeout 3        nb_get_retry 3        delay_before_retry 3      }    } }

原文链接:https://www.cnblogs.com/OrochWang/archive/2018/08/31/9568225.html

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容