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.conf1 ! 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.100www.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
以上
相关文章推荐
- lvs + keepalived高可用负载均衡集群双主实现
- Centos5.5下lvs+keepalived集群
- LVS+Keepalived实现高可用集群
- 基于VMware的虚拟Linux集群搭建-lvs+keepalived
- Keepalived + LVS(DR) 虚拟服务器实现高并发负载均衡集群
- 搭建LVS-DR负载均衡集群、Keepalived-LVS高可用负载均衡集群
- LVS +DR +keepalived高可用性web集群
- centos6.5集群lvs+keepalived部署
- apache+inotify-tools+keepalived+lvs-DR模式配置高可用负载均衡集群
- Lvs + keepalived实现高可用负载均衡集群
- 负载均衡--集群 LVS+keepalived
- 配置LVS + Keepalived高可用负载均衡集群之图文教程
- Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群
- keepalived高可用lvs集群,主/备和主/主模型
- keepalived+lvs实现mysql集群读的操作(写类似)
- lvs+keepalived+nginx+tomcat高可用高性能集群部署
- 企业级RHEL5.8 下实现Keepalived + LVS集群高可用
- Centos6.4X64构建黄金组合LVS + Keepalived高可用负载均衡集群
- lvs+keepalived+nginx实现高性能负载均衡集群
- 高可用集群之keepalived+lvs实战-技术流ken