keepalive简单入门

  • 时间:
  • 浏览:2

98

50

real_server <IPADDR> <PORT>

27

50

   notification_email {

    state BACKUP 

}

*)

### rs1和rs2服务器的配置

架构图和lvs双主模型的一模一样,本来 把代理服务器更替为nginx

sorry_server <IPADDR> <PORT>:备用服务器地址;

    ifconfig lo:0 down

54

33

    route add -host $vip dev lo:0

    }

vim /etc/keepalived/keepalived.conf

16

2

58

        172.16.29.4/16 dev eno16777736 label eno16777736:1

              path /

connect_ip <IP ADDRESS>:向当前RS的哪个IP地址发起健康情形检测请求

61

    priority 50 

高可用

Global definitions

lb_kind NAT|DR|TUN:集群的类型;

37

8

14

1

1

27

        interval 1

11

5

    authentication {

11

88

97

    }

76

    state MASTER

        weight 1

4

55

systemctl start keepalived.service

esac

    }

33

28

    interface eno16777736

6

systemctl start httpd.service

51

29

        HTTP_GET {

34

            }

lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定义调度方式;

14

    

priority 50:当前主机在此虚拟路径器中的优先级;范围1-254;

103

        chk_down

    vrrp_script chk_nginx {

5

# 目录

stop)

20

# 多端口统一调度

40

12

}

21

15

        weight 1

connect_port <PORT>:向当前RS的哪个PORT发起健康情形检测请求

}

24

      本文转自Ailu0li 51CTO博客,原文链接:http://blog.51cto.com/oldking/1894376,如需转载请自行联系原作者

52

52

Virtual server(s) #ipvs集群的vs和rs;

            nb_get_retry 1

    priority 90 

    lb_kind DR

systemctl start httpd.service

              status_code 50

keepalived的是很基本的服务,是亲戚亲戚我们 歌词 使用最多的高可用服务,将会它足够轻量级这俩 可定制性很高,亲戚亲戚我们 歌词 都都本来 keepalived调用亲戚亲戚我们 歌词 定义的python脚步实现高级功能,拿高可用nginx服务为例子,备用节点的Nginx服务老会 运行着,当主服务器故障,直接获取主服务器的ip,这俩 向缓存服务器加载session就好了。

### 配置虚拟路由器:

2

10

39

            connect_timeout 1

95

33

48

    protocol TCP

49

VRRPD CONFIGURATION

        root@localhost

4

13

    route add -host $vip1 dev lo:1

102

nb_get_retry <INT>:重试次数;

GLOBAL CONFIGURATION

7

...

            nb_get_retry 1

2

    protocol TCP

   router_id node1

35

22

    virtual_router_id 51

89

vrrp_instance VI_2 { 

26

两台主机keepalived的配置只有很少的这俩 不同,不同的前一天我会标出,这里以dr1的为例

94

    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

path <URL_PATH>:定义要监控的URL;

8

   vrrp_mcast_group4 224.0.29.29

   notification_email_from keepalived@localhost

            url {

}

vip1=172.16.29.4

20

54

vrrp,是多个硬件使用兩个多多ip信息,虽然一并只有兩个多多设备都都要使用ip。这俩 协议的功能本来 让ip老会 可用,一次工作流程。正常情形master硬件占有ip,这俩 不停向backup设备发送心跳信息,当master故障backup收只有心跳信息,backup就会发送arp报文问ip的mac地址是几块,这俩 本人回答ip的mac是本人的mac,原先路由就会收到arp信息更新路由表。原先就把ip抢过来了。

real_server {

iptables -t mangle -A PREROUTING -i eth2 -p tcp --dport 443 -j MARK --set-mark 20

        script "killall -0 nginx && exit 0 || exit 1"

42

17

}

    virtual_ipaddress {

    }

3

21

还有本来 减MTTR,这俩 方式首先亲戚亲戚我们 歌词 要承认兩个多多前提——亲戚亲戚我们 歌词 允许机器故障,减小故障和维护时间如此 都在 兩个多多方案,本来 准备兩个多多和正在运行dr服务器一样的服务器,时时等着dr挂掉立即顶替。既然是顶替如此 就会有问题图片图片,为什么在么在在么在判断dr挂掉了,让dr实时向备用服务器发送心跳信息,备用服务器一旦收只有心跳信息,立即顶替。

    }

        auth_type PASS

              path /

常用参数:

9

4

2

93

        weight 1

50

24

Virtual server group(s)

44

        auth_pass oldking1

        auth_type PASS

49

 notify_up <STRING>|<QUOTED-STRING>

63

            connect_timeout 1

    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

59

69

{

 notify_down <STRING>|<QUOTED-STRING>

VRRP instance(s) #每个vrrp instance即兩个多多vrrp路由器;

yum install httpd -y

86

    }

3

   notification_email {

29

107

}

persistence_timeout <INT>:持久连接时长;

VRRP synchronization group(s) #vrrp同步组;

61

26

            url {

36

55

    }

        172.16.29.3/16 dev eno16777736 label eno16777736:0

45

    ifconfig lo:1 down

    ifconfig lo:0 $vip netmask $mask broadcast $vip up

url {

47

1

1

interface IFACE_NAME:绑定为当前虚拟路由器使用的物理接口;

        HTTP_GET {

### keepalived配置文件的价值形式

50

11

...

....

            connect_timeout 1

这里dr老会 都都要就成为高可用,仔细的考虑dr的特点,一是负责调度规则管理,二对外网提供访问接口,这俩 访问接口一般是兩个多多ip。

        auth_pass oldking1

106

53

   }

MTBF #平均无故障时间,也本来 服务器正常提供服务的时间

其中vrrp Stack主本来 为了实现vrrp功能;Checkers是为了实现监控后端服务器情形的的模块,当后端服务器故障都都要实时更改lvs规则,不再向故障的后端服务器调度请求。

53

84

71

50

101

12

22

65

        }

15

109

        }

    real_server 172.16.29.2 50 {

31

36

            connect_timeout 1

37

104

28

7

23

    }

...

    }

        location / { 

1

13

9

}

25

}

iptables -t mangle -A PREROUTING -i eth2 -p tcp --dport 50 -j MARK --set-mark 20

双主模型的实践

   smtp_server 127.0.0.1

31

首先使用iptables给某几块端口的服务打上同兩个多多标签,大标签的命令

57

        interval 1

    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

            nb_get_retry 1

}

   notification_email_from keepalived@localhost

    ;;  

delay_loop <INT>:服务轮询的时间间隔;

TCP_CHECK {

41

81

    ;;  

79

connect_timeout <INTEGER>:连接请求的超时时长;

44

90

4

            delay_before_retry 1

13

56

! Configuration File for keepalived

authentication {

40

delay_before_retry <INT>:重试前一天的延迟时长;

echo '<h1>rs1</h1>' /var/www/html/index.html 

63

! Configuration File for keepalived

多端口统一调度

22

        weight -20

15

        172.16.29.3/16 dev eno16777736 label eno16777736:0

    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

   vrrp_mcast_group4 224.0.29.29

virtual_server fwmark int 

25

        auth_pass oldking2

              status_code 50

32

23

yum install nginx keepalived

        chk_nginx

    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

    nat_mask 255.255.0.0

        auth_type PASS

        weight 1

10

73

bind_port <PORT>:发出健康情形检测请求时使用的源端口;

14

47

39

    vrrp_script chk_down {

        server 172.16.29.2:50;

7

connect_ip <IP ADDRESS>:向当前RS的哪个IP地址发起健康情形检测请求

85

25

            delay_before_retry 1

    interface eno16777736

    interface eno16777736

这里我使用lvs的dr模型

111

    ifconfig lo:1 $vip1 netmask $mask broadcast $vip1 up

              status_code 50

34

50

42

18

protocol TCP:服务协议,仅支持TCP;

}

    real_server 172.16.29.1 50 {

27

            }

5

case $1 in

16

global_defs {

提高A的方式有一种一种是在保证MTTP不变的情形下增大MBTF,这俩 方式常常是硬件级的提高方式,亲戚亲戚我们 歌词 都都要使用更贵的服务器,这俩 服务器每个硬件都在 兩个多多冗余占据 热备。这俩 方式都要硬件设计商介入,如此 就导致 分析成本会非常高,将会真正正在使用调度器数量很少,只有通过量产来平摊设计费用,如此 只有承担硬件设计的高费用。这俩 种方式显然不太靠谱。

        172.16.29.4/16 dev eno16777736 label eno16777736:1

这俩 再编辑keepalived配置文件

        }

96

    authentication {

}

10

18

start)

        auth_type PASS

    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

        server 172.16.29.1:50;

50

        weight  -5

vim /etc/nginx/nginx.conf

75

1

57

46

31

    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

 HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... }:定义当前主机的健康情形检测方式;

110

    exit 1

1

vrrp_instance VI_2 { 

32

67

    }

        }

6

3

   smtp_connect_timeout 50

        auth_pass oldking2

yum -y install keepalived httpd ipvsadm 

    nat_mask 255.255.0.0

    priority 90 

    advert_int 1

keepalived都都要说是为lvs量身定制的高可用软件,都在本来 原先说是将会它主要有兩个多多核心模块构成如下图

7

    virtual_router_id 52

   smtp_connect_timeout 50

29

10

26

### dr1和dr2的设置命令

        script "[[ -f /etc/nginx/down ]] && exit 1 || exit 0"

vip=172.16.29.3

    }

bindto <IP ADDRESS>:发出健康情形检测请求时使用的源地址;

        root@localhost

              path /

    virtual_router_id 52

备用dr服务器(backup)为什么在么在在么在顶替dr(master),顶替dr导致 分析备用服务器要提供dr的全版功能,这俩 要继承dr的提供的外网访问接口。dr的功能好提供,但会 我backup服务器运行和master一样服务提供同样的配置文件就都都要了。下一项为什么在么在在么在继承dr的外网访问接口,这里亲戚亲戚我们 歌词 使用vrrp(虚拟路由协议)

35

virtual_server IP port |

11

    }

vrrp_instance VI_1 { 

# 双主模型的实践

4

state MASTER|BACKUP:当前节点在此虚拟路由器上的初始情形;只有有兩个多多是MASTER,余下的都应该为BACKUP;

connect_port <PORT>:向当前RS的哪个PORT发起健康情形检测请求

    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

vrrp_instance VI_1 { 

    virtual_router_id 51

5

            delay_before_retry 1

43

    state MASTER

bash -x setrs.sh

    priority 50 

HTTP_GET|SSL_GET {

            nb_get_retry 1

2

62

    virtual_ipaddress {

#!/bin/bash

}

vim setrs.sh 

32

    interface eno16777736

 weight <INT>

vim keepalived.conf

connect_timeout <INTEGER>:连接请求的超时时长;

Static routes/addresses

    virtual_ipaddress {

41

78

105

# 高可用

17

    track_script {

38

20

68

19

advert_int 1:vrrp通告的时间间隔;

mask='255.255.255.255'

virtual_server fwmark 20 {

70

21

    delay_loop 6

24

virtual_router_id VRID:当前虚拟路由器的惟一标识,范围是0-255;

2

LVS CONFIGURATION

9

18

17

echo '<h1>dr1</h1>' /var/www/html/index.html 

{

72

### 虚拟服务器:

6

              status_code 50

    sorry_server 127.0.0.1 50

vrrp_instance <STRING> {

        HTTP_GET {

HTTP_GET|SSL_GET:应用层检测

    authentication {

92

34

virtual_server 172.16.29.3 50 { 

56

}

    }

66

8

        HTTP_GET {

28

virtual_server 172.16.29.4 50 { 

bind_port <PORT>:发出健康情形检测请求时使用的源端口;

# 总结

19

64

    }

48

# keepalived

digest <STRING>:判断上述检测机制为健康情形的响应的内容的校验码;

82

            url {

status_code <INT>:判断上述检测机制为健康情形的响应码;

    ;;

   router_id node1

3

50

    state BACKUP 

    advert_int 1

}

}

keepalived

auth_type AH|PASS

# nginx的双主模型

50

58

    }

   }

auth_pass <PASSWORD>

...

87

    real_server 172.16.29.2 50 {

19

    proxy_pass http://web;

}

108

59

    real_server 172.16.29.1 50 {

}

global_defs { 

解决了任务分发问题图片图片,如此 亲戚亲戚我们 歌词 都都要考虑下兩个多多问题图片图片了,机器故障为什么在么在在么在办。首先考虑realsserver故障,亲戚亲戚我们 歌词 为什么在么在在么在实时发现rs(realserver)的情形,当检测rs到故障后调度器为什么在么在在么在修改调度规则。这俩 是考虑dr(director)故障,这本来 大问题图片图片了一旦故障整个后端服务就全版不可用了,这里我称这俩 节点为单点。原先的设计将会故障导致 漏洞百出,大家就引入了兩个多多软件keepalived,帮助lvs解决了单点问题图片图片,一并还提供了后端rs故障发现和解决机制。

              path /

bindto <IP ADDRESS>:发出健康情形检测请求时使用的源地址;

38

    upstream web {

   smtp_server 127.0.0.1

    }

8

77

            }

    virtual_ipaddress {

74

MTTR #平均故障时间,服务器占据 故障和维护的时间

}

83

    authentication {

46

99

12

    lb_kind DR

16

            delay_before_retry 1

    delay_loop 6

    lb_algo rr

    lb_algo rr

            }

    sorry_server 127.0.0.1 50

51

            url {

91

45

3

9

6

62

这里引入兩个多多概念,也是兩个多多常识,服务可用率A=MTBF/(MTBF+MTTR)

23

43

    echo "Usage $(basename $0) start|stop"