您的位置:首页 > 其它

lvs+keepalived集群

2018-03-07 22:10 183 查看

一.知识梳理

LVS+keepalived基于完成开源软件的构架实现负载均衡高可用

1.LVS

LVS是Linux Virtual Server的简写,即Linux虚拟服务器,是一个虚拟的服务集群系统。有三种负载均衡技术(VS/NAT、VS/TUN、VS/DR),八种调度算法。

2.keeplived

keepalived在这里主要做realserver健康检查以及loadbalance主机和backup主机之间failover的实现。

keepalived是一个基于VRRP协议来实现WEB服务高可用方案,可以用来避免单点故障,一个web服务器至少有两台服务器运行keepalived,一台主服务器(MASTER),一台备用服务器(BACKUP),但是对外只表现一个vip,主服务器会发送特定消息给备用服务器,当备用服务器收到消息时,备用服务器就会接管ipswich,继续提供服务,从而保证了高可用性。

3.kepalive工作原理

Layer3:keepalived使用layer3的方式工作时,keepalived会定期向服务器群中发送一个ICMP的数据包(即我们平时用的ping程序),如果发现某台服务器的IP地址没有激活,keepalived便会报告这台服务器是小,并将他从服务器群中剔除。Layer3的方式是以服务器的IP第孩子是否有效作为服务器工作正常与否的标准

Layer4:主要以TCP端口的状态来决定服务器工作正常与否。如web sercer的服务端口一般是80.如果keepalived检测到80端口没有启动,则keepalived将这台服务器从服务群中删除。

Layer5:layer5就是工作载具体的应用层,比layer3,4要复杂一点,载网络上占用的宽带也要打一些。Keepalived将根据用户的设定检查服务器的运行是否正常。如果设定不相符,则keepalived将把服务器从群中踢除。

二.实现

1.lvs配置

server1

yum install -y ipvsadm

ipvsadm -A -t 172.25.38.100:80 -s rr

添加策略 指定vip 172.25.66.100:80,-t指tcp,-s rr 指定轮询

ip addr add 172.25.66.100/24 dev eth0 ##添加虚拟ip

ipvsadm -L ##列出ipvsadm策略

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 172.25.66.100:http rr

ipvsadm -a -t 172.25.66.100:80 -r 172.25.66.2:80 -g

ipvsadm -a -t 172.25.66.100:80 -r 172.25.66.3:80 -g

将虚拟ip映射到真实的ip,-r指定realserver -t指定tcp协议 -g指dr模式

ipvsadm -L ##查看策略已加入

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 172.25.66.100:http rr

-> server2:http Route 1 0 0

-> server3:http Route 1 0 0

/etc/init.d/ipvsadm save ##保存策略,不保存的话关机策略即失效

ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]



server2

ip addr add 172.25.66.100/32 dev eth0 ##在realserver上加一个和vip相同的ip地址

ip addr

[root@server2 ~]# yum install -y arptables_jf

为防止客户端在访问vip时直接访问到realserver,在realserver设置一定的策略

[root@server2 ~]# arptables -A IN -d 172.25.66.100 -j DROP

访问realserver的100ip时的请求直接丢弃

[root@server2 ~]# arptables -A OUT -s 172.25.66.100 -j mangle –mangle-ip-s 172.25.66.2

realserver发出的信息全部转为他的真实ip

[root@server2 ~]# /etc/init.d/arptables_jf save ##保存策略

Saving current rules to /etc/sysconfig/arptables: [ OK ]

[root@server2 ~]# /etc/init.d/httpd start

Starting httpd: httpd: Could not reliably determine the server’s fully ####qualified domain name, using 172.25.6.2 for ServerName

[  OK  ]


server3(两个realserver做同样的配置)

[root@server3 ~]# ip addr add 172.25.66.100/32 dev eth0

[root@server3 ~]# ip addr

[root@server3 ~]# yum install -y arptables_jf

[root@server3 ~]# arptables -A IN -d 172.25.66.100 -j DROP

[root@server3 ~]# arptables -A OUT -s 172.25.66.100 -j mangle –mangle-ip-s 172.25.66.3

[root@server3 ~]# /etc/init.d/arptables_jf save

Saving current rules to /etc/sysconfig/arptables: [ OK ]

[root@server3 ~]# /etc/init.d/httpd start

Starting httpd: httpd: Could not reliably determine the server’s fully qualified domain name, using 172.25.6.3 for ServerName

[  OK  ]




此时已经实现了负载均衡了

我在这里是直接安装keepalived没有进行源码编译

直接开服务就行

修改配置文件

vim keepalived.conf ##编辑主配置文件

1 ! Configuration File for keepalived

2

3 global_defs {

4 notification_email {

5 root@localhost ##设置报警邮件地址,如果要开启邮件报警,要开启本机的sendmail服务

6 }

7 notification_email_from keepalived@server1##设置邮件的发送地址

8 smtp_server 127.0.0.1 ##设置smpt server邮件服务端的地址

9 smtp_connect_timeout 30 ##设置连接smptserver的超时时间

10 router_id LVS_DEVEL

11 vrrp_skip_check_adv_addr

12 vrrp_strict

13 }

14

15 vrrp_instance VI_1 {

16 state MASTER ##指定keepalived的角色,MASTER表示此主机为主服务器,若为BACKUP则表示备用服务器

17 interface eth0 ##指定HA检测网络的接口

18 virtual_router_id 51 ##虚拟路由标识,MASTER和BACKUP的必须相同

19 priority 100 ##定义优先级,数字越大优先级越高,因此MASTER的必须年比BACKUP的数字大,否则就会有冲突

20 advert_int 1 ##设定MASTER和BACKUP负载均衡之间同步检查的时间间隔,单位为秒

21 authentication { ##设定验证类型和密码

22 auth_type PASS

23 auth_pass 1111

24 }

25 virtual_ipaddress { ##指定虚拟ip

26 172.25.66.100

27 }

28 }

29 ##虚拟服务器定义部分

30 virtual_server 172.25.66.100 80 { ##设定虚拟服务器ip地址及端口,两者以空格隔开

31 delay_loop 6 ##设置运行情况检查时间,单位为秒

32 lb_algo rr ##设置负载均衡算法,这里设置为rr算法,即轮询算法

33 lb_kind DR ##设置lvs实现负载均衡机制,有NAT,TUN,DR三种模式

34 #persistence_timeout 50 ##会话保留时间,单位为秒

35 protocol TCP ##指定转发协议类型

36

37

38

39 real_server 172.25.66.2 80 { ##配置realserver,需要指定真实ip与其端口,用空格隔开

40 weight 1 ##配置服务节点的权重值

41 TCP_CHECK { ##realserver检查状态设置部分

42 connect_timeout 3 ##3s无响应时超时

43 nb_get_retry 3 ##重复次数

44 delay_before_retry 3 ##重复间隔

45 }

46 }

47 real_server 172.25.66.3 80 {

48 weight 1

49 TCP_CHECK {

50 connect_timeout 3

51 nb_get_retry 3

52 delay_before_retry 3

53 }

54 }

55 }





另外一端也要安装keepalived 用作备用机

[root@test2 keepalived]# vim keepalived.conf

1 ! Configuration File for keepalived

2

3 global_defs {

4 notification_email {

5 root@localhost

6 }

7 notification_email_from keepalived@test2

8 smtp_server 127.0.0.1

9 smtp_connect_timeout 30

10 router_id LVS_DEVEL

11 vrrp_skip_check_adv_addr

12 vrrp_strict

13 }

14

15 vrrp_instance VI_1 {

16 state BACKUP ##备用服务器

17 interface eth0

18 virtual_router_id 51

19 priority 50 ##优先级必须低于主服务器

20 advert_int 1

21 authentication {

22 auth_type PASS

23 auth_pass 1111

24 }

25 virtual_ipaddress {

26 172.25.66.100

27 }

28 }

29

30 virtual_server 172.25.66.100 80 {

31 delay_loop 6

32 lb_algo rr

33 lb_kind DR

34 #persistence_timeout 50

35 protocol TCP

36

37

38

39 real_server 172.25.66.2 80 {

40 weight 1

41 TCP_CHECK {

42 connect_timeout 3

43 nb_get_retry 3

44 delay_before_retry 3

45 }

46 }

47 real_server 172.25.66.3 80 {

48 weight 1

49 TCP_CHECK {

50 connect_timeout 3

51 nb_get_retry 3

52 delay_before_retry 3

53 }

54 }

55 }





[root@server1 keepalived]# /etc/init.d/keepalived start

Starting keepalived: [ OK ]

[root@server1 keepalived]# tail -f /var/log/messages

Jul 26 13:46:25 server1 Keepalived_healthcheckers[24222]: Removing service [172.25.66.3]:80 from VS [172.25.66.100]:80

Jul 26 13:46:25 server1 Keepalived_healthcheckers[24222]: Remote SMTP server [127.0.0.1]:25 connected.

Jul 26 13:46:25 server1 Keepalived_healthcheckers[24222]: SMTP alert successfully sent.

Jul 26 13:46:28 server1 Keepalived_healthcheckers[24222]: TCP connection to [172.25.66.2]:80 failed.

Jul 26 13:46:28 server1 Keepalived_healthcheckers[24222]: Check on service [172.25.66.2]:80 failed after 1 retry.

Jul 26 13:46:28 server1 Keepalived_healthcheckers[24222]: Removing service [172.25.66.2]:80 from VS [172.25.66.100]:80

Jul 26 13:46:28 server1 Keepalived_healthcheckers[24222]: Lost quorum 1-0=1 > 0 for VS [172.25.66.100]:80

Jul 26 13:46:28 server1 Keepalived_healthcheckers[24222]: Remote SMTP server [127.0.0.1]:25 connected.

Jul 26 13:46:28 server1 Keepalived_healthcheckers[24222]: SMTP alert successfully sent.

Jul 26 13:46:28 server1 Keepalived_vrrp[24223]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.25.66.100

[root@server1 keepalived]# ip addr ##接管vip

[root@server1 keepalived]# ipvsadm -l

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 172.25.66.100:http rr

-> server2:http Route 1 0 3

-> server3:http Route 1 0 4



测试:

server2和server3实现lvs

server1和server4实现keepalived

1)当server1和test2的keepalived服务都正常时,server1的keepalived工作(默认master工作,这里server1被设置为master)

[kiosk@foundation6 Desktop]$ curl 172.25.66.100

www.westos.com-server1

[kiosk@foundation6 Desktop]$ curl 172.25.66.100

www.westos.com-server2

[kiosk@foundation6 Desktop]$ arp -an | grep 100

? (172.25.66.100) at 52:54:00:c1:37:57 [ether] on br0

[root@server1 local]# ip addr



2)当master即server1挂掉时,test2的keepalived工作

[root@server1 local]# /etc/init.d/keepalived stop

Stopping keepalived: [ OK ]

[kiosk@foundation6 Desktop]$ curl 172.25.66.100

www.westos.com-server2

[kiosk@foundation6 Desktop]$ arp -an | grep 100

? (172.25.66.100) at 52:54:00:7a:98:49 [ether] on br0

[root@test2 keepalived]# ip addr





以上

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: