(keepalived只是解决代理的单点和地址漂流问题,因此只能对本机服务进行的Nginx服务进行健康监控检测)nginx
在部署站点规模不大的网站架构是通常一般使用keepalived+nginx来实现、从而实现轻量级的调度服务功能;用到lvs的场景不是不少,只有大规模的站点部署是才有可能用到。Nginx实现高可用,经过DNS服务解析,编辑两条A记录,从而实现真正的高可用,可是须要两个公网地址。虽然DNS调度效果不是很理想,可是有后端的nginx来为其进行优化、填坑,从而达到最理想的部署。web
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 } #vrrp1 vrrp_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" #当前节点转为“失败”状态时触发的脚本; } #vrrp2 vrrp_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 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" #当前节点转为“失败”状态时触发的脚本; } 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" #当前节点转为“失败”状态时触发的脚本; }