文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、docker+nginx+keepalived部署实现nginx高可用
1.原理
MASTER、BACKUP两台服务器均通过keepalived软件把ens192网卡(linux系统上使用ifconfig 命令,可以看到当前ip所在的冒号:前的信息就是网卡)绑上一个虚拟IP(VIP)地址10.1.19.141,此VIP当前由谁承载着服务就绑定在谁的ens192上,当MASTER发生故障时,BACKUP会通过/etc/keepalived/keepalived.conf文件中设置的心跳时间advert_int 1检查,无法获取MASTER正常状态的话,BACKUP会瞬间绑定VIP来接替MASTER的工作,当MASTER恢复后keepalived会通过priority(权重参数:值越大优先使用)参数判断优先权将虚拟VIP地址10.1.19.137重新绑定给MASTER的ens192网卡。
2.系统环境
2台服务器。
服务器 | 启动镜像 | VIP |
10.1.19.137 | nginx、keepalived、前端、后端 | 10.1.19.141 |
10.1.19.139 | nginx、keepalived、前端、后端 |
3.
docker部署nginx(两台服务器进行同样的操作)
1)
拉取镜像
docker pull nginx:1.19.6
创建目录:
mkdir -p /data/docker/nginx/conf/nginx.conf
新增文件
vi nginx.conf
nginx.conf的配置如下
user root;
worker_processes 8; #工作进程数,一般为cpu核心数。查看cpu核心数:grep 'core id' /proc/cpuinfo | sort -u | wc -l
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
use epoll; #Linux最常用支持大并发的事件触发机制
worker_connections 65535;
}
http {
include /etc/nginx/mime.types; #设定mime类型,类型由mime.type文件定义
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 120;
gzip on;
limit_conn_zone $binary_remote_addr zone=perip:10m; #添加limit_zone,限制同一IP并发数
include /etc/nginx/conf.d/*.conf; #包含nginx虚拟主机配置文件目录
}
创建nginx虚拟主机配置目录:
mkdir -p /data/docker/nginx/conf/conf.d
新增文件
vi loadblanceserver.conf
vi myhost.conf
loadblanceserver.conf内容如下:
server {
listen 80; #可以根据修改
server_name localhost; #可以根据修改
charset UTF-8;
location /
{
proxy_redirect off;
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://loadblanceserver;#负载均衡。根据upstream中的配置进行路由。如果upstream 使用了ip_hash算法。则同一个ip客户端访问总是会落到一个服务中。
}
# 查看nginx的并发连接数配置
location /NginxStatus
{
stub_status on;
access_log off;
auth_basic "NginxStatus";
}
access_log off;
error_page 404 /404.html;
error_page 500 502 503 504 /404.html;
location = /404.html {
root html;
}
limit_conn perip 200; #同一ip并发数为200,超过会返回503
}
myhost.conf内容如下:
upstream loadblanceserver {
#ip_hash; #相同ip会路由到同一个后端服务。会话保持.
server 10.1.19.137 max_fails=1 fail_timeout=60s;
server 10.1.19.139 max_fails=1 fail_timeout=60s;
}
创建日志保存目录
mkdir -p /data/docker/nginx/logs
3)启动容器
docker run --name nginx --restart=always -p 8080:80 -v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -v /data/docker/nginx/conf/conf.d:/etc/nginx/conf.d -v /data/docker/nginx/logs:/var/log/nginx -d nginx:1.19.6
4.docker部署keepalive(两台服务器进行同样的操作)
1)拉取镜像
docker pull osixia/keepalived:2.0.20
3)启动容器
docker run -d --net=host --cap-add=NET_ADMIN --name keepalived -v /etc/localtime:/etc/localtime -e KEEPALIVED_INTERFACE=ens192 -e KEEPALIVED_VIRTUAL_IPS="#PYTHON2BASH:['10.1.19.141']" -e KEEPALIVED_UNICAST_PEERS="#PYTHON2BASH:['10.1.19.137','10.1.19.139]" -e KEEPALIVED_PASSWORD=hello osixia/keepalived:2.0.20