前言
vrrp介绍:
vrrp(Virtual Router Redundancy Protocol)虚拟路由冗余协议;就是把多个路由器或多个网关设备加入到组中,然后在这一组中虚拟出一个路由器,此虚拟路由器有真是的IP和MAC地址,客户端将网关指向此虚拟路由器的IP;客户端向此虚拟路由器的IP和MAC地址发起请求时,由活动路由器负责响应;当活动路由器发生故障时,由备份路由器响应客户端请求,同时备份路由器转变为活动路由器,从而实现客户端网关无缝切换,保证客户端无感知情况下正常上网。
keepalived介绍:
keepalived就是vrrp协议在Linux主机上以守护进程方式的实现,能根据配置文件生成ipvs规则,不需要ipvsadm客户端工具,还能对后端real server主机做健康状态检查,当real sever主机发生故障时,自动从ipvs中删除;当故障real server恢复后,还可以自动加入到ipvs中;从而实现业务正常运转。
keepalived官方结构图如下所示:
一、安装配置keepalived高可用lvs
1、实验环境:
keepalived主机:
node1: 172.16.2.14/24
node2:172.16.2.13/24
web主机:
node3:172.16.2.12/24
Virtual:
Virtaul 1:172.16.2.15/24
2、安装keepalived:
# yum -y install keepalived
2.1配置keepalived:
node1配置:
[root@node1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { \\全局定义
notification_email { \\定义邮件的接收者
node1@mylinux.com
node2@mylinux.com
notification_email_from root@mylinux.com \\定义邮件的发送者
smtp_server 127.0.0.1 \\定义邮件发送服务器
smtp_connect_timeout 30 \\定义与邮件服务器的连接超时时长
router_id LVS_DEVEL \\定义主机名称,默认即可
}
vrrp_instance mylinux_1 { \\定义实例,名称为mylinux_1
state BACKUP \\为备份节点
interface eth0 \\工作在eth0接口
virtual_router_id 51 \\虚节点路由id,每个实例节点id不能相同
priority 98 \\优先级,
advert_int 1 \\定义vrrp间隔时间
authentication { \\定义认证类型以及秘钥
auth_type PASS \\常用的认证类型有PASS||AH
auth_pass 111122233334444 \\定义秘钥
}
virtual_ipaddress { \\定义虚拟ip地址,也就是VIP地址
172.16.2.15/24 dev eth0 label eth0:0
}\\可以直接使用172.16.2.15不加其他选项是只能使用ip addr list查看,加上此参数可以使用ifconfig查看
virtual_routers { 定义路由
172.16.2.15/24 dev eth0:0 \\定义主机路由
}
}
virual_server 172.16.2.15 80 { \\定义ipvs
dealay_loop 6 \\定义时延
lb_algo rr \\调度方法,常用的调度方法有rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR \\ipvs的工作类型
persistence_timeout 10 \\持久连接为10s,可根据需求自定义
protocol TCP \\ipvs的协议
sorry_server 127.0.0.1 \\当后端所有real_server故障,使用本机web响应信息
real_server 172.16.2.12 80 { \\添加后端主机real_server
weight 1 \\定义权重
HTTP_GET { \\在应用层,对后端real_server健康检测
url {
path / \\请求的url为根路径
status_code 200 \\当返回的状态码为200时则证明此real_server正常;可以使用digest做校验,前提是事先利用genhash对请求的url做hash,然后将结果保存到此位置
}
connect_timeout 3 \\后端real_server连接超时时长
nb_get_retry 3 \\确定当重试多少次之后连接不到后端real_server认为其发生故障
delay_before_retry 3 \\在尝试去连接时的时间间隔
}
}
}
node2节点配置:
[root@node2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
node1@mylinux.com
node2@mylinux.com
}
notification_email_from root@mylinux.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance mylinux_1 {
state MASTER \\此处MASTER,为主节点
interface eth0
virtual_router_id 51
priority 100 \\优先级比backup要高
advert_int 1
authentication {
auth_type PASS
auth_pass 111122233334444
}
virtual_ipaddress {
172.16.2.15/24 dev eth0 label eth0:0
}
virtual_routers {
172.16.2.15/24 dev eth0:0
}
}
virual_server 172.16.2.15 80 {
dealay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 10
protocol TCP
sorry_server 127.0.0.1
real_server 172.16.2.12 80 {
weight 1
HTTP_GET {
url {
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3、在node3安装httpd服务
3.1安装httpd服务
[root@node3 ~]# yum -y install httpd
3.2添加默认文档
[root@node3 ~]# echo "<h1>test keepalived</h1>" >/var/www/html/index.html
3.3 修改node3的相关参数:
[root@node3 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@node3 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@node3 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node3 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
3.4 配置vip地址和主机路由:
[root@node3 ~]# ifconfig lo:0 172.16.2.15 broadcast 172.16.2.15 netmask 255.255.255.255 up
[root@node3 ~]# route add -host 172.16.2.15 dev lo:0
3.5 启动httpd
[root@node3 ~]# /etc/init.d/httpd start
3.5 访问测试http是否可以正常访问
4、 启动keepalived
4.1 启动
[root@node1 ~]# /etc/init.d/keepalived start; ssh node2 '/etc/init.d/keepalived start '
4.2 查看vip地址,ipvs规则
4.3访问测试:
5、知识扩展:
参考/usr/share/doc/keepalived-1.2.13/samples/目录下的文件,可以参考里面的文件自定检查脚本
例如:
在全局中定义检查:
vrrp_script chk_nginx {
killall -0 nginx \\检查nginx进程,如果错误此主机在keepalived中的权重减去5,检查时间间隔为5s
interval 1
weight -5
}
}
vrrp_script chk_haproxy {\\检查haproxy进程,如果错误此主机在keepalived中的权重减去5,检查时间间隔为5s
killall -0 haproxy
interval 1
weight -5
}
vrrp_script chk_keealived_down {\\当/etc/keepalived/目录中有down文件时,则此服务器再keepalived中的权限将会减5,检查时间间隔为5s
[[ -f /etc/keepalived/down ]] && exit 1 || exit 0
interval 1
weight -5
}
在实例中引用:
track_script { \\在实例中调用此检查脚本
chk_nginx
chk_haproxy
chk_keepalived_down
}