集群有三种:
- LB:负载均衡集群,load balancer
实现:传输层有ipvs,或者叫lvs;应用层有nginx
- HA:高可用,high avilable
实现:keepalived
衡量高可用性公式: Avilability=平均无故障时间/(平均无故障时间+平均修复时间),不能保证无故障,但是可以减少平均修复时间来提高高可用性
- HP:高性能
主要是一些科研机构,宇航局之类的高逼格的土豪单位使用的,通过横向扩展,增加服务器的数量,聚集众多性能好的服务器来计算达到解决一些复杂的问题
其它:分布式存储和分布式计算集群,
Preface
LB中的ipvs不具有健康监测的机制,而nginx却拥有健康监测机制,通过ngx_http_upstream_modules中的health_check功能实现,但是其只是针对后端的主机进行检查的,如果前端的反向代理的调度器,即nginx出现故障怎么破,即所谓的单点故障SPOF(single points of failure),于是keepalived就是解决这一问题的。。。keepalived是基于VRRP协议在linux上实现的,具体的VRRP协议的介绍可以参考华三的《VRRP技术白皮书》
Conditions
keepalived使用之前的需要注意的事项有:
- 各节点必须时间同步
- /etc/hosts 和hostname最好能对应上,各主机之间基于密钥认证
- iptables和selinux关闭
Install
keepalived从centos6.4开始被收录进base源中,因此,在centos6.4以上可以直接通过yum源直接安装,安装命令为
~]#yum install -y keepalived
Configuration
keepalived主要有两种配置模式:主备模式和主主模式
keepalived的组成主要有,在网上下载了一个图片:可以看出,由四个部分组成,分别是:核心组件、控制面板(配置文件分析器)、调度器(I/O复用器)、内存管理器
准备:
host1:
172.16.52.59
hostname: node2
host2: 172.16.52.60
hostname: node3
配置文件: /etc/keepalived/keepalived.conf
- 主备模式:
host1:
]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node2
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node2
vrrp_mcast_group4 224.52.0.1
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 38b5e5cd
}
virtual_ipaddress {
172.16.52.10
}
}
}
///global_defs 即为全局配置,notification_email为邮件接受者,notification_email_from为邮件发送者,smtp_server为邮件发送的服务器,router_id建议填写主机名,vrrp_mcast_group4 为指定一个组播地址,在这里可以省略,但是省略会造成全网广播,因此还是填上吧。。。
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 38b5e5cd
}
virtual_ipaddress {
172.16.52.10
}
}
///vrrp_instance 为指定一个虚拟实例,后面的VI_1为自定义的一个虚拟实例的名称,state指定首次的状态,可以为主MASTER,可以为备BACKUP,vitual_router_id 是指定虚拟的id号,用于区别不同的虚拟ip,因此每一组的虚拟实例的id号必须为不同的,priority是指定此主机的优先级的,和nice值不同的是,值越大,优先级越高,advert_int(advertise,int为interval)是设置通告的间隔时长的,即MASTER向其它虚拟主机的通过自己健康状态的间隔时长,默认为1秒。auth_type 可以有其它的选择,但是建议使用pass,即简单的字符认证,auth_pass最多只能有8个字符,可以使用openssl rand -hex 4命令随机生成一个,auth_pass在同一个虚拟实例的两个节点主机上面应当是一样的。virtual_ipaddr即为设置一个虚拟ip地址
host2:
]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node3
vrrp_mcast_group4 224.52.0.1
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 1
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 38b5e5cd
}
virtual_ipaddress {
172.16.52.10
}
}
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 1
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 38b5e5cd
}
virtual_ipaddress {
172.16.52.10
}
}
测试:
1.先启动服务: systemctl start keepalived.service
2.查看详细信息: systecctl -l status keepalived.service
3.查看地址: ip addr list 这里最好不要用ifconfig查看,除非virtual_ipaddress指定了dev enoxxxx:n 即指定了网卡别名或许能看到
4.停掉主服务器MASTER,观察BACKUP的ip addr list ,这里默认的是抢占模式下的
5.然后再启动服务,继续观察
- 主主模式:
host1:
]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node2
vrrp_mcast_group4 224.52.0.1
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 38b5e5cd
}
virtual_ipaddress {
172.16.52.10
}
}
vrrp_instance V_2 {
state BACKUP
interface eno16777736
virtual_router_id 2
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 0cad2f81
}
virtual_ipaddress {
172.16.52.11
}
}
host2:
]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node3
vrrp_mcast_group4 224.52.0.1
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 1
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 38b5e5cd
}
virtual_ipaddress {
172.16.52.10
}
}
vrrp_instance V_2 {
state MASTER
interface eno16777736
virtual_router_id 2
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 0cad2f81
}
virtual_ipaddress {
172.16.52.11
}
}
测试方法和主备模式一样的
说明:组播地址的介绍:
组播组可以是永久的也可以是临时的。
组播组地址中,有一部分由官方分配的,称为永久组播组。永久
组播组保持不变的是它的ip地址,组中的成员构成可以发生变化。永久
组播组中成员的数量都可以是任意的,甚至可以为零。那些没有保留下来供永久
组播组使用的ip组播地址,可以被临时组播组利用。
224.0.1.0~224.0.1.255是公用
组播地址,可以用于Internet;
224.0.2.0~238.255.255.255为用户可用的
组播地址(临时组地址),全网范围内有效;
239.0.0.0~239.255.255.255为本地管理
组播地址,仅在特定的本地范围内有效。