前言
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 }
原创文章,作者:马行空,如若转载,请注明出处:http://www.178linux.com/6384