欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nginx+Keepalived实现高可用解决方案

程序员文章站 2022-07-13 09:54:55
...

Nginx有很强代理功能,但是一台nginx就形成了单点,现在使用Keepalived来解决这个问题,Keepalived的故障转移时间很短。Nginx+Keepalived双机实现Nginx反向代理服务的高可用,一台Nginx挂掉之后不影响应用也不影响内网访问外网。

Keepalived它是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

安装Keepalived

# 下载
wget​ http://www.keepalived.org/software/keepalived-1.1.20.tar.gz

根据需要选择适合自己版本的Keepalived下载。
Nginx+Keepalived实现高可用解决方案

# 解压
tar -zxvf keepalived-1.2.19.tar.gz

​进入解压后的文件中cd keepalived-1.2.19。如图有一个configure的可执行文件​:
Nginx+Keepalived实现高可用解决方案

在/usr/local文件下新建Keepalived文件夹

# 新建文件夹
mkdir /usr/local/keepalived​

# 运行configure
./configure  --prefix=/usr/local/keepalived

如图:
Nginx+Keepalived实现高可用解决方案
这里用 Nginx来负载均衡不用lvs来负载所以不用管这一行。

# 安装
make&&make install​

安装完后/usr/local/keepalived下生成四个文件夹代表安装成功。
Nginx+Keepalived实现高可用解决方案
这是/usr/local/keepalived文件夹的目录结构。
Nginx+Keepalived实现高可用解决方案
安装完以后执行以下命令以方便以后管理:

mkdir /etc/​keepalived
​ln -s /usr/local/sbin/keepalived /usr/sbin/ # 或者 ​cp /usr/local/keepalived/sbin/keepalived  /usr/sbin
cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/

# 启动Keepalived
service keepalived start

Keepalived双主配置
​主:真实IP192.168.110.134 vip192.168.110.80
备:​真实IP192.168.110.135 vip192.168.110.90

# 主服务器
vrrp_instance VI_1 {
    state MASTER                    // 定义为主服务器
    interface eth0                  //vip绑定的网卡
    priority 100                    //优先级,随机值但是主服务器的一定比从服务器的大
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.110.80              //绑定的虚拟ip
    }
}

vrrp_instance VI_2 {
    state BACKUP                    //定义为从服务器
    interface eth0                  //vip绑定的网卡
    virtual_router_id 52            //虚拟路由的id,主从必须一致
    priority 90                     //优先级,随机值但是主服务器的一定比从服务器的大
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress{
        192.168.110.90              //绑定vip
    }

# 重启Keepalived
service keepalived restart

# 查看
​ip addr

Nginx+Keepalived实现高可用解决方案

# 备服务器
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.110.80
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress{
        192.168.110.90
    }
}

测试
​主服务器正常工作时,为了方便区别验证:
Nginx+Keepalived实现高可用解决方案
主服务器关机或者服务进程死掉立马切换备服务器,切换时间人感觉不出来。
Nginx+Keepalived实现高可用解决方案

负载均衡
Nginx的 upstream默认是以轮询的方式实现负载均衡,这种方式中,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。另外一种方式是ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

​每个主服务器如下配置:

vi /etc/nginx/nginx.conf

​upstream test {
    server 127.0.0.1 down;                      //本地服务器不参与负载
    server 192.168.110.136:80 weight=5;         //后台服务器
    server 192.168.110.137:80 weight=5;         //后台服务器
    #ip_hash;
}

​location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

配置非常详细文章:https://yq.aliyun.com/articles/47355

本文转自:https://blog.csdn.net/catchupwith2/article/details/71600396,仅用于本博主防丢失。