本文以LVS + keepalived 实现基于keepalived的LVS的高可用
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR); 十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。
Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现
简单介绍keepalived:keepalived是实现高可用的一种轻量级的技术手段,主要用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。之所以说keepalived是轻量级的,是相对于corosync + ldirectord来说的。keepalived也可以实现高可用集群,而且配置起来比corosync + ldirectord简单方便很多,keepalived与corosync的工作机制相差很多。corosync + ldirectord实现的功能虽然强大,但配置起来比较麻烦,而keepalived功能虽然简单,但配置起来比较容易。也就是说keepalived可实现corosync + ldirectord实现的功能,只不过前者没有后者功能强大而已
这里有一个网上图片,以便可以详细的了解工作流程
大致规划:
web-real server1 172.16.14.3 node1.magedu.com
web-real server2 172.16.14.4 node2.magedu.com
LVS-DR vip 172.16.14.1
LVS-DR-master 172.16.14.5 node1.magedu.com
LVS-DR-salve 172.16.14.6 node2.magedu.com
首先需要下载keepalived-1.2.7-5.el5.i386.rpm
一、准备两台real server,安装httpd服务
(172.16.14.3 node1.magedu.com) 172.16.14.4 node2.magedu.com) # yum -y install httpd # echo "node1.magedu.com" > /var/www/html/index.html # setenforce 0 关闭selinux # service httpd start 启动服务
进行测试
在real server2上安装http服务
(172.16.14.4 node2.magedu.com) # yum -y install httpd # echo "node2.magedu.com" > /var/www/html/index.html # setenforce 0 关闭selinux # service httpd start
进行测试
现在real server的http服务就准备好啦。
二、安装keepalived服务
(172.16.14.5 node1.magedu.com) # yum -y --nogpgcheck localinstall keepalived-1.2.7-5.el5.i386.rpm # yum -y install ipvsadm
修改配置文件
# vim /etc/keepalived/keepalived.conf
进行配置keepalived # cd /etc/keepalived/ # cp keepalived.conf keepalived.conf.bak #做备份,出错时,还可以恢复 # vim keepalived ! Configuration File for keepalived global_defs { notification_email { root@localhost #管理员邮箱 } notification_email_from keepalived@localhost #发件人邮箱 smtp_server 127.0.0.1 #邮箱地址 smtp_connect_timeout 30 #邮箱连接超时时间 router_id LVS_DEVEL #router_id是从LVS_DEVEL直接获取 } vrrp_instance VI_1 { #虚拟路由 state MASTER #状态 interface eth0 #虚拟路由工作于哪个接口 virtual_router_id 55 #vid priority 101 #优先级,要高于被节点,减去2后,低于被节点 advert_int 1 #认证 authentication { auth_type PASS auth_pass password } virtual_ipaddress { 172.16.14.1/16 dev eth0 label eth0:0 } #虚拟地址 virtual_server 172.16.14.1 80 { #虚拟服务的地址,及监听端口 delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.0.0 #子网掩码 persistence_timeout 50 protocol TCP real_server 172.16.14.3 80 { weight 1 HTTP_GET { #进行健康检查的方法 url { path / #获取主页面 status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.16.14.3 80 { weight 1 HTTP_GET { #进行健康检查的方法 url { path / #获取主页面 status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
复制keepalived.conf配置文件到从节点上
# scp keepalived.conf node2:/etc/keepalived/
在从节点上,修改其配置文件
(172.16.14.6 node2.magedu.com) # cd /etc/keepalived/ # vim keepalived.conf 修改如下行 state BACKUP priority 100
重启keepalived服务,并查看ipvsadm规则,看是否成功(因为安装keepalived服务,会自动在服务上生成ipvs规则,基于LVS,达到ip地址的高可用)
(172.16.14.5 172.16.14.6) # service keepalived restart
查看规则
手动模拟 resal server1宕机,再进行查看ipvs规则
ipvs规则里就只剩下了node2(172.16.14.4)了
1.模拟real server 都宕机时,服务器出现错误页面
在keepalived服务器上安装http服务器,安装提示错误的页面
(172.16.14.5 node1.magedu.com 172.16.14.6 node2.magedu.com) # yum -y install httpd # echo "error" > /var/www/html/index.html # setenforce 0 关闭selinux # scp /var/www/html/index.html node2:/var/www/html/index.html # service httpd start
编译配配置文件/etc/keepalived/keepalived.conf
(172.16.14.5 172.16.14.6) 在rea_server前面加上一行: sorry_server 127.0.0.1 80 # service keepalived restart
停止real server上的http服务,查看172.16.14.1会出现怎么样的页面
2.自写检测脚本,完成维护模式切换
使用维护模式,模拟节点1宕机
vrrp_script chk_schedown { script "[ -e /etc/keepalived/down ] && exit 1 || exit 0" interval 1 weight -5 fall 2 rise 1 } 在 virtual_ipaddress { 172.16.14.1/16 dev eth0 label eth0:0 } 添加如下行: track_script{ chk_schedown }
重启keepalived服务,查看节点1(172.16.14.5)的ip地址
手动编辑down文件,重启服务,模拟主节点宕机
# cd /etc/keepalived # touch down
查看ip地址.eth0:0就运行于从节点啦