Keepalived+nginx实现高可用


(keepalived只是解决代理的单点和地址漂流问题,所以只能对本机服务进行健康监控检测)


在部署站点规模不大的网站架构是一般通常使用keepalived+nginx来实现、从而实现轻量级的调度服务功能;用到lvs的场景不是很多,只有大规模的站点部署是才有可能用到。Nginx实现高可用,通过DNS服务解析,编辑两条A记录,从而实现真正的高可用,但是需要两个公网地址。虽然DNS调度效果不是很理想,但是有后端的nginx来为其进行优化、填坑,从而达到最理想的部署。
Keepalived+nginx实现高可用


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中

Keepalived+nginx的配置文件参考示例:(仅供参考)

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"       #当前节点转为“失败”状态时触发的脚本;
 }

猜你喜欢

转载自blog.51cto.com/12105235/2125128
今日推荐