使用keepalived实现nginx的高可用
概述
是这样子的,我想让家中所有的应用服务都从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上去
Have Fun

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
EDAS - Exec cmd failed:java.net.SocketTimeoutException: timeout
背景 导入 EDAS 框架的 ECS 机器(ECU)部署应用时报错如下: Exec cmd failed:java.net.SocketTimeoutException: timeout 1)先看下 EDAS agent 进程是否启动 ps aux | grep edas-agent 2)如果没有发现 edas-agent 进程说明客户在机器导入时用转化的就有问题,先和用户确认是否有自定义系统镜像或者更改系统盘的操作,会导致此类现象的发生; 3)如果发现用户使用的自定义镜像,建议重新导入,使用公用的 Centos7.X 或者 AliLinux重新部署后如果发现如下异常,只要手动建立这个文件即可。 温习部署应用流程 够买ECS(最好选择 centos os ,如果已经购买则忽略),然后在EDAS中创建ECS集群(选择跟ECS相同的VPC),然后导
-
下一篇
成为云大使以后应该怎么推广
刚加入的云大使应该怎么推广 ①个人中心复制分享推广专属链接 ②推广的新客户访问你的推广链接建立推广关系 ③推广的新客户下单获得首购返利 ④等待后台审核 ⑤审核结束后返利进入可提取状态。 1.哪些链接可以建立推广关系 ①个人中心-右上角代金券礼包利益分享; ②个人中心推广素材中活动、文章等推广工具; ③对各类活动标有云大使可分享的内容模块等素材主动分享; 客户访问以上分享链接即建立与大使的推广关系。 2、我是小白客户,如何有效推广? 仅需3招: ①找到需要推荐客户群的活动范围,如线上群/IT论坛,线下产业园区/市镇网管; ②包装利益(代金券/活动)投放,如广告位、经验等软文; ③吸引新客户到访建立推广关系:30天推广期返利。 3、做哪些行为,更容易推广成功? 数据表明,每天花30分钟进行10次推广更容易成功: ①学习云计算等IT知识,如懂软件编写与开发,使用阿
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- 2048小游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音