使用keepalived实现nginx的高可用

栏目: 服务器 · Nginx · 发布时间: 2年前

来源: www.bboysoul.com

内容简介:是这样子的,我想让家中所有的应用服务都从nginx中出去,让nginx处于访问的最边缘地带,为了让nginx可靠性加强,所以nginx就得实现高可用,分别是下面两台机器要做nginx的集群当然上面的机器同时也要安装nginx,总的架构就是文章图片那个样子

本文转载自:https://www.bboysoul.com/2019/02/17/使用keepalived实现nginx的高可用/,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。

使用keepalived实现 <a href='http://www.codercto.com/category/nginx.html'>nginx</a> 的高可用

是这样子的,我想让家中所有的应用服务都从nginx中出去,让nginx处于访问的最边缘地带,为了让nginx可靠性加强,所以nginx就得实现高可用,分别是下面两台机器要做nginx的集群

  • 10.10.10.2
  • 10.10.10.3

当然上面的机器同时也要安装nginx,总的架构就是文章图片那个样子

当主10.10.10.2挂了的时候可以自动切换到备10.10.10.3上的nginx,这样就实现了nginx的高可用

文中的后端应用服务可以有很多个不单单只有一个web网站

dns解析

我们从头开始

首先用户访问 www.bboysoul.com这个网站要经过dns解析,所以我们要在dns服务器上加一条www.bboysoul.com到10.10.10.10的解析,我使用的dns服务器是dnsmasq,这个怎么安装使用我就不详细解释了,想要了解的可以在我的博客里面搜索

address=/www.bboysoul.com/10.10.10.10

之后用户就访问到了我们的vip,这个时候就是下一步安装keepalived的时候

安装配置keepalived

安装keepalived,记得两台机器都要安装哦

yum install keepalived

之后修改配置文件,同样两台机器都要 修改

vim /etc/keepalived/keepalived.conf

主的keepalived配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.10/24
    }
}

从的keepalived配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.10/24
    }
}

两个配置文件其实就是

priority 99

state BACKUP

两个地方不一样

之后重启服务,两台机器都要重启

systemctl restart keepalived

接着我们就是在这两台机器上安装nginx来实现反向代理,为了简单呢,我直接使用docker去安装nginx

安装nginx,下面的操作两台机器都要操作

首先clone我nginx的docker-compose配置文件

git clone https://github.com/bboysoulcn/awesome-dockercompose.git

cd awesome-dockercompose/nginx

启动nginx

docker-compose up -d

之后修改配置文件

vim /var/lib/docker/volumes/nginx_nginx-etc/_data/nginx.conf

user  nginx;
worker_processes  4;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;

    # bboysoul web upstream
    proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=bboysoul-tmp:100m inactive=7d max_size=1000g;
    upstream bboysoul-web {
    	server 10.10.10.112:8080;
    }
    server {
        listen       80;
        server_name  www.bboysoul.com;
        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;
	    proxy_pass http://bboysoul-web/;
	    proxy_cache bboysoul-tmp;
	    proxy_cache_valid  200 206 304 301 302 10d;
	    proxy_cache_key $uri;
	}
    }

    include /etc/nginx/conf.d/*.conf;
}

之后重启容器

docker-compose restart

最后我们就要安装一个后端应用服务来做测试

安装后端应用服务

同样的,上面我们再nginx上配置了后端应用服务的地址是10.10.10.112:8080

所以我们要在10.10.10.112:8080上启动一个服务,为了方便我们直接使用docker来起一个服务

在10.10.10.112上

cd awesome-dockercompose/visualizer

docker-compose up -d

之后我们访问这个服务,直接在浏览器上输入 www.bboysoul.com

如果看到visualizer的界面就表示成功了

测试

接着我们来到10.10.10.2和10.10.10.3这两台机器上

首先执行

systemctl enable keepalived

让keepalived可以开机启动

并且都执行下面的命令来看nginx的日志

docker logs -f nginx

之后我们在浏览器上访问www.bboysoul.com

不出意外的话10.10.10.2上nginx是会有日志的,也就是说我们访问的是10.10.10.2上的nginx

之后我们模拟10.10.10.2宕机,直接在10.10.10.2上执行reboot

接着快速切换到浏览器上访问 www.bboysoul.com如果不出意外的话是可以访问的并且我们访问的是10.10.10.3上的nginx,当10.10.10.2重启完成之后你会发现流量又回到了10.10.10.2上去

欢迎关注Bboysoul的博客www.bboysoul.com

Have Fun


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

关注码农网公众号

关注我们,获取更多IT资讯^_^


查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人人都是产品经理——写给产品新人

人人都是产品经理——写给产品新人

苏杰 / 电子工业出版社 / 2017-6 / 66.60

《人人都是产品经理——写给产品新人》为经典畅销书《人人都是产品经理》的内容升级版本,和《人人都是产品经理2.0——写给泛产品经理》相当于上下册的关系。对于大量成长起来的优秀互联网产品经理、众多想投身产品工作的其他岗位从业者,以及更多有志从事这一职业的学生而言,这《人人都是产品经理——写给产品新人》曾是他们记忆深刻的启蒙读物、思想基石和行动手册。作者以分享经历与体会为出发点,以“朋友间聊聊如何做产品......一起来看看 《人人都是产品经理——写给产品新人》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具