一.使用场景介绍:
nginx做负载均衡,来达到分发请求的目的,但是不能很好的避免单点故障,假如nginx服务器挂点了,那么所有的服务也会跟着瘫痪 。keepalived+nginx,就能很好的解决这一问题。
二.原理介绍:
Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故
障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。
Keepalived 以 VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA)。VRRP(Virtual Router
Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP 协议将两台或多台路由器设备虚拟成一个
设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如
果工作正常的话就是 MASTER, 或者是通过算法选举产生, MASTER 实现针对虚拟路由器 IP 的各种网络功能,
如 ARP 请求,ICMP,以及数据的转发等;其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接收 MASTER 的
VRRP 状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP 将接管原先 MASTER 的网络功能。
VRRP 协议使用多播数据来传输 VRRP 数据, VRRP 数据使用特殊的虚拟源 MAC 地址发送数据而不是自身
网卡的 MAC 地址,VRRP 运行时只有 MASTER 路由器定时发送 VRRP 通告信息,表示 MASTER 工作正常以及虚
拟路由器 IP(组),BACKUP 只接收 VRRP 数据,不发送数据,如果一定时间内没有接收到 MASTER 的通告信
息,各 BACKUP 将宣告自己成为 MASTER,发送通告信息,重新进行 MASTER 选举状态。
三.准备工作
两台虚拟机如:
192.168.0.121 和 192.168.0.122
实例的过程如图:
四.两台虚拟机都安装好nginx和keepalived
nginx的安装我不再说明了,之前的学习已经做了笔记
1、在两台服务器安装keepalived
(1)使用yum命令进行安装(手动安装方式可百度查询)
yum install keepalived –y
(2)安装之后,在etc里面生成目录keepalived,有文件keepalived.conf
2、完成高可用配置(主从配置)
(1)修改/etc/keepalived/keepalivec.conf配置文件(两台虚拟机都要配置,注意主服务机和备份服务机配置的区别)
router_id的值是在/etc/hosts文件中,通过router_id可以访问到主机,hosts内容可以手动添加修改
#全局配置
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.17.129 smtp_connect_timeout 30 router_id LVS_DEVEL #通过router_id可以访问到主机 }
#脚本配置 vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" #检测脚本文件的位置 interval 2 #(检测脚本执行的间隔) weight 2 #权重(即当脚本中的条件成立时权重进行修改) }
#虚拟ip的配置 vrrp_instance VI_1 { state BACKUP #备份服务器上将MASTER改为BACKUP interface ens33 #网卡,及将虚拟ip绑定到哪个网卡中(ifconfig可以查看网卡) virtual_router_id 51 #主、备机的virtual_router_id必须相同(相当于一个唯一标识) priority 90 #主、备机取不同的优先级,主机值较大,备份机值较小 advert_int 1 #每隔多久发送一个心跳检测服务器是否还活着,默认1秒 authentication { #权限校验方式,这里配置的是密码校验,密码是1111 auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.17.50 #绑定的虚拟ip,可以绑定多个 } }
(2)在/usr/local/src添加检测脚本nginx_check.sh(两台虚拟机都要加)
#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx #启动nginx的路径 sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
3、把两台服务器上nginx和keepalived启动
启动nginx: ./nginx
启动keepalived: systemctl start keepalived.service
4、最终测试
(1)在浏览器地址栏输入 虚拟ip地址192.168.17.50
说明能正常访问;
在主服务器中通过ip a命令可以看到ens33中绑定的虚拟ip
(2)把主服务器(192.168.17.129)nginx和keepalived停止,再输入192.168.17.50
再进行访问:
还是能正常访问,说明主服务器出现问题之后通过脚本检查已经自动切换到了之前设置的备份服务器了
在备份服务器中也输入ip a命令可以看到此时也绑定了虚拟ip