keepalived容灾方案,实现nginx负载均衡主从架构(1) 轮询方式:按照时间顺序依次分配请求到后端 ip_hash会话保持:针对解决session会话问题 weight权重:用于解决后端服务器性能不均情况;权重值越大,被访问到的几率就越大; 负载均衡加反向代理实现好之后,接下来就是安装keepalived,主从的配置也不一样 前提nginx要启动才会有虚拟ip出现,当nginx停止后,便会执行脚本,停止keepalived,便会进行ip漂移 这个脚本是检测nginx是否运行,如果没有运行就执行杀死keepalived的进程,一旦进程杀死,虚拟ip便会漂移到从机上, !/usr/bin/env bash file: /etc/keepalived/check_nginx_status.sh usage: monitor nginx status; 从机节点的设置 从节点配置

一:环境准备:4台nginx服务器,两台用yum安装,两台使用源码安装
第一步:使用yum安装nginx服务器,在浏览器输入ip,可以显示以下内容,这步比较简单,安装好修改/usr/share/nginx/html/index.html就可以显示了:
keepalived容灾方案,实现nginx负载均衡主从架构(1)
轮询方式:按照时间顺序依次分配请求到后端
ip_hash会话保持:针对解决session会话问题
weight权重:用于解决后端服务器性能不均情况;权重值越大,被访问到的几率就越大;
负载均衡加反向代理实现好之后,接下来就是安装keepalived,主从的配置也不一样
前提nginx要启动才会有虚拟ip出现,当nginx停止后,便会执行脚本,停止keepalived,便会进行ip漂移
这个脚本是检测nginx是否运行,如果没有运行就执行杀死keepalived的进程,一旦进程杀死,虚拟ip便会漂移到从机上,
!/usr/bin/env bash
file: /etc/keepalived/check_nginx_status.sh
usage: monitor nginx status;
从机节点的设置
从节点配置
第二步:使用源码部署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
}
}