keepalived容灾方案,实现nginx负载均衡主从架构(1)
一:环境准备:4台nginx服务器,两台用yum安装,两台使用源码安装
第一步:使用yum安装nginx服务器,在浏览器输入ip,可以显示以下内容,这步比较简单,安装好修改/usr/share/nginx/html/index.html就可以显示了:

第二步:使用源码部署nginx,操作步骤如下所示
~:$ yum -y install pcre-devel zlib-devel
~:$ yum -y groupinstall "Development Tools"
~:$ wget http://nginx.org/download/nginx-1.16.1.tar.gz -O /opt/nginx-1.16.1.tar.gz
~:$ tar xf /opt/nginx-1.16.1.tar.gz -C /opt/
~:$ useradd -s /sbin/nologin nginx
~:$ cd /opt/nginx-1.16.1/
/opt/nginx-1.16.1:$ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
/opt/nginx-1.16.1:$ make && make install
$ vim /usr/bin/nginxctl -- 设置nginx控制启动命令 #以下是制作一个控制命令的脚本
#!/usr/bin/env bash
#
# nginx service control
case $1 in
stop)
/usr/local/nginx/sbin/nginx -s quit
;; start)
/usr/local/nginx/sbin/nginx
;; reload)
/usr/local/nginx/sbin/nginx -s reload
; ; *)
echo "please input (start|stop|reload)"
;;
esac
#接下来便是准备nginx主配置文件,用于配置负载均衡加反向代理,有3种配置方案,可以进行随意搭配
user nginx;
worker_processes auto;
error_log logs/error.log;
events {
use epoll;#使用异步方式
worker_connections 1024;#最大并发数
}
http {
include 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 logs/loadbalance_access.log main;
sendfile on;
keepalive_timeout 65;
轮询方式:按照时间顺序依次分配请求到后端
upstream myweb01 {
server 192.168.161.21:80;
server 192.168.161.22:80;
server 192.168.161.23:80;
}
ip_hash会话保持:针对解决session会话问题
upstream myweb02 {
server 192.168.161.21:80;
server 192.168.161.22:80;
server 192.168.161.23:80;
ip_hash;
}
weight权重:用于解决后端服务器性能不均情况;权重值越大,被访问到的几率就越大;
upstream myweb03 {
server 192.168.161.21:80 weight=6;
server 192.168.161.22:80 weight=3;
server 192.168.161.23:80 backup;
}
server {
listen 80;
server_name www.bavdu.com;
location / {
#配置反向代理至upstream地址池,由upstream分配请求至地址池中的某台机器;
proxy_pass http://myweb;
#设置反向代理可以获取到用户的真实IP地址;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#允许客户端请求的最大单文件字节数;
client_max_body_size 10m;
#缓冲区代理缓冲用户端请求的最大字节数;
client_body_buffer_size 128K;
#和后端服务器连接超时时间;
proxy_connect_timeout 90;
#接收后端服务器响应超时时间;
proxy_read_timeout 90;
#设置保存用户头部信息的缓冲区大小;
proxy_buffer_size 4k;
#高负荷下缓冲区大小;
proxy_busy_buffers_size 64k;
}
}
}
负载均衡加反向代理实现好之后,接下来就是安装keepalived,主从的配置也不一样
nginx-loadbalance-master:设置vip
~:$ ifconfig ens33:1 192.168.161.100 broadcast 192.168.161.255 netmask 255.255.255.0 up
~:$ route add -host 192.168.161.100 dev ens33:1
主机安装keepalived服务
~:$ yum -y install openssl-devel popt-devel libnl-devel kernel-devel
~:$ wget https://www.keepalived.org/software/keepalived-2.0.18.tar.gz
~:$ tar xf keepalived-2.0.18.tar.gz
~:$ cd keepalived-2.0.18
keepalived-2.0.18:$ ./configure --prefix=/usr/local/keepalived
keepalived-2.0.18:$ make && make install
配置keepalived服务
~:$ mkdir -p /etc/keepalived
~:$ ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/#从机不需要此操作
~:$ systemctl start keepalived && systemctl status keepalived
~:$ cp /usr/local/keepalived/etc/keepalived/{keepalived.conf,keepalived.conf.old}
~:$ vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id loadbalance01 # 设定本机的唯一标识,一般为主机名
}
vrrp_script check_nginx_status {
script /etc/keepalived/check_nginx_status.sh # 指定脚本位置
interval 5 # 执行脚本的间隔
weight -20 # 设置脚本执行优先级
}
前提nginx要启动才会有虚拟ip出现,当nginx停止后,便会执行脚本,停止keepalived,便会进行ip漂移
vrrp_instance VI_1 {
state MASTER #标示状态为MASTER 备份机为BACKUP
interface ens33 #设置实例绑定的网卡
virtual_router_id 51 #virtual_router_id必须相同
priority 100 #MASTER权重要高于BACKUP 比如BACKUP为99
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #主从服务器验证方式
auth_type PASS
auth_pass 123456
}
virtual_ipaddress { #设置vip
192.168.161.100
}
track_script { #执行检查脚本,当检测到nginx宕掉后,把keepalived也杀死,从而进行故障转移
check_nginx_status
}
}
这个脚本是检测nginx是否运行,如果没有运行就执行杀死keepalived的进程,一旦进程杀死,虚拟ip便会漂移到从机上,
!/usr/bin/env bash
file: /etc/keepalived/check_nginx_status.sh
usage: monitor nginx status;
nginx_number=$(ps -C nginx | grep -v PID | wc -l)
if [ ${nginx_number} -eq 0 ];then
yum -y install psmisc &
killall keepalived &
fi
从机节点的设置
从节点配置
! Configuration File for keepalived
global_defs {
router_id loadbalance02
}
vrrp_script check_nginx_status {
script /etc/keepalived/check_nginx_status.sh
interval 5
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51 #必须和主设置一样
priority 99 #必须比主机的小,优先级低
advert_int 1 #1s检测一次
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.161.100 #一个虚拟ip,但是要在同网段上
}
track_script {
check_nginx_status
}
}
keepalived容灾方案,实现nginx负载均衡主从架构(1)的更多相关文章
- lvs(+keepalived)、haproxy(+heartbeat)、nginx 负载均衡的比较分析
目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实现的负载均衡的作用,keepalived和heartbeat都是提高高可用性的,避免单点故障.那么他们为什么这么搭配,而又有什么 ...
- Nginx负载均衡(架构之路)
[前言] 在大型网站中,负载均衡是有想当必要的.尤其是在同一时间访问量比较大的大型网站,例如网上商城,新闻等CMS系统,为了减轻单个服务器的处理压力,我们引进了负载均衡这一个概念,将一个服务器的压力分 ...
- Nginx(七):keepalived实现Nginx负载均衡服务器的双机高可用
前言 之前咱们通过 Nginx(六):Nginx HTTP负载均衡和反向代理的配置与优化 和 Nginx+tomcat组合实现高并发场景的动静分离和负载均衡方案 这两篇文章了解了Nginx对高并发应用 ...
- 企业级Nginx负载均衡与keepalived高可用实战(二)keepalived篇
1.Keepalived高可用软件 1.1.Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...
- 企业级Nginx负载均衡与keepalived高可用实战(一)Nginx篇
1.集群简介 1.1.什么是集群 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器. ...
- Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用
上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...
- Nginx+Keepalived 实现双击热备及负载均衡
Nginx master : 10.1.58.191 Nginx负载均衡主机 Nginx slave : 10.1.58.181 Nginx负载均衡备机Nginx_VIP_TP: 10 ...
- Nginx+keepalived做双机热备加tomcat负载均衡
Nginx+keepalived做双机热备加tomcat负载均衡 环境说明: nginx1:192.168.2.47 nginx2:192.168.2.48 tomcat1:192.168.2.49 ...
- Keepalived+LVS+Nginx负载均衡之高可用
Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常 ...
随机推荐
- 【spring boot 学习笔记】日志相关
1. 如何启用日志? maven依赖中添加:spring-boot-starter-logging <dependency> <groupId>org.springframew ...
- 【SpringBoot-创建项目】一.通过Idea创建SpringBoot项目
一.首先我们通过Idea创建一个新项目 二.选择sdk和快速构建模板 三.填写项目基本信息 三.选择项目依赖 四.填写项目名和本地项目路径 六.完成项目创建,查看项目目录层级 最终:主要是在创建项目的 ...
- 实现Callable接口,并与Future结合使用
实现步骤: 创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值. 创建 Callable 实现类的实例,使用 FutureTask ...
- 第十一周java学习总结
目录 第十一周java学习总结 学习内容 学习总结 提交代码截图 代码推送 第十一周java学习总结 学习内容 第13章 Java网络编程 主要内容 URL类 InetAdress类 套接字 UDP数 ...
- C# App.config全攻略
读语句: String str = ConfigurationManager.AppSettings["DemoKey"]; 写语句: Configuration ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_8 properties标签的使用及细节
properties 可以把数据库链接的配置放在上面的properties里面 #{占位符}的形式去引用上面的.下面的内容就是引用上面的内容的定义. 运行查询的方法测试一下 这样改造可以成功的运行程序 ...
- sql语句exists 用法
参考:SQL语句exists用法,Sql语句中IN和exists的区别及应用 现在有三张表 学生表S: sno ,sname 课程表C:cno ,cname 学生选课表SC: sno ,cno 查询选 ...
- 中国MOOC_零基础学Java语言_第3周 循环_1奇偶个数
第3周编程题 查看帮助 返回 第3周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截 ...
- oracle ogg 单实例单向简单搭建测试(oracle-oracle)
昨天突然接到消息说有一个线上的ogg出现了问题,看是否能修复,由于ogg以前玩的少,所以就加急搞了个测试环境,练习了一把 环境 db1,db2(单实例)ip: 1*,1*sid: orcl,ogg1o ...
- mysql安装及相关配置
安装下载 第一种 安装mysql安装包 //www.jb51.net/softs/451120.html 保存root密码 打开系统偏好设置,start mysql server #配置mysql e ...