LVS集群的实现,是由多台设备如httpd,nginx主机,php-fpm动态资源主机,MySQL主机,以及Session Server等主机交织构成的,随着访问资源量的日益增加而呈向外扩展的模式,而在这样的LVS模式下,主要的设备就是调度器与后端RS,这两者的能否正常运行决定了我们所架设的服务能否正常提供服务;所以针对于调度器Directory与真实机RS的高可用是势在必行的,但是LVS本身并没有提供高可用的;
keepalived,实现LVS的高可用,针对于Directory的高可用与后端的RS健康检测,由我们自己设定检测间隙时间;而keepalived这种高可用机制其实是基于vrrp协议来运行的,vrrp协议,又为虚拟冗余路由协议;其主要运行原理如两台路由器,对外表示为一台路由器,即使用一个虚拟的IP地址VIP作为该路由器对外的IP地址,外部其他主机的网关,将两台路由器一个设置为MASTER,一个设置为BACKUP;MASTER作为对外的路由器,将虚拟IP地址给予该路由器,而BACKUP路由器则作为备份路由器存在,在MASTER工作时并不占用任何资源,而当MASTER路由器出现问题down掉的时候,BACKUP路由器就会出来充当MASTER路由器,将虚拟IP地址重新分配给他,并向网络中发布一条免费的arp报文,这个免费报文主要是发送其新生成的MASTER的MAC地址,新的MAC地址格式大概为00-00-5E-00-01-{VRID},通告其路由变换,告诉网络中的主机现在这个路由器是我;如果有多个BACKUP时,则需要进行BACKUP之间的选举操作,即根据BACKUP之间的优先级进行选择;在一同一组的路由器上都会存在一个虚拟ID,VRID,用于标识这个路由是这个组中的一员,这样才能在组中进行选举;
优先级:选举成为MASTER的主要参考标准,取值范围是0-255
0:表示该路由器不参与选举,除非所有路由器都down掉了;
255:该优先级一设置便为MASTER;
其余1-254按越大,优先级越大来设置;
抢占式:如果MASTER路由down了,这个时候由下方的BACKUP路由进行选举,如果这个时候MASTER路由又恢复了,就会立即夺过其MASTER的身份;若BACKUP优先级高于MASTER的路由器,就会将其MASTER身份夺过来;
非抢占式:如果MASTER路由down了,这个时候由下方的BACKUP路由进行选举,如果这个时候MASTER路由又恢复了,并不会夺过其MASTER进程,而是作为BACKUP重新选举;
为了提高VRRP协议的安全性,其还提供了认证功能:
1.字符串认证在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送VRRP 报文的路由器将认证字填入到VRRP报文中,而收到VRRP报文的路由器会将收到的VRRP报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的VRRP报文;否则认为接收到的报文是一个非法报文。
2.MD5认证:在一个非常不安全的网络中,可以将认证方式设置为MD5认证。发送VRRP报文的路由器利用认证字和MD5算法对VRRP报文进行加密,加密后的报文保存在Authentication Header(认证头)中。收到VRRP报文的路由器会利用认证字解密报文,检查该报文的合法性。
keepalived为LVS提供的高可用机制,并不需要我们使用ipvsadm设置集群服务,只需要在keepalived主配置文件/etc/keepalived/keepalived.conf中设置相关属性,上下文,便可以自动生成调度器对外的虚拟IP地址与集群服务规则;还可以基于脚本调用接口通过执行脚本完成脚本中所定义的规则,对后端的RS或者Directory的状态进行邮件备份等相关操作;
HA Cluster配置的前提:
1.保证各个主机之间的时间差距不超过1秒,需要使用时间服务器,让其余所有的主机都遵照其时间进行同步;如ntpd,chrony;
时间服务器:
①安装ntp软件包
yum -y install ntp
②修改配置文件:/etc/ntp.conf
③在时间服务器开启ntpd服务
其余主机:
①安装ntp包
②#ntpdate IP地址
2.各个节点之间可以通过主机名互相通信;(对于ka并非必须)
3.一定要确保iptables和selinux不会阻碍各个节点间的数据通信;
4.为了安全考虑,各个节点之间的root用户可以基于密钥认证的ssh互相通信(非必须)
安装keepalived:
yum install -y keepalived(在本地光盘中存在)
keepalived的配置文件:
主配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
我们对于keepalived的配置主要在/etc/keepalived/keepalived.conf中的三部分
①GLOBAL CONFIGURATION:用于全局配置,主要是相关邮件信息的发件人与收件人,邮件服务器的地址一般为本机即127.0.0.1;最重要的是,需要设置组播IP地址,不能与其他地址相重;
②VRRPD CONFIGURATION:用于配置调度器的相关信息,调度器的状态MASTER,BACKUP,调度器优先级,VRID以及向外的虚拟VIP地址,并留下了关于显示调度器状态变化的脚本接口,如notify_master,notify_backup,notify_fault;
③LVS CONFIGURATION:用于设置调度器下的真实服务器,设置真实服务器的RIP,PORT,权重等,最重要的是对后端RS的健康状态检测,HTTP,SSL,TCP三种检测方式,其中HTTP检测较为全面,可以针对回应时间,url内容变化判断RS的健康状态,而TCP则较为粗糙;
项目实例:
利用keepalived高可用lvs调度器,并分别使用NAT和DR模型的lvs服务负载均衡一个PHP应用,如phpMyAdmin;
DR模型下:
DR模型的配置在上一节配置过,在这里就只讲述针对于上一节的DR模型做出了哪些改变!
①keepalived的高可用首先的第一点就是要保证各个设备的时间同步,为此我们需要设置一个时间同步服务器,让其余设备对其同步;
安装时间同步软件:
yum install -y ntp
在时间服务器修改配置文件/etc/ntpd.conf(第一台调度器172.16.72.10主机)
设置那些客户端主机可以以此主机作为时间服务器:
允许172.16网段的主机
设置本机为时间服务器,上面的server全部注释掉,那些是其他网络中的时间服务器;
设置好之后启动ntpd服务
systemctl start ntpd.service
客户端主机针对该服务器校准时间:
#ntpdate 172.16.72.10(时间服务器IP)
②添加一台虚拟机作为第二台调度器,IP地址为172.16.72.4
将设置在第一台调度器上eno16777736:0的VIPdown掉,我们将在keepalived中生成虚拟的VIP;
安装keepalived在两台调度器上;
yum -y install keepalived
针对其配置文件进行配置
GLOBAL:
notification_email:邮件接收方的地址,为本机root用户;
notification_email_from:邮件发送方的地址;
smtp_server:邮件服务器IP地址;
router_id drct1:设置路由器ID,仅为了区别不同设备而已;如不修改不影响服务;
vrrp_mcast_group4 224.220.220.200: 发送vrrp通告的目的IPv4组播地址;
VRRP:
设置调度器:
state MASTER:该调度器的状态为MASTER;
interface:针对于哪个网卡接口;
priority:优先级,MASTER的优先级需要高于BACKUP的,在抢占模式下;
authentication:设置认证;
virtual_ipaddress:虚拟VIP地址;
注意:设置双实例时,只需要更改其vrrp_instance的名称,优先级与state即可;
LVS:
delay_loop:服务轮询的时间;
lb_algo:使用的调度算法;
lb_kind:使用的模型;DR or NAT;
persistence_timeout:长连接时间;
sorry_server:当后端RS全都不能工作时,在本调度器的http服务中设置sorry界面;
设置RS:
real_server后为RIP;
设置权重,在此设置的HTTP检测,对指定url进行监测,状态码为200则正常;
nb_get_retry 3:健康检测重试的次数;
delay_before_retry 1:重试之前的延迟时长;
connect_timeout 3:连接超时时长;多长时间没有回应就有问题;
将调度器1的keepalived配置好后,将相同文件传送到第二台调度器的
/etc/keepalived/keepalived.conf,进行修改;
如:172.16.72.4调度器的配置:
修改状态为BACKUP,优先级即可;
重启keepalived
#systemctl start keepalived.service
启动后keepalived设备会自动加载ipvsadm系统服务
MASTER设备会自动生成一个虚拟VIP地址:
而BACKUP设备则不会生成,但其会自动生成ipvs集群服务;
这个时候down掉MASTER设备,BACKUP设备就会自动转为MASTER设备了;
down调度器1:
#killall keepalived
#systemctl stop keepalived.service
简单测试一下基于keepalived高可用的DR集群是否生效;
编辑两个index.html文件分别在两个RS的DocumentRoot下;
因为是wrr基于权重的算法:
设置MySQL共享存储,基于NAS的NFS:
将172.16.72.7的数据库信息复制到一个目录中,并将该目录设为共享目录;由RS1 172.16.72.6挂载,并修改数据库相关配置文件/etc/my.cnf;
大概步骤:
/etc/exports:
#exportfs -ar
RS1配置:
修改/etc/my.cnf:
访问phpMyAdmin:
连续两次访问(相隔一段持久连接的访问)
由上图可知,两次访问的RS各不相同,因为之前实验很多次,所以其顺序有些奇怪;
NAT模型下:
NAT模型下的keepalived高可用,同样基于上一篇博客的nat模型,IP配置如下:
DIR1:
eno16777736:172.16.72.4
eno33554976:192.168.72.4
DIR2:
eno16777736:172.16.72.5
eno33554976:192.168.72.5
RS1:
eno16777736:192.168.72.6
RS2:
eno16777736:192.168.72.7
由keepalived高可用设备虚拟出来的IP:
VIP:
eno16777736:0 172.16.72.1/16 面向外网
DIP:
eno33554976:0 192.168.72.4/24 面向内网
①校准时间
②安装keepalived
yum install -y keepalived
③配置DIR1的keepalived
outside设置的是面对外网的VIP
inside设置的是面对内网的DIP
两者需在不同的组中,所以其virtual_router_id需要不一样以区分;
接下来的配置基本上与nat模式一般无二;
DIR2的keepalived配置:
DIR1,DIR2启动keepalived服务;在MASTER主机DIR1与BACKUP主机DIR2上自动生成相关集群服务;
至于后端RS的httpd,php-fpm,Mariadb服务,基本就与之前讲述的一样,不需要变化;
以下是我利用客户端进行的测试:无持久连接下
物理机访问phpMyAdmin:
由DIR1上:可知访问的是192.168.72.7
隔一段时间再次访问,因为设置了持久连接:
访问的是192.168.72.6了
断开DIR1的keepalived后,DIR2就自动成为MASTER:
重新启动DIR1后,DIR2就自动变为BACKUP,因为默认启动抢占模式
本文转自 wujunqi1996 51CTO博客,原文链接:http://blog.51cto.com/12480612/1976074