文档章节

使用keepalived实现nginx的高可用

bboysoulcn
 bboysoulcn
发布于 02/17 18:18
字数 1073
阅读 11
收藏 2

概述

是这样子的,我想让家中所有的应用服务都从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

© 著作权归作者所有

共有 人打赏支持
bboysoulcn
粉丝 7
博文 87
码字总数 67516
作品 0
美国
私信 提问
keepalived实现nginx的高可用(双主模型)

实验环境: RS1:rip(172.16.125.7),安装httpd软件包; RS2:rip(172.16.125.8),安装httpd软件包; director1(7-1.lcs.com):vip(172.16.125.100),dip(172.16.125.5),安装ngi...

Angry丶Bird
2018/06/26
0
0
集群介绍&keepalived介绍&用keepalived配置高可用集群

18.1 集群介绍 • Linux集群根据功能划分为两大类:高可用和负载均衡 • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 • 实现高...

影夜Linux
2018/07/07
0
0
Linux集群:搭建高可用集群

一、集群介绍 根据功能划分为两大类:高可用和负载均衡; 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务; 实现高可用的开源软件...

BatmanLinux
2018/10/24
0
0
集群介绍 keepalived介绍 用keepalived配置高可用集群

7月3日任务 18.1 集群介绍 18.2 keepalived介绍 18.3/18.4/18.5 用keepalived配置高可用集群 扩展 heartbeat和keepalived比较http://blog.csdn.net/yunhua_lee/article/details/9788433 DRB......

lyy549745
2018/07/03
0
0
Nginx+Keepalived实现站点高可用

Keepalived介绍 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负...

爪哇小贩
2016/06/23
69
0

没有更多内容

加载失败,请刷新页面

加载更多

记录replugin使用的一个坑

反复编译插件放入宿主中,一直出现如下错误: android.content.res.Resources$NotFoundException: Resource ID #0x7f050000 type #0x5 is not valid 回滚代码,重启AS还是出错。最终发现将宿...

Gemini-Lin
今天
2
0
Vert.x系列(二)--EventBusImpl源码分析

前言:Vert.x 实现了2种完成不同的eventBus: EventBusImpl(A local event bus implementation)和 它的子类 ClusteredEventBus(An event bus implementation that clusters with other Ve......

冷基
今天
2
0
Perl - 获取文件项目

参考:http://www.runoob.com/perl/perl-directories.html 下面返回JSON格式的文件列表 #!/usr/bin/perluse strict;use warnings;use utf8;use feature ':5.26';require Fi......

wffger
昨天
3
0
vue组件系列3、查询下载

直接源码,虽然样式样式不好看,逻辑也不是最优,但是可以留作纪念。毕竟以后类似的功能只需要优化就可以了,不用每次都重头开始。。。 <template> <div class="pre_upload"> <div ...

轻轻的往前走
昨天
3
0
java浅复制和深复制

之前写了数组的复制,所以这里继续总结一下浅复制和深复制。 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝。 深拷贝:对基本数据类型进行值传递,对引用数据类型,...

woshixin
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部