集群介绍


根据功能划分为两大类:高可用和负载均衡 

高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 

实现高可用的开源软件有:heartbeat、keepalived 

负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2 

实现负载均衡的开源软件有LVS、keepalived、haproxy、nginx,商业的有F5、Netscaler


Keepalive介绍(HA集群)

HA即高可用,又叫做双机热备,用于关键性的业务,简单理解就是有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或者服务宕掉,会切换至B机器继续提供服务。

在这里我们使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验效果  

keepalived通过VRRP(Virtual Router Redundancy Protocl)来实现高可用。 

在这个协议里会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。 

master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的mater。 

Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check模块负责健康检查,vrrp模块是来实现VRRP协议的。



用keepalived配置高可用集群
keepalived下需要有一个服务来实现高可用,用nginx来代替实现服务
准备两台机器130和132,130作为master,132作为backup 两台机器都执行yum install -y keepalived 两台机器都安装nginx,其中130上已经编译安装过nginx,132上需要yum安装nginx: yum install -y nginx


设定vip为100
#vim /etc/keepalived/keepalived.conf 编辑130上keepalived配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf获取 
先清空原先配置文件的内容,用快捷键>!$,然后再将复制的文件放到#/etc/keepalived/keepalived.conf下


global_defs {                 
notification_email {            //可以不用定义aming@aminglinux.com
}
notification_email_from root@aminglinux.com
smtp_server 127.0.0.1
smtp_connect_timeout 30router_id LVS_DEVEL
}
vrrp_script chk_nginx {        //检测服务是否正常script "/usr/local/sbin/check_ng.sh"     //定义脚本路径interval 3}
vrrp_instance VI_1 {
state MASTERinterface ens33virtual_router_id 51      //主从id一致priority 100       //权重advert_int 1authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {192.168.37.100
}
track_script {
chk_nginx
}
}
#vim /usr/local/sbin/check_ng.sh130编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh获取
#!/bin/bash#时间变量,用于记录日志d=`date --date today +%Y%m%d_%H:%M:%S`#计算nginx进程数量n=`ps -C nginx --no-heading|wc -l`#如果进程为0,则启动nginx,并且再次检测nginx进程数量,#如果还为0,说明nginx无法启动,此时需要关闭keepalivedif [ $n -eq "0" ]; then/etc/init.d/nginx start
n2=`ps -C nginx --no-heading|wc -l`if [ $n2 -eq "0" ]; thenecho "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalivedfifi
#chmod 755 /usr/local/sbin/check_ng.sh                //给脚本755权限
#systemctl start  keepalived            //master上启动keepalived服务
132上#vim /etc/keepalived/keepalived.conf     编辑配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf获取
global_defs {
notification_email {
aming@aminglinux.com
}
notification_email_from root@aminglinux.com
smtp_server 127.0.0.1
smtp_connect_timeout 30router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh"interval 3}
vrrp_instance VI_1 {
state BACKUPinterface ens33virtual_router_id 51priority 90             //权重advert_int 1authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {192.168.37.100
}
track_script {
chk_nginx
}
}
132上编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh获取
#时间变量,用于记录日志d=`date --date today +%Y%m%d_%H:%M:%S`#计算nginx进程数量n=`ps -C nginx --no-heading|wc -l`#如果进程为0,则启动nginx,并且再次检测nginx进程数量,#如果还为0,说明nginx无法启动,此时需要关闭keepalivedif [ $n -eq "0" ]; thensystemctl start nginx
n2=`ps -C nginx --no-heading|wc -l`if [ $n2 -eq "0" ]; thenecho "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalivedfifi
#chmod 755 /usr/local/sbin/check_ng.sh            //给脚本755权限
132上也启动服务 #systemctl start keepalived
模拟之前先要关闭防火墙和selinux,
模拟生产环境中宕机的情况,测试高可用:
最好的手段是关闭主上的keepalived服务来测试高可用