nginx+keepalived高可用负载均衡安装配置与故障测试

目录

安装篇

                 操作环境

        安装nginx

        安装keepalived

配置篇

web服务器设置默认访问页

负载均衡分发器配置

高可用负载均衡配置

测试篇

主从分发器服务器故障测试

web服务器故障测试


安装篇

操作环境

主调度机master         192.168.42.133           nginx+keepalived

从调度机backup        192.168.42.132           nginx+keepalived

web服务器rs1           192.168.42.134           nginx

web服务器rs2           192.168.42.135           nginx

安装nginx

#安装依赖

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel lsof elinks

#安装包放置位置

cd /usr/src

tar -zxvf nginx-1.15.5.tar.gz

#编译安装

cd nginx-1.15.5

./configure –prefix=/usr/local/nginx

make && make install

#杀死nginx

yum install psmisc

killall nginx

#启动nginx

./usr/local/nginx/sbin/nginx

//检测nginx开启

lsof -i:80

COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

nginx   4191   root    6u  IPv4  21646      0t0  TCP *:http (LISTEN)

nginx   4192 nobody    6u  IPv4  21646      0t0  TCP *:http (LISTEN)

安装keepalived

Keepalived的作⽤用是检测服务器器的状态,如果有⼀一台web服务器宕机,或工作出现故障, Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器器代替该服 务器的工作,当服务器器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作 全部自动完成,不不需要人干涉,需要人工做的只是修复故障的服务器器。 协议 vrrp ,主分发器器的KP 会向网络中发组播 宣告自己还活着。

wget  http://www.keepalived.org/software/keepalived-2.0.8.tar.gz

#!/bin/bash

tar xf keepalived-2.0.8.tar.gz

yum -y install  kernel-devel

ln -s /usr/src/kernels/2.6.32-754.10.1.el6.x86_64/ /usr/src/linux

cd keepalived-2.0.8/

yum install openssl-* -y

./configure --prefix=/usr/local/keepalived

make

make install

mkdir -pv /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/

keepalived/

ln -s /usr/local/keepalived/sbin/keepalived /sbin/

 

配置篇

web服务器设置默认访问页

#web01

[root@web01 ~]# sh nginx_install

[root@web01 ~]# echo web01 > /usr/local/nginx/html/index.html

[root@web01 ~]# /usr/local/nginx/sbin/nginx

[root@web01 ~]# elinks http://localhost --dump  

#web02

[root@web02 ~]# sh nginx_install

[root@web02 ~]# echo web02 > /usr/local/nginx/html/index.html

[root@web02 ~]# yum -y install elinks &>/dev/null

[root@web02 ~]# /usr/local/nginx/sbin/nginx

[root@web02 ~]# elinks http://localhost --dump  

负载均衡分发器配置

[root@localhost ~]# cat /usr/local/nginx/conf/nginx.conf

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    laowangkeepalive_timeout  65;

    upstream web{

        server 192.168.42.134;

        server 192.168.42.135;

}

    server {

        listen       80;

        server_name  localhost;

        location / {

          proxy_pass http://web;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }}}

测试

访问分发器服务器vip时,均衡向两个web服务器发起请求

[root@localhost ~]# elinks http://192.168.42.133 -dump

   web02

[root@localhost ~]# elinks http://192.168.42.133 -dump

   web01

高可用负载均衡配置

keepalived配置文件

#cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
router_id NGINX_DEVEL
}

定义一个脚本
vrrp_script check_nginx {

脚本路径
script "/etc/keepalived/nginx_pid.sh"

每两秒运行一次
interval 2

失败次数
fall 1
}

定义一个实例集群
vrrp_instance nginx {

状态为主分发器时用master,从分发器用backup
state MASTER
interface ens33
mcast_src_ip 192.168.42.133
virtual_router_id 51

优先级100,从分发器需低于主的优先级
priority 100

探针1秒发一次组播
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {

运行监控脚本
check_nginx
}
virtual_ipaddress {
192.168.42.213/24

}
}

创建keepalived检测脚本

#chmod 755 /etc/keepalived/nginx_pid.sh
#cat /etc/keepalived/nginx_pid.sh
#!/bin/bash
nginx_kp_check () {

检测nginx服务
nginxpid=`ps -C nginx --no-header |wc -l`
if [ $nginxpid -eq 0 ];then

检测不到时启动nginx
/usr/local/nginx/sbin/nginx

1秒后继续检测
sleep 1
nginxpid=`ps -C nginx --no-header |wc -l`
if [ $nginxpid -eq 0 ];then

启动服务失败后关闭keepalived
systemctl stop keepalived
fi
fi
}
nginx_kp_check

 

 

测试篇

主从分发器服务器故障测试

访问keepalived配置的公网vip

[root@localhost ~]# elinks http://192.168.42.200 --dump

   web01

[root@localhost ~]# elinks http://192.168.42.200 --dump

   web02

停止nginx服务,nginx_pid.sh检测脚本将自动启动nginx

[root@localhost ~]# killall nginx

[root@localhost ~]# lsof -i:80

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

nginx   18462   root    6u  IPv4  59924      0t0  TCP *:http (LISTEN)

nginx   18464 nobody    6u  IPv4  59924      0t0  TCP *:http (LISTEN)

强制停止master的nginx服务,主检测脚本发现不能启动nginx,直接杀死主keepalived服务,backup自己组播vip代替master

watch -n1 killall nginx

[root@localhost keepalived]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 00:0c:29:17:46:b7 brd ff:ff:ff:ff:ff:ff

    inet 192.168.42.132/24 brd 192.168.42.255 scope global noprefixroute dynamic ens32

       valid_lft 1161sec preferred_lft 1161sec

    inet 192.168.42.200/24 scope global secondary ens32

       valid_lft forever preferred_lft forever

恢复master的keepalived服务,正常运行,backup退出vip

systemctl restart keepalived

[root@localhost keepalived]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 00:0c:29:17:46:b7 brd ff:ff:ff:ff:ff:ff

    inet 192.168.42.132/24 brd 192.168.42.255 scope global noprefixroute dynamic ens32

       valid_lft 1663sec preferred_lft 1663sec

    inet6 fe80::774a:584:ef92:f527/64 scope link noprefixroute

       valid_lft forever preferred_lft forever

web服务器故障测试

web服务器容错机制

每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越
,负载的权重就越
3.max_fails :允许请求失败的次数默认为1.当超过最次数时,返回
proxy_next_upstream 模块定义的错误
4.fail_timeout:失败超时时间,在连接Server时,如果在超时时间之内超过
max_fails指定的失败次数,会认为在fail_timeout时间内Server不可
。默认为
10s
5.backup: 其它所有的
backup机器down或者忙的时候,请求backup机器。所以这台
机器压
会最轻。

在nginx配置文件中配置rs

upstream web{

        server 192.168.42.134 max_fails=2 fail_timeout=5;

        server 192.168.42.135 max_fails=2 fail_timeout=5;

}

 

web01服务器故障,分发器自动将请求分发到web02上面,web01 nginx恢复,请求分发正常

[root@localhost ~]# killall nginx

[root@localhost ~]# lsof -i :80

[root@localhost ~]# elinks http://192.168.42.200 --dump

   web02

[root@localhost ~]# elinks http://192.168.42.200 --dump

   web02

[root@localhost ~]# elinks http://192.168.42.200 --dump

   web02

 

[root@localhost ~]# /usr/local/nginx/sbin/nginx

[root@localhost ~]# elinks http://192.168.42.200 --dump

   web02

[root@localhost ~]# elinks http://192.168.42.200 --dump

   web01     

发布了64 篇原创文章 · 获赞 9 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_39855998/article/details/86574242