本文共 5719 字,大约阅读时间需要 19 分钟。
(keepalived只是解决代理的单点和地址漂流问题,所以只能对本机服务进行的Nginx服务进行健康监控检测)
在部署站点规模不大的网站架构是一般通常使用keepalived+nginx来实现、从而实现轻量级的调度服务功能;用到lvs的场景不是很多,只有大规模的站点部署是才有可能用到。Nginx实现高可用,通过DNS服务解析,编辑两条A记录,从而实现真正的高可用,但是需要两个公网地址。虽然DNS调度效果不是很理想,但是有后端的nginx来为其进行优化、填坑,从而达到最理想的部署。
http {}中配置
upstream websrvs { #定义组 server 10.10.10.111:80 weight=1; #定义组内站点,权重都为1 server 10.10.10.112:80 weight=1; #定义组内站点,权重都为1}
server {}中配置
location / {proxy_pass http://websrvs; #引用定义的组 }Keepalived配置文件#vrrp中
Server-1:
[root@keepalived-1 keepalived]# cat keepalived.conf! Configuration File for keepalived#全局配置global_defs {notification_email { root@loaclhost #定义收件人地址 }notification_email_from keepalived@localhost #邮件发件人地址 smtp_server 127.0.0.1 #发送邮件服务器地址smtp_connect_timeout 10 #连接邮件服务器的超时时间 router_id 10.10.10.101 #当前路由的id信息网络中的节点标识(物理IP地址或主机名)vrrp_mcast_group4 224.0.122.22 #组播地址}#脚本实现本机nginx服务运行状态监控vrrp_script chk_ngx{ script "killall -0 nginx" #使用killall命令探测nginx服务运行是否正常,从而实现健康检测。 interval 1 weight -5}#vrrp1vrrp_instance VI_1 { #一个虚拟路由器的标识, state MASTER #一个虚拟路由器的标识, interface ens33 # 绑定为当前虚拟路由器使用的物理接口;一般为网卡地址;virtual_router_id 11 #当前虚拟路由器的惟一标识(相同组的两台机器必须一致) priority 100 #当前主机在此虚拟路径器中的优先级;范围1-254; advert_int 1 #vrrp通告的时间间隔;心跳间隔时间。authentication { #认证方式为:域共享密钥auth_type PASS auth_pass 11112222 #最多不要超过8位 }virtual_ipaddress {10.10.1.1/16 dev ens33 #(接口辅助地址,vip地址,虚拟地址) }#调用服务监控 track_script { #调用vrrp内部定义指令,跟踪所指定执行脚本的健康状态 chk_ngx #调用vrrp中定义的chk_ngx }#监控接口 track_interface { ens33 #追踪/监控 接口 }#触发通知脚本notify_master "/etc/keepalived/keepmail.sh master" #当前节点成为主节点时触发的脚本;notify_backup "/etc/keepalived/keepmail.sh backup" #当前节点转为备节点时触发的脚本;notify_fault "/etc/keepalived/keepmail.sh fault" #当前节点转为“失败”状态时触发的脚本;}#vrrp2vrrp_instance VI_2 { #一个虚拟路由器的标识, state BACKUP #重要选项,初始或状态;只能有一个是MASTER,余下的都应该为BACKUP; interface ens33 # 绑定为当前虚拟路由器使用的物理接口;一般为网卡地址;virtual_router_id 22 #当前虚拟路由器的惟一标识(相同组的两台机器必须一致) priority 98 #当前主机在此虚拟路径器中的优先级;范围1-254; advert_int 1 #vrrp通告的时间间隔;心跳间隔时间。authentication { auth_type PASS #认证方式为:域共享密钥 auth_pass 11112222 #最多不要超过8位 } virtual_ipaddress {10.10.1.2/16 dev ens33 #(接口辅助地址,vip地址,虚拟地址) }#调用服务监控 track_script { #调用vrrp内部定义指令,跟踪所指定执行脚本的健康状态 chk_ngx #调用vrrp中定义的chk_ngx }#监控接口 track_interface { ens33 #追踪/监控 接口 }#触发通知脚本 notify_master "/etc/keepalived/keepmail.sh master" #当前节点成为主节点时触发的脚本;notify_backup "/etc/keepalived/keepmail.sh backup" #当前节点转为备节点时触发的脚本;notify_fault "/etc/keepalived/keepmail.sh fault" #当前节点转为“失败”状态时触发的脚本;}
Server-2:
[root@keepalived-2 keepalived]# cat keepalived.conf! Configuration File for keepalived#全局配置global_defs {notification_email { #定义收件人地址root@localhost }notification_email_from keepalived@localhost #邮件发件人地址smtp_server 127.0.0.1 #发送邮件服务器地址smtp_connect_timeout 10 #连接邮件服务器的超时时间router_id 10.10.10.102 #当前路由的id信息网络中的节点标识(物理IP地址或主机名)vrrp_mcast_group4 224.0.122.22 #组播地址}#脚本实现本机nginx服务监控vrrp_script chk_ngx { script "killall -0 nginx" interval 1 weight -5}vrrp_instance VI_1 { #一个虚拟路由器的标识,state BACKUP #重要选项,初始或状态;只能有一个是MASTER,余下的都应该为BACKUP;interface ens33 # 绑定为当前虚拟路由器使用的物理接口;一般为网卡地址;virtual_router_id 11 #当前虚拟路由器的惟一标识(相同组的两台机器必须一致) priority 98 #当前主机在此虚拟路径器中的优先级;范围1-254;advert_int 1 #vrrp通告的时间间隔;心跳间隔时间。authentication { #认证方式为:域共享密钥auth_type PASSauth_pass 11112222 #最多不要超过8位}virtual_ipaddress { 10.10.1.1/16 dev ens33 #(接口辅助地址,vip地址,虚拟地址)#调用服务监控 track_script { #调用vrrp内部定义指令,跟踪所指定执行脚本的健康状态 chk_ngx #调用vrrp中定义的chk_ngx }#监控接口 track_interface { ens33 #追踪/监控 接口 }#触发通知脚本notify_master "/etc/keepalived/keepmail.sh master" #当前节点成为主节点时触发的脚本;notify_backup "/etc/keepalived/keepmail.sh backup" #当前节点转为备节点时触发的脚本;notify_fault "/etc/keepalived/keepmail.sh fault" #当前节点转为“失败”状态时触发的脚本;}vrrp_instance VI_2 { #一个虚拟路由器的标识,state MASTER #重要选项,初始或状态;只能有一个是MASTER,余下的都应该为BACKUP;interface ens33 # 绑定为当前虚拟路由器使用的物理接口;一般为网卡地址;virtual_router_id 22 #当前虚拟路由器的惟一标识(相同组的两台机器必须一致)priority 100 #当前主机在此虚拟路径器中的优先级;范围1-254;advert_int 1 #vrrp通告的时间间隔;心跳间隔时间。 authentication { auth_type PASS #认证方式为:域共享密钥auth_pass 11112222 #最多不要超过8位 }virtual_ipaddress { 10.10.1.2/16 dev ens33 #(接口辅助地址,vip地址,虚拟地址)}#调用服务监控 track_script { #调用vrrp内部定义指令,跟踪所指定执行脚本的健康状态 chk_ngx #调用vrrp中定义的chk_ngx }#监控接口 track_interface { ens33 #追踪/监控 接口 }#触发通知脚本 notify_master "/etc/keepalived/keepmail.sh master" #当前节点成为主节点时触发的脚本;notify_backup "/etc/keepalived/keepmail.sh backup" #当前节点转为备节点时触发的脚本;notify_fault "/etc/keepalived/keepmail.sh fault" #当前节点转为“失败”状态时触发的脚本; }
转载于:https://blog.51cto.com/12105235/2125128