目录
- 一.简介
- 二.案例
- 1.实现思路
- 2.配置文件修改
- 3.实现效果
- 故障转移机制
一.简介
以提高应用系统的可靠性,尽可能地减少中断时间为目标,确保服务的连续性,达到高可用的容错效果。例如“故障切换”、“双机热备”、“多机热备”等都属于高可用集群技术。HA的工作方式包括双工和主从两种模式,双工即所有节点同时上线,而主从只有主节点在线提供服务,当主节点出现问题后备接替出故障的主节点为用户提供服务
集群实现的方式:
在企业中一般通过软件、硬件两种方式来实现集群
企业中常用的开源集群软件有:Nginx、LVS、Haproxy、Keepalived、Heartbeat等
企业中常用的商业集群硬件有:F5、Netscaler、Radware、A10等
二.案例
1.实现思路
2.配置文件修改
主机上配置
#修改Nginx1的配置文件
vi /usr/local/nginx/conf/nginx.conf
upstream myserver {server 10.10.100.222:8080;server 10.10.100.222:8081;
}server {listen 80;server_name 10.10.100.222;#charset koi8-r;#access_log logs/host.access.log main;location / {proxy_pass http://myserver;}
#启动主节点上的tomcat/usr/local/tomcat1/bin/startup.sh/usr/local/tomcat2/bin/startup.sh
#Nginx1上安装keepalivedyum install -y keepalived#配置keepalived的配置文件
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc#邮件服务器通知地址(暂不配置,默认即可)smtp_server 192.168.200.1#邮件服务器超时时间(暂不配置,默认即可)smtp_connect_timeout 30#当前虚拟机的IP地址router_id 10.10.100.222
}vrrp_script Monitor_Nginx {script "/etc/keepalived/nginx_check.sh" #检测脚本执行的路径interval 2 #检测脚本执行的间隔weight 2 #检测脚本执行的权重
}vrrp_instance VI_1 {state MASTER #标识这个机器是MASTER还是BACKUPinterface ens192 #当前机器的网卡名称 virtual_router_id 51 #虚拟路由的编号,主备必须一致priority 100 #主、备机取不同的优先级,主机值较大,备份机值较小advert_int 1 #(VRRP Multicast广播周期秒数)authentication {auth_type PASS #(VRRP认证方式)auth_pass 1111 #(密码)}track_script {Monitor_Nginx #(调用Nginx进程检测脚本)}virtual_ipaddress {10.10.100.198 #虚拟IP地址}
}
#编写脚本
#!/bin/bashnginxpid=`ps -C nginx --no-header |wc -l`if [ $nginxpid -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 1nginxpid=`ps -C nginx --no-header |wc -l`if [ $nginxpid -eq 0 ];thensystemctl stop keepalivedfifi
脚本功能说明:统计nginx进程数量,如果进程数量的值等于0,说明nginx挂了,那么执行/usr/local/nginx/sbin/nginx去启动分发器,等待1秒后再次检查进程数量,如果进程数量的值还是等于0,则执行systemctl stop keepalived停止keepalived服务。这样就停止发组播,释放VIP,而备用服务器就开始接手工作了。
备机上配置
#安装nginx
#修改配置文件
vi /usr/local/nginx/conf/nginx.conf
upstream myserver {server 10.10.100.222:8080;server 10.10.100.222:8081;
}server {listen 80;server_name 10.10.100.222;#charset koi8-r;#access_log logs/host.access.log main;location / {proxy_pass http://myserver;}#启动nginx服务
/usr/local/nginx/sbin/nginx
一定要注意router_id、state、interface的值
#安装keepalived
yum install -y keepalived#修改keepalived的配置文件
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc#邮件服务器通知地址(暂不配置,默认即可)smtp_server 192.168.200.1#邮件服务器超时时间(暂不配置,默认即可)smtp_connect_timeout 30#当前虚拟机的IP地址router_id 10.10.100.221
}vrrp_script Monitor_Nginx {script "/etc/keepalived/nginx_check.sh" #检测脚本执行的路径interval 2 #检测脚本执行的间隔weight 2 #检测脚本执行的权重
}vrrp_instance VI_1 {state BACKUP #标识这个机器是MASTER还是BACKUPinterface ens192 #当前机器的网卡名称 virtual_router_id 51 #虚拟路由的编号,主备必须一致priority 90 #主、备机取不同的优先级,主机值较大,备份机值较小advert_int 1 #(VRRP Multicast广播周期秒数)authentication {auth_type PASS #(VRRP认证方式)auth_pass 1111 #(密码)}track_script {Monitor_Nginx #(调用Nginx进程检测脚本)}virtual_ipaddress {10.10.100.198 #虚拟IP地址}
}#编辑脚本
#!/bin/bashnginxpid=`ps -C nginx --no-header |wc -l`if [ $nginxpid -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 1nginxpid=`ps -C nginx --no-header |wc -l`if [ $nginxpid -eq 0 ];thensystemctl stop keepalivedfifi#启动keepalived服务
3.实现效果
222,221,198机器都能访问到内容
查看网络,100.198虚拟ip在主服务器上
当主机出现故障,主机上的的keepalived的服务不在了,备机开始工作
查看网络
故障转移机制
keepalived高可用服务之间故障切换转移,是通过VRRP的来实现的,在keepalived服务正常工作时,住Master节点会不断的向备节点发送(组播的方式)心跳包,用于告诉备Backup节点自己还属于存活状态,当Master节点发送故障时,就无法发送心跳包消息,备节点也就因此无法继续检测到来之Master的心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点心跳恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。