1.基本概念
1.keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived是自动完成,不需人工干涉。
2.Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
3.作用主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
4.高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)
5.注意的点
1.如果客户端和用户直接连接的话,会出现很多问题,例如网络,存储,访问
2.如果服务器压力很大:解决方法是先访问缓存,再访问负载均衡
3.搜索服务器:专门用来接受搜索的请求的,一般来说存储都比较高效
4.对于用户来说,等待的时间都是查询的时间
5.节耦的用处:为了避免某一个节点坏了,所有都坏
6.redhat 6.5和6的启动方式都使用了IPVS的架构
7.SNMP是简单网络管理协议
8.在高可用的目录下bin脚本,etc是配置文件,sbin下是一个编译好的二进制文件
9.在做项目的时候注意网卡接口的名称
10.优先级 也即权重
2.实验
实验环境:
主机 | ip | 服务 |
---|---|---|
server1 | 172.25.66.1 | LVS ACTIVE(主) |
server4 | 172.25.66.4 | LVS BACKUP(备) |
VIP | 172.25.66.100 | LVS VIP |
server2 | 172.25.66.2 | Realserver1 |
server3 | 172.25.66.3 | Realserver2 |
LVS ACTIVE(主) 172.25.66.1
LVS BACKUP(备) 172.25.66.4
LVS VIP 172.25.66.100
Realserver1 172.25.66.2
Realserver2 172.25.66.3
前提:
首先建立一个快照,名称为vm4,操作如下:
1.配置
<1>配置高级yum源
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# vim rhel-source.repo
配置文件中的内容如下:
<2>将keepalived包进行解压并进入keepalived-2.0.6目录
[root@server1 yum.repos.d]# cd
[root@server1 ~]# ls
[root@server1 ~]# tar zxf keepalived-2.0.6.tar.gz
[root@server1 ~]# ls
[root@server1 ~]# cd keepalived-2.0.6
<3>在keepalived-2.0.6目录下安装keepalived的依赖包:openssl-devel,gcc
[root@server1 keepalived-2.0.6]# yum install openssl-devel -y
[root@server1 keepalived-2.0.6]# yum install gcc -y
<4>编译keepalived的源码包
[root@server1 keepalived-2.0.6]# ./configure --prefix=/usr/local/keepalived --with-init=SYSV
[root@server1 keepalived-2.0.6]# make && make install
注意:
编译时要注意要在keepalived-2.0.6目录下
补充:
如果出现以下情况,说明没有安装gcc
<5>给脚本可执行权限
[root@server1 keepalived-2.0.6]# cd /usr/local/keepalived/etc/rc.d/init.d/
[root@server1 init.d]# ls
[root@server1 init.d]# chmod +x keepalived
<6>制作软链接为了keepalived的管理与设置
[root@server1 init.d]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d
[root@server1 init.d]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig
[root@server1 init.d]# ln -s /usr/local/keepalived/etc/keepalived/ /etc
[root@server1 init.d]# ln -s /usr/local/keepalived/sbin/keepalived /sbin
<7>在server1中修改文件中的配置
[root@server1 init.d]# cd /etc/keepalived/
[root@server1 keepalived]# ls
[root@server1 keepalived]# vim keepalived.conf
配置内容如下:
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #接收警报的email地址,可以添加多个
}
notification_email_from keepalived@localhost #设置邮件的发送地址
smtp_server 127.0.0.1 #设置smtp swrver地址
smtp_connect_timeout 30 #设置连接smtp服务器超时时间
router_id LVS_DEVEL #load balancer的标识ID,用于email警报
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #备机改成BACPUP,此状态是由priority的值来决定的,当前priority的值小于备>机的值,那么将会失去MASTER状态
interface eth0 #HA监测网络接口
virtual_router_id 51 #主,备机的virtual_router_id 必须相同,取值0-255
priority 100 #主机的优先级,备份机改为50,主机优先级一定要大于备机
advert_int 1 #主备之间的通告间隔秒数
authentication { #主备切换时的验证
auth_type PASS #设置验证类型,主要有PASS和AH两种
auth_pass 1111 #设置验证密码,在一个vrrp_instance下,MASTER与BACPUP必须使用相同的密码才
能正常通信
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
172.25.66.100
}
}
virtual_server 172.25.66.100 80 { #定义虚拟服务器
delay_loop 6 #每隔6秒查询realserver状态
lb_algo rr #lvs调度算法,这里使用轮叫
lb_kind DR #lvs是用DR模式
# persistence_timeout 50 #会话保持时间,单位是秒,这个选项对于动态网页是非常有
#用的,为集群系统中 session 共享提供了一个很好的解决方案。有了这个会话保持功能,用户的
#请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保
#持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在 50 秒内没有执行任
#何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受 50 秒
#的时间限制。
protocol TCP #指定转发协议类型,有tcp和udp两种
real_server 172.25.66.2 80 { #配置服务节点
weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权
#值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设
#置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源
TCP_CHECK{ #realserve的状态检测设置部分,单位是秒
connect_timeout 3 #10s无响应超时
retry 3 #重试次数
delay_before_retry 3 #重试间隔
}
}
real_server 172.25.66.3 80 {
weight 1
TCP_CHECK{
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
<8>将配置号的文件发送给备机(server4),并做修改
[root@server1 keepalived]# cd /usr/local
[root@server1 local]# scp -r keepalived [email protected]:/usr/local
[root@server4 ~]# cd /usr/local/keepalived/etc/keepalived/
[root@server4 keepalived]# ls
[root@server4 keepalived]# vim keepalived.conf
配置内容如下:
state BACKUP #备机改成BACPUP,此状态是由priority的值来决定的,当前priority的值小于备机的值,那么将会失去MASTER状态
priority 50 #主机的优先级,备份机改为50,主机优先级一定要大于备机
<9>在server4中同样做软链接
[root@server4 keepalived]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d
[root@server4 keepalived]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig
[root@server4 keepalived]# ln -s /usr/local/keepalived/etc/keepalived/ /etc
[root@server4 keepalived]# ln -s /usr/local/keepalived/sbin/keepalived /sbin
<10>在server1和server4中都重启服务
在server1中重启服务(如果重启没有成功,说明之前没有开启那个服务)
[root@server1 local]# /etc/init.d/keepalived restart
[root@server1 local]# /etc/init.d/keepalived start
[root@server1 local]# /etc/init.d/keepalived restart
在server4中重启服务(如果重启没有成功,说明之前没有开启那个服务)
[root@server4 keepalived]# /etc/init.d/keepalived restart
[root@server4 keepalived]# /etc/init.d/keepalived start
[root@server4 keepalived]# /etc/init.d/keepalived restart
2.测试
(1)测试vip是否发生了漂移(要等差不多10s)
<1>开启服务后,会发现自动分配vip地址(172.25.66.100)
<2>将server1(主机)的keepalived服务关闭,则vip地址会漂移到server4(备机)
<3>再次在server1中将服务开启,会发现vip地址又会漂移回去,而server4中便没有vip地址了
(2)测试健康检查
<1>测试当没有服务宕机时,在物理机中测试的结果,发现测试页轮叫输出(注意:要开启server2和server3的apache服务,并关闭健康检查)
开启apache服务:
[root@server2 ~]# /etc/init.d/httpd start
[root@server3 ~]# /etc/init.d/httpd start
[root@server1 html]# /etc/init.d/ldirectord stop
在物理机上测试:
[root@foundation66 images]# curl 172.25.66.100
[root@foundation66 images]# curl 172.25.66.100
[root@foundation66 images]# curl 172.25.66.100
[root@foundation66 images]# curl 172.25.66.100
<2>当将server3的apache关闭后,再次测试,发现只正常输出server2的测试页
关闭apache服务:
[root@server3 ~]# /etc/init.d/httpd stop
在物理机上测试:
[root@foundation66 ~]# curl 172.25.66.100
[root@foundation66 ~]# curl 172.25.66.100
[root@foundation66 ~]# curl 172.25.66.100
[root@foundation66 ~]# curl 172.25.66.100
<3>当再将server2的apache关闭后,再次测试,发现无法正常输出(要关闭ldirectord,因为此处的检查与ldirectord健康检查没有关系)
关闭apache服务:
[root@server2 ~]# /etc/init.d/httpd stop
在物理机上测试:
[root@foundation66 images]# curl 172.25.66.100
[root@foundation66 images]# curl 172.25.66.100
[root@foundation66 images]# curl 172.25.66.100
[root@foundation66 images]# curl 172.25.66.100
(静文小姐姐,我也想你,我们明天去吃拔丝地瓜,会给你拍照片的)