keepalived+lvs实现lvs的高可用 keepalived的介绍: keepalived是借用VRRP协议来实现高可用性的,VRRP协议是解决单点故障,使路由器和层三交换机实现冗余功能。
keepalived启动后会有三个进程 父进程:内存管理,子进程管理等等 子进程:VRRP子进程 子进程:healthchecker子进程 从图上可以看出,两个子进程都被系统WatchDog看管,两个子进程各自操作自己的事,healthchecker子进程负责检查各自服务器的健康程度,例如HTTP,LVS等等,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态 为什么要用keepalived+lvs? lvs是一个在四层上实现后端realserver的负载均衡的集群,lvs遗留下两个问题,一个是lvs的单点故障; 第二个是lvs不能检测后端realserver的健康状态检查。 解决lvs的单点故障就用到了高可用集群: ①、可以是heartbeat+ldirectord这种重量级的; ②、可以是keepalived+lvs这种轻量级的解决方案。(本博客主要写keepalived+lvs轻量级的解决方案), 解决lvs不能检测后端realserver的健康状态也后很多种方法: ①、可以在lvs上写脚本ping后端realserver的ip地址,ping几次发现ip地址ping不通则在ipvs规则里面删除,当 后端服务器可以ping了,则把后端realserver添加到ipvs规则里面。 ②、可以在lvs上写脚本请求后端realserver的测试几次网页文件,查看状态码是否为200,不是则在ipvs规则 里面清楚,当测试网页返回的状态吗是200之后,则把后端realserver添加到ipvs规则里面 ③、以上两种方法都是依赖于脚本,keepalived的出现解决了不依赖于脚本,也可以对后端realserver的健康状态 检查,keepalived的配置文件里面可以自行生成ipvs的规则,并且自行检测后端realserver的状态,当后端realserver 不能提供服务了,keepalived会自行将其在ipvs规则里面删除,当后端realserver可以提供服务了,又自行的在ipvs 规则里面添加。 实验环境: OS:Centos 6.5 yum源: [centos] name=sohu-centos baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch gpgcheck=1 enable=0 gpgkey=http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6 [epel] name=sohu-epel baseurl=http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/ enable=1 gpgcheck=0 实验拓扑图:
拓扑图的规划:
| IP 地址 | 软件 | Master | 172.16.22.1(VIP: 172.16.22.100) | keepalived+ipvsadm | Backup | 172.16.22.2(VIP: 172.16.22.100) | keepalived+ipvsadm | apache1 | 172.16.22.3(VIP: 172.16.22.100) | httpd | apache2 | 172.16.22.4(VIP: 172.16.22.100) | httpd |
注:Master和Backup上面安装ipvsadm主要是为了查看ipvs的规则 一、安装配置操作 Master: 1、安装(博主这里用rpm包安装,各位朋友可以用源码编译安装keepalived) [iyunv@localhost ~]# yum -y installkeepalived ipvsadm 2、修改配置文件 [iyunv@localhost ~]# cd/etc/keepalived/ [iyunv@localhost keepalived]# vimkeepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost #设置报警邮件地址,即收件人地址 } notification_email_from admin@hyd #设置邮件的发送地址 smtp_server 127.0.0.1 #设置smtp server的ip地址 smtp_connect_timeout 30#设置连接smtp server的超时时间 router_idLTT #表示运行keepalived服务器的一个标识,名字可以随便取,名字会显示在发邮件时邮件的主题信息 } vrrp_instance IN_1 { state MASTER #指定keepalived的角色,此服务为master interface eth0 #指定监测网络的接口 virtual_router_id22#虚拟路由的标识 priority 100 #定义优先级,数字越大优先级越高,1-255之间 advert_int 1 #设置同步检查的时间间隔,单位是秒 authentication{ #设置验证类型 auth_typePASS #验证类型为PASS auth_passaaaa #验证的密码 } virtual_ipaddress { 172.16.22.100 #设置虚拟IP } } virtual_server 172.16.22.10080 { #定义虚拟服务器,需指定虚拟ip和端口 delay_loop 6 #设置健康检查时间,单位为秒 lb_algowrr #设置负载调度算法,此处为加权轮叫算法 lb_kind DR #设置LVS实现负载均衡的模式 nat_mask 255.255.0.0#设置子网掩码 protocolTCP #设置转发协议的类型 real_server 172.16.22.180 { #定义realserver,需指定ip和端口 weight 1 #指定权重 HTTP_GET{ #设置检测后端realserver的方式为获取http协议报文 url { path/ status_code 200 #状态码为200则证明后端服务器是在线的 } connect_timeout3 #设置超时时间 nb_get_retry 3 #设置超时时候重试几次 delay_before_retry 3#在重试的时候的时间间隔 } } real_server 172.16.22.280 { weight 1 HTTP_GET { url { path/ status_code200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } [iyunv@localhost keepalived]# scpkeepalived.conf 172.16.22.2:/etc/keepalived/ #把配置文件copy到backup服务器上 3、开启服务 [iyunv@localhost keepalived]# servicekeepalived start Startingkeepalived: [ OK ] [iyunv@localhost keepalived]# chkconfig--add keepalived [iyunv@localhost keepalived]# chkconfigkeepalived on Backup: 1、安装 [iyunv@hyd ~]# yum -y install keepalived ipvsadm 2、修改配置文件 [iyunv@hyd ~]# cd /etc/keepalived/ [iyunv@hyd keepalived]# vim keepalived.conf #此配置文件是从Master服务器上copy过来,只需小小改动 state BACKUP #把这里原先的MASTER改成BACKUP priority 99 #把这里原先的100改成99 3、开启服务 [iyunv@hyd keepalived]# service keepalived start Startingkeepalived: [ OK ] [iyunv@hyd keepalived]# chkconfig --add keepalived [iyunv@hyd keepalived]# chkconfig keepalived on apache1: 1、安装(博主这里用rpm包安装,各位朋友可以用源码编译安装) [iyunv@hyd1 ~]# yum -y install httpd 2、建立测试网页文件 [iyunv@hyd1 ~]# cd /var/www/html/ [iyunv@hyd1 html]# cat index.html #建一个测试网页 this is apache1 3、开启服务 [iyunv@hyd1 html]# service httpd start Startinghttpd: [ OK ] [iyunv@hyd1 html]# chkconfig --add httpd [iyunv@hyd1 html]# chkconfig httpd on 4、修改内核参数和配置vip [iyunv@hyd1 html]# echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore [iyunv@hyd1 html]# echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce [iyunv@hyd1 html]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [iyunv@hyd1 html]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce [iyunv@hyd1 html]# ifconfig lo:1 172.16.22.100 broadcast172.16.22.100 netmask 255.255.255.255 up [iyunv@hyd1 html]# route add -host 172.16.22.100 dev lo:1 apache2: 1、安装(博主这里用rpm包安装,各位朋友可以用源码编译安装) [iyunv@hyd2 ~]# yum -y install httpd 2、建立测试网页文件 [iyunv@hyd2 ~]# cd /var/www/html/ [iyunv@hyd2 html]# cat index.html #建一个测试网页 this is apache2 3、开启服务 [iyunv@hyd2 html]# service httpd start Startinghttpd: [ OK ] [iyunv@hyd2 html]# chkconfig --add httpd [iyunv@hyd2 html]# chkconfig httpd on 4、修改内核参数和配置vip [iyunv@hyd2 html]# echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore [iyunv@hyd2 html]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [iyunv@hyd2 html]# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore [iyunv@hyd2 html]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce [iyunv@hyd2 html]# ifconfig lo:1 172.16.22.100 broadcast172.16.22.100 netmask 255.255.255.255 up [iyunv@hyd2 html]# route add -host 172.16.22.100 dev lo:1 此致所有安装已经完成。 二、相关的测试: 查看相关的vip和ipvs规则
测试后端realserver是否可以访问: apache1可以访问
apache2可以访问
而且是根据wrr算法,平均负载到realserver上 停掉Master的keepalived服务,vip和ipvs规则切换到Backup服务器上
停掉apache1的服务,看ipvs的规则是否清除,显示已经清楚规则 [iyunv@hyd1 html]# service httpd stop Stoppinghttpd: [ OK ] [iyunv@hyd ~]# ipvsadm -L -n IPVirtualServer version 1.2.1 (size=4096) ProtLocalAddress:PortSchedulerFlags -> RemoteAddress:Port ForwardWeightActiveConnInActConn TCP 172.16.22.100:80 wrr -> 172.16.22.4:80 Route 1 0 0 开启apache1的服务,ipvs自动将其又添加上 [iyunv@hyd1 html]# service httpd start Starting httpd: [ OK ] [iyunv@hyd ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags ->RemoteAddress:Port ForwardWeight ActiveConn InActConn TCP 172.16.22.100:80 wrr -> 172.16.22.3:80 Route 1 0 0 -> 172.16.22.4:80 Route 1 0 0 此致,keepalived实现lvs的高可用已经完成,可以自动的故障转移
|