nginx单点故障解决方案keepalived

阅读数:163 评论数:0

跳转到新版页面

分类

应用软件

正文

相关名词

1、nginx

一个高性能web-server和实施反向代理的软件。

2、lvs

Linux Virtual Server,Linux操作系统层面的一个高性能、高可用、负载均衡服务器。

3、keepalived

一款用来检测服务状态存活的性的软件,常用来做高可用。

4、f5

一个高性能、高可用、负载均衡的硬件设备。

5、dns轮询

通过在dns-server上对一个域名设置多个ip解析,来扩充web-server性能及实施负载均衡的技术。

keepalived安装与配置

keepalived是一个免费开源的、用C编写的软件 。

https://www.keepalived.org/download.html

1、安装

shell> cd /usr/local/src
shell> wget http://www.keepalived.org/software/keepalived-1.2.24.tar.gz
shell> tar -zxvf keepalived-1.2.24.tar.gz
shell> cd keepalived-1.2.24
shell> ./configure --prefix=/usr/local/keepalived
shell> make && make install

keepalived启动时默认会从/etc/keepalived目录下查找keepalived.conf配置文件,除非另行制定,所以需要将安装文件下带的文件复制过去。

2、开机自启动

创建keepalived.service文件

[Unit]  
Description=Keepalived  
After=syslog.target network.target remote-fs.target nss-lookup.target  
   
[Service]  
Type=forking  
PIDFile=/var/run/keepalived.pid  
ExecStart=/usr/local/keepalived/sbin/keepalived -D  
ExecReload=/bin/kill -s HUP $MAINPID  
ExecStop=/bin/kill -s QUIT $MAINPID  
PrivateTmp=true  
   
[Install]  
WantedBy=multi-user.target 

systemctl daemon-reload 重新加载

systemctl enabled keepalived.service 设置开机自动启动

systemctl disable keepalived.service 取消开机自动启动

systemctl start keepalived.service 启动

systemctl stopo keepalived.service停止

3、配置文件说明

一个功能比较完整的常用的keepalived配置文件,主要包含三块:全局定义块、VRRP实例定义块和虚拟服务器定义块。全局定义块是必须的,如果keepalived只用来做ha(不做负载均衡),虚拟服务器是可选的。下面是一个功能比较完整的配置文件模板

#全局定义块
global_defs {
    # 邮件通知配置
    notification_email {
        email1
        email2
    }
    notification_email_from email
    smtp_server host
    smtp_connect_timeout num

    lvs_id string
    router_id string    ## 标识本节点的字条串,通常为hostname
}

#VRRP 实例定义块
vrrp_sync_group string { 
    group {
        string
        string
    }
}

vrrp_instance string {
    state MASTER|BACKUP
    virtual_router_id num
    interface string
    mcast_src_ip @IP 
    priority num
    advert_int num
    nopreempt
    smtp_alert
    lvs_sync_daemon_interface string 
    authentication {
        auth_type PASS|AH
        auth_pass string
    }

    virtual_ipaddress {  # Block limited to 20 IP addresses @IP
        @IP
        @IP
    }
}

#虚拟服务器定义块
virtual_server (@IP PORT)|(fwmark num) { 
    delay_loop num
    lb_algo rr|wrr|lc|wlc|sh|dh|lblc 
    lb_kind NAT|DR|TUN
    persistence_timeout num 
    protocol TCP|UDP
    real_server @IP PORT { 
        weight num
        notify_down /path/script.sh
        TCP_CHECK { 
            connect_port num 
            connect_timeout num
        }
    }

    real_server @IP PORT {
        weight num
        MISC_CHECK {
            misc_path /path_to_script/script.sh(or misc_path “/path_to_script/script.sh <arg_list>”)
        }
    }

    real_server @IP PORT {
        weight num
        HTTP_GET|SSL_GET {
            url { 
                # You can add multiple url block path alphanum
                digest alphanum
            }
            connect_port num
            connect_timeout num 
            nb_get_retry num 
            delay_before_retry num
        }
    }
}
1、全局定义块

email通知:需要系统开启sendmail服务,建议用第三方独立监控服务,如用nagios全面监控代替。

lvs_id:lvs负载均衡器标识,在一个网络内,它的值应该是唯一的。

router_id:用户标识本节点的名称,通常为hostname。

2、VRRP实例定义块

group:至少要包含一个vrrp实例,vrrp实例名称必须和vrrp_instance定义一致。

vrrp_instance:vrrp实例体

(1)state

实例状态,只有MASTER和BACKUP两种状态,并且需要全部大写。MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的服务会自动把它的状态由BACKUP切换到MASTER状态。当失效的MASTER所在的服务恢复时,BACKUP从MASTER恢复到BACKUP状态。 

(2)interface

对外提供服务的网卡接口,即VIP绑定的网卡接口。如:eth0,eth1。当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。

(3)mcast_src_ip

本机ip地址。

(4)virtual_router_id

虚拟路由的ID号,每个节点设置必须一样,可选择IP最后一段使用,相同的 VRID 为一个组,他将决定多播的 MAC 地址。

(5)priority

节点优先级,取值范围0~254,MASTER要比BACKUP高。

(6)advert_int

MASTER与BACKUP节点间同步检查的时间间隔,单位为秒。

(7)lvs_sync_daemon_interface

负载均衡器之间的监控接口。

(8)authentication

验证类型和验证密码。类型主要有 PASS、AH 两种,通常使用PASS类型,据说AH使用时有问题。验证密码为明文,同一vrrp 实例MASTER与BACKUP使用相同的密码才能正常通信。

(9)smtp_alert

有故障时是否激活邮件通知。

(10)nopreempt

禁止抢占服务。默认情况,当MASTER服务挂掉之后,BACKUP自动升级为MASTER并接替它的任务,当MASTER服务恢复后,升级为MASTER的BACKUP服务又自动降为BACKUP,把工作权交给原MASTER。当配置了nopreempt,MASTER从挂掉到恢复,不再将服务抢占过来。
(11)virtual_ipaddress

虚拟IP地址池,可以有多个IP,每个IP占一行,不需要指定子网掩码。注意:这个IP必须与我们的设定的vip保持一致。

 

 




相关推荐

语法: rewrite regex replacement [flag] 正则表达式regex . 匹配除换行符以外的的任意字符 ? 0或1次匹配前面的字符 + 1次或多次匹配前面的

配置文件中,http区段中插入&ldquo;server_tokens&nbsp;&nbsp;off;&rdquo;,重新载入配置文件 <pre cla

原因是在nginx配置文件中配置upstream时用了&ldquo;_&rdquo;字符,如上用的tomcat_server,直接报错了。改成tomcatserver,即不使用&ldquo;_&

gzip on; #开启gzip gzip_vary on; gzip_min_length 1k; #

原因是: &nbsp; &nbsp; if 和

方案一:在proxy_pass后面加根路径 / upstream one { server localhost:

server { listen 80; server_name localhost;

map $http_upgrade $connection_upgrade { default upgrade;

使用不同的端口 server { listen 8088; server_name

^ 匹配字符串开始的位置 $ 匹配字符串结束的位置 .* .匹配任意字符串,*匹配数量0到正无穷 \. 斜杠用来转义,\.匹配. (值1|值2) 或匹配模式 i 不区分大小写