一:环境准备: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

  1. #
  2. # nginx service control
  3. case $1 in
  4. stop)
  5. /usr/local/nginx/sbin/nginx -s quit
  6. ;; start)
  7. /usr/local/nginx/sbin/nginx
  8. ;; reload)
  9. /usr/local/nginx/sbin/nginx -s reload
  10. ; ; *)
  11. echo "please input (start|stop|reload)"
  12. ;;
  13. esac
  14. #接下来便是准备nginx主配置文件,用于配置负载均衡加反向代理,有3种配置方案,可以进行随意搭配
  15. 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;

  1. location / {
  2. #配置反向代理至upstream地址池,由upstream分配请求至地址池中的某台机器;
  3. proxy_pass http://myweb;
  4. #设置反向代理可以获取到用户的真实IP地址;
  5. proxy_set_header Host $host;
  6. proxy_set_header X-Real-IP $remote_addr;
  7. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  8. #允许客户端请求的最大单文件字节数;
  9. client_max_body_size 10m;
  10. #缓冲区代理缓冲用户端请求的最大字节数;
  11. client_body_buffer_size 128K;
  12. #和后端服务器连接超时时间;
  13. proxy_connect_timeout 90;
  14. #接收后端服务器响应超时时间;
  15. proxy_read_timeout 90;
  16. #设置保存用户头部信息的缓冲区大小;
  17. proxy_buffer_size 4k;
  18. #高负荷下缓冲区大小;
  19. proxy_busy_buffers_size 64k;
  20. }

}

}

负载均衡加反向代理实现好之后,接下来就是安装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)的更多相关文章

  1. lvs(+keepalived)、haproxy(+heartbeat)、nginx 负载均衡的比较分析

    目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实现的负载均衡的作用,keepalived和heartbeat都是提高高可用性的,避免单点故障.那么他们为什么这么搭配,而又有什么 ...

  2. Nginx负载均衡(架构之路)

    [前言] 在大型网站中,负载均衡是有想当必要的.尤其是在同一时间访问量比较大的大型网站,例如网上商城,新闻等CMS系统,为了减轻单个服务器的处理压力,我们引进了负载均衡这一个概念,将一个服务器的压力分 ...

  3. Nginx(七):keepalived实现Nginx负载均衡服务器的双机高可用

    前言 之前咱们通过 Nginx(六):Nginx HTTP负载均衡和反向代理的配置与优化 和 Nginx+tomcat组合实现高并发场景的动静分离和负载均衡方案 这两篇文章了解了Nginx对高并发应用 ...

  4. 企业级Nginx负载均衡与keepalived高可用实战(二)keepalived篇

    1.Keepalived高可用软件 1.1.Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...

  5. 企业级Nginx负载均衡与keepalived高可用实战(一)Nginx篇

    1.集群简介 1.1.什么是集群 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器. ...

  6. Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用

    上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...

  7. Nginx+Keepalived 实现双击热备及负载均衡

    Nginx master : 10.1.58.191   Nginx负载均衡主机 Nginx  slave    : 10.1.58.181   Nginx负载均衡备机Nginx_VIP_TP: 10 ...

  8. Nginx+keepalived做双机热备加tomcat负载均衡

    Nginx+keepalived做双机热备加tomcat负载均衡 环境说明: nginx1:192.168.2.47 nginx2:192.168.2.48 tomcat1:192.168.2.49 ...

  9. Keepalived+LVS+Nginx负载均衡之高可用

    Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常 ...

随机推荐

  1. linux系统安装步骤

    在虚拟机安装OEL linux 6.5图解(64位) 一,搭建虚拟机环境 虚拟机环境建议10.0版本及以上 可以从官网上下载OELlinux的安装包,http://www.oracle.com 打开虚 ...

  2. Docker push image to Docker hub

    1. Before push image to Docker Hub, register an account in https://hub.docker.com/ 2.Input "doc ...

  3. eigen 四元数进行坐标旋转

    (<视觉SLAM十四讲>第三讲习题7)设有小萝卜一号和二号在世界坐标系中.一号位姿q1 = [0.35, 0.2, 0.3, 0.1],t1=[0.3, 0.1, 0.1].二号位姿q2= ...

  4. WPF C# 创建缩略图

    不太精确的方法: public bool ThumbnailCallback() { return false; } private void CreateThumb(int toWidth) { S ...

  5. Python实现人脸识别

    识别图片 #coding=utf-8 import requests,cv2 import re import os import bs4 #2.读取图片 filename = 'E:/Python/ ...

  6. python3 以utf-8编码写文件

    原来的 save = open('1.txt', 'w', 'utf8') 用下面的 save = codecs.open('1.txt', 'w', 'utf8')

  7. IIS安全狗问题

    1.没有安装以前网站运行正常,安装IIS全狗以后,ajaxpro2出现,找不到任何问题,卸载安全狗以后正常. 2.很久以前遇到的一个问题,有一款NET的cms系统,也是安装了安全狗以后不正常,忘记了c ...

  8. spring(二) AOP注入

    AOP概念 l  AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码 l  经典应用:事务管理.性能监视.安全检查.缓存 .日志等 l  Spring AOP使用纯Java实现,不需要专门的编译 ...

  9. :hover 鼠标同时触发两个元素变化

    HTML代码: <li> <span>4</span> <a href="#">巨型一号丝瓜水320ML</a>< ...

  10. python+ selenium&APPium自动化 page Object 设计模式

    题记: 之前公司项目比较稳定, 在进行了系统测试,想用自动化测试进行冒烟测试,或者对主要功能进行测试, 因此用到了PO模式 因此做个记录: Page Object Page Object模式是使用Se ...