Linux利用keepalived实现lvs的高可用性的操作方法
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配置文件
[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配置文件
[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
[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
启动服务
[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都做,网关并指向路由
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配置文件
[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配置文件
[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
[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
[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
依然提供服务
[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配置文件中的
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 } } }