[转载]nginx负载均衡+keepalived三主(多主)配置
nginx负载均衡+keepalived三主(多主)配置
1.实验环境,实现目标
三台主机分别配置nginx负载均衡对后端多台主机做转发,同时配置keepalived实现HA,保证任意主机出现故障时其他主机接管
serverA 192.168.1.10 VIP1:192.168.1.110
serverB 192.168.1.20 VIP2:192.168.1.120
serverC 192.168.1.30 VIP3:192.168.1.130
2.配置nginx
分别在三台主机安装nginx,配置文件相同
tar zxvf nginx-1.2.2.tar.gz
cd nginx-1.2.2
./configure –prefix=/opt/nginx –user=daemon –group=daemon
make && make install
vi /opt/nginx.conf
user daemon daemon;
worker_processes 2;
error_log /opt/nginx/logs/nginx_error.log crit;
pid /opt/nginx/logs/nginx.pid;
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
#charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
#client_max_body_size 8m;
sendfile on;
send_timeout 60;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 8 128k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
client_max_body_size 8m; #允许客户端请求的最大单个文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲请求的最大字节数,可以理解为先保存到本地再传给用户
proxy_connect_timeout 600; #跟后端服务器连接超时时间,发起握手等候响应时间
proxy_read_timeout 600; #连接成功后等待后端服务器的响应时间,已经进入后端的排队之中等候处理
proxy_send_timeout 600; #后端服务器回传时间,就是在规定时间内后端服务器必须传完所有数据
proxy_buffer_size 16k; #代理请求缓冲区,会保存用户的头信息以供nginx进行处理
proxy_buffers 4 32k; #同上,告诉nginx保存单个用几个buffer最大用多少空间
proxy_busy_buffers_size 64k; #如果系统很忙时候可以申请最大的proxy_buffers
proxy_temp_file_write_size 64k; #proxy缓存临时文件的大小
log_format access ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” $http_x_forwarded_for’;
access_log /opt/nginx/logs/access.log access;
##max_fails = 3 为允许失败的次数,默认值为1
##fail_timeout = 30s 当max_fails次失败后,暂停将请求分发到该后端服务器的时间
upstream ylx_api {
ip_hash;
server 192.168.1.124:80 max_fails=3 fail_timeout=30s;
server 192.168.1.125:80 max_fails=3 fail_timeout=30s;
}
upstream yc_api {
ip_hash;
server 192.168.1.124:80 max_fails=3 fail_timeout=30s;
server 192.168.1.125:80 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name ylxapi.linuxsee.com;
location / {
proxy_next_upstream http_502 http_504 error timeout invalid_header; #如果后端返回502、504、超时自动转发到负载均衡池
proxy_pass http://ylx_api;
proxy_set_header Host ylxapi.linuxsee.com;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log /opt/nginx/logs/ylxapi.linuxsee.com_access.log access;
}
server {
listen 80;
server_name ycapi.linuxsee.com;
location / {
proxy_pass http://yc_api;
proxy_set_header Host $host;
}
access_log /opt/nginx/logs/ ycapi.linuxsee.com_access.log access;
}
}
3.keepalived配置
tar zxvf keepalived-1.1.15.tar.gz
cd keepalived-1.1.15
./configure –prefix=/opt/keepalived –with-kernel-dir=/usr/src/kernels/2.6.18-194.el5-x86_64 && make && make install
keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管,对于以下配置,3台主机的keepalived每个实例中priority分别为serverA(200,180,160),serverB(160,200,180),serverC(180,160,200),当serverA发生故障后serverC接管VIP,serverB发生故障后serverA接管,serverC发生故障后serverB接管;
由于keepalived只检测本机和他机keepalived是否正常并实现VIP的漂移,而如果本机nginx出现故障不会则不会漂移VIP,所以编写脚本来判断本机nginx是否正常,如不正常则关闭keepalived,其他主机此时会接管VIP;
serverA配置:
vi /opt/keepalived/etc/keepalived/check_http.sh
#!/bin/bash
url=”http://192.168.1.10/index.html”
status=$(/usr/bin/curl -s –head “$url” | awk ‘/HTTP/ {print $2}’)
if [ "$status" != "200" ]; then
pkill keepalived
fi
vi /opt/keepalived/etc/keepalived/keepalived.conf.nginx.3vip
global_defs {
router_id Nginx_Id_1
}
vrrp_script chk_nginx {
script “/opt/keepalived/etc/keepalived/check_http.sh” #定义检测脚本
interval 2 #检测间隔
weight 2
}
vrrp_instance Nginx1 { #定义一个实例
state MASTER #定义为master
interface eth0
virtual_router_id 138 # 0-255 在同一个instance 中一致在整个vrrp 中唯一
priority 200 #优先级,优先级最大的会成为master
authentication {
auth_type PASS
auth_pass 1111
}
track_script { #检查脚本
chk_nginx
}
virtual_ipaddress { #此实例的浮动IP
192.168.1.110
}
}
vrrp_instance Nginx2 {
state BACKUP
interface eth0
virtual_router_id 139
priority 180
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.120
}
}
vrrp_instance Nginx3 {
state BACKUP
interface eth0
virtual_router_id 140
priority 160
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.130
}
}
serverB配置:
vi /opt/keepalived/etc/keepalived/check_http.sh
#!/bin/bash
url=”http://192.168.1.20/index.html”
status=$(/usr/bin/curl -s –head “$url” | awk ‘/HTTP/ {print $2}’)
if [ "$status" != "200" ]; then
pkill keepalived
fi
vi /opt/keepalived/etc/keepalived/keepalived.conf.nginx.3vip
global_defs {
router_id Nginx_Id_2
}
vrrp_script chk_nginx {
script “/opt/keepalived/etc/keepalived/check_http.sh”
interval 2
weight 2
}
vrrp_instance Nginx1 {
state BACKUP
interface eth0
virtual_router_id 138
priority 160
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.110
}
}
vrrp_instance Nginx2 {
state MASTER
interface eth0
virtual_router_id 139
priority 200
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.1.120
}
}
vrrp_instance Nginx3 {
state BACKUP
interface eth0
virtual_router_id 140
priority 180
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.130
}
}
serverC配置:
vi /opt/keepalived/etc/keepalived/check_http.sh
#!/bin/bash
url=”http://192.168.1.30/index.html”
status=$(/usr/bin/curl -s –head “$url” | awk ‘/HTTP/ {print $2}’)
if [ "$status" != "200" ]; then
pkill keepalived
fi
vi /opt/keepalived/etc/keepalived/keepalived.conf.nginx.3vip
global_defs {
router_id Nginx_Id_3
}
vrrp_script chk_nginx {
script “/opt/keepalived/etc/keepalived/check_http.sh”
interval 2
weight 2
}
vrrp_instance Nginx1 {
state BACKUP
interface eth0
virtual_router_id 138
priority 180
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.110
}
}
vrrp_instance Nginx2 {
state BACKUP
interface eth0
virtual_router_id 139
priority 160
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.120
}
}
vrrp_instance Nginx3 {
state MASTER
interface eth0
virtual_router_id 140
priority 200
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.1.130
}
}
转载请保留固定链接: http://www.linuxeye.com/configuration/1859.html
[转载]nginx负载均衡+keepalived三主(多主)配置的更多相关文章
- nginx负载均衡+keepalived高可用
nginx负载均衡+keepalived高可用 环境准备 192.168.88.111:nginx + keepalived MASTER 192.168.88.112:nginx + keepa ...
- nginx负载均衡高可用部署和代理配置
nginx负载均衡高可用配置 服务器A:172.16.100.2 服务器B:172.16.100.3 首先先在两台服务器上分别安装好nginx和keepalived后,再进行下面的操作 配置keepa ...
- [转载]Nginx负载均衡配置实例详解
负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦. 负载均衡 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可 ...
- 手把手教你玩转nginx负载均衡(三)----配置虚拟服务器网络
引言 虽然上一篇我们成功的启动了虚拟机,也安装好了操作系统,但是这台虚拟机和主机以及其他虚拟机是没有办法连通的,我们的目标是配置多台服务器并且配置nginx反向代理,来实现负载均衡,所以不能访问内网是 ...
- nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理
Nginx除了可以用作web服务器外,他还可以用来做高性能的反向代理服务器,它能提供稳定高效的负载均衡解决方案.nginx可以用轮询.IP哈希.URL哈希等方式调度后端服务器,同时也能提供健康检查功能 ...
- (转)nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理
Nginx除了可以用作web服务器外,他还可以用来做高性能的反向代理服务器,它能提供稳定高效的负载均衡解决方案.nginx可以用轮询.IP哈希.URL哈希等方式调度后端服务器,同时也能提供健康检查功能 ...
- day65:nginx代理&nginx负载均衡
目录 1.nginx代理 2.nginx代理与配置 3.nginx负载均衡调度多web节点(静态页面) 4.nginx负载均衡调度多应用节点(blog) 5.nginx_proxy + web应用节点 ...
- JAVAEE——宜立方商城03:Nginx负载均衡高可用、Keepalived+Nginx实现主备
1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务, ...
- Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用
上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...
随机推荐
- ORACLE 11.2.0.4 安装在 rhel6 上
. 修改host文件,添加本机的host记录 [root@RACDG ~]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain local ...
- 压缩大文件时如何限制CPU使用率?----几种CPU资源限制方法的测试说明
一.说明 我们的MySQL实例在备份后需要将数据打包压缩,部分低配机器在压缩时容易出现CPU打满导致报警的情况,需要在压缩文件时进行CPU资源的限制. 因此针对此问题进行了相关测试,就有了此文章. 二 ...
- LINQ学习笔记(三)
下面对各子句解释 from子句:查询表达式的开始子句,查询表达式必须以from子句开头. 格式:from u in source 其中u表示范围变量,它表示源序列中的每个后续元素,source为数据源 ...
- QT 线程池 + TCP 小试(三)实现最终功能
*免分资源链接点击打开链接http://download.csdn.net/detail/goldenhawking/4492378 有了TCP.线程池,我们就可以把他们连接起来.使用最简单的 QMa ...
- Qt 5.3更新无数,更改C++控制台输出最为赞(这样就和普通C++ IDE没区别了)
转载请注明文章:Qt 5.3更新无数,更改C++控制台输出最为赞 出处:多客博图 本人觉得有了这个更新,Qt Creator可谓几乎没有缺点了,起码仅仅开发C/C++,是不用再去安装VS了. Qt 5 ...
- HTML5 拖放并删除效果的简单实现
Html5 支持元素drag drop的功能需求,以后实现这类效果会简单很多.. 详细的文档说明在这里 代码如下所示:
- 让Qt在MIPS Linux上运行 good
下载 首先下载Qt everywhere,当前的版本是4.7.2,可以从nokia的网站上下载,也可以从git服务器上下载.考虑到文件有200M 以上的大小,下载速率低于25kBPS的,需要考虑从什么 ...
- T4生成整理
将一些公用的东西弄到一个类库DM.T4里面,哪个项目需要用到t4生成的话,将DM.T4的生成事件中将dll和ModelAuto.ttinclude复制到需要使用T4的项目的生成目录下,如果这样 cop ...
- Ansible的安装与使用初探
一.环境准备 网络配置 管理端:192.168.237.201 受控端:192.168.237.202.192.168.237.203(一共2台) 硬件信息 CPU:1核 内存:512MB 磁盘:10 ...
- 《C++ Primer》读书笔记 第一章
读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...