欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

nginx实现集群服务器的负载均衡

程序员文章站 2024-01-23 12:25:34
...

一、概述

Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

nginx 是一个很强大的高性能Web和反向代理服务器。这里主要使用的就是nginx的反向代理功能。

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

服务器集群:是指将很多服务器集中起来一起进行同一种服务,在客户端看来就是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。

均衡负载:对于集群来说,负载均衡意味着当方向代理服务nginx接受到用户发起的请求之后,会把请求按照配置的分配方式让各个服务器摊分任务,以此来减少服务器的压力,提高性能。

二、Nginx实现负载均衡

实验环境:四台虚拟机
调度器
server1:172.25.18.1
server4:172.25.18.4
后端服务器
server2:172.25.18.2
server3:172.25.18.3

1.下载安装nginx服务(版本为1.14.0)
下载地址:(www.pkgs.org)

从物理机上下载到虚拟机:
nginx实现集群服务器的负载均衡

2.源码编译安装
编译之前编辑两个文件

[root@server1 nginx-1.14.0]# vim src/core/nginx.h

nginx实现集群服务器的负载均衡
修改14行如上,不显示nginx版本号(防止黑客)

[root@server1 nginx-1.14.0]# vim auto/cc/gcc 

nginx实现集群服务器的负载均衡
注释掉179行内容,纯净安装

编辑完成后,下载编译所需要的依赖包

[root@server1 nginx-1.14.0]# yum install -y gcc pcre-devel openssl-devel

源码编译安装三部曲:
第一步:编译nginx实现集群服务器的负载均衡
第二步:检查安装环境
第三步:安装

3.创建软连接,检测是否有错误,没错误后启动服务
nginx实现集群服务器的负载均衡

Server4做同样操作安装nginx服务,或者直接拷贝安装好的目录过去。

4.客户端访问

5.用server4实现负载均衡

首先创建一个nginx用户,然后编辑文件nginx.conf
nginx实现集群服务器的负载均衡
配置文件第二行填写自己创建的nginx用户和组,第三行为cpu个数(也可填auto自动匹配)
nginx实现集群服务器的负载均衡
第13行为默认为epoll模块(可写可不写),第14行,为最大连接数,
nginx实现集群服务器的负载均衡
定义两个RS(后端服务器)的httpd网页,如下:
nginx实现集群服务器的负载均衡
定义完成之后,需要再配置文件的最后进行调用
nginx实现集群服务器的负载均衡
因为配置文件修改了最大连接数,所以应当编辑文件/etc/security/limits.conf:
在最后添加:
nginx实现集群服务器的负载均衡
修改完成后,查看是否成功
nginx实现集群服务器的负载均衡
成功后切回root用户,重新读取nginx服务
nginx实现集群服务器的负载均衡
此时访问网页或者用真机测试,则负载均衡成功
nginx实现集群服务器的负载均衡

Ip_hash(保持连接,一开始连接的谁,就一直连接谁)

三、集群服务器的负载均衡(Nginx + rhcs)

使用红帽自带的集群管理,server1和server4搭建一个集群(ricci和luci),请参考 https://blog.csdn.net/lj_11111/article/details/80836293

1.编写nginx启动关闭脚本,加上执行权限,移动到以下目录:
脚本:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

lockfile="/var/lock/subsys/nginx"
pidfile="/usr/local/nginx/logs/${prog}.pid"

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"


start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc -p $pidfile $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest_q || return 6
    stop
    start
}

reload() {
    configtest_q || return 6
    echo -n $"Reloading $prog: "
    killproc -p $pidfile $prog -HUP
    echo
}

configtest() {
    $nginx -t -c $NGINX_CONF_FILE
}

configtest_q() {
    $nginx -t -q -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

# Upgrade the binary with no downtime.
upgrade() {
    local oldbin_pidfile="${pidfile}.oldbin"

    configtest_q || return 6
    echo -n $"Upgrading $prog: "
    killproc -p $pidfile $prog -USR2
    retval=$?
    sleep 1
    if [[ -f ${oldbin_pidfile} && -f ${pidfile} ]];  then
        killproc -p $oldbin_pidfile $prog -QUIT
        success $"$prog online upgrade"
        echo 
        return 0
    else
        failure $"$prog online upgrade"
        echo
        return 1
    fi
}

# Tell nginx to reopen logs
reopen_logs() {
    configtest_q || return 6
    echo -n $"Reopening $prog logs: "
    killproc -p $pidfile $prog -USR1
    retval=$?
    echo
    return $retval
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest|reopen_logs)
        $1
        ;;
    force-reload|upgrade) 
        rh_status_q || exit 7
        upgrade
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    status|status_q)
        rh_$1
        ;;
    condrestart|try-restart)
        rh_status_q || exit 7
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|reload|configtest|status|force-reload|upgrade|restart|reopen_logs}"
        exit 2
esac

nginx实现集群服务器的负载均衡
可以用来启动关闭服务
nginx实现集群服务器的负载均衡
Server1做同样操作;打开ricci和luci(全部设为开机自启)

搭建集群https://blog.csdn.net/lj_11111/article/details/80836293

集群搭建好以后,将上次编写的httpd改称nginx即可
添加图片

此时查看,服务在server4上面运行,如果server4宕掉,则会转到server1,使服务不断开
nginx实现集群服务器的负载均衡

如何宕掉???

nginx实现集群服务器的负载均衡

后端服务器:
server2和server3开启http服务,并设置默认发布文件

此时,客户端访问:
nginx实现集群服务器的负载均衡
高可用集群+负载均衡搭建完毕

四、使用集群管理器共享硬盘

1.在集群操作页面上remove掉nginx服务,使其不工作

2.新打开server2添加一个虚拟硬盘,查看硬盘为vdb:
nginx实现集群服务器的负载均衡
3.下载服务:[aaa@qq.com ~]# yum install scsi-* -y
下载完成后编辑文件启动服务
nginx实现集群服务器的负载均衡
编辑文件如下:去掉38–40行注释,修改39行指向刚才添加的硬盘
nginx实现集群服务器的负载均衡
server1和server4下载iscsi服务
[aaa@qq.com ~]# yum install -y iscsi-*

下载成功后指向server2
nginx实现集群服务器的负载均衡
以上操作server1 和server4都执行

4.server1执行上述操作后,会产生共享磁盘/dev/sda,给这个磁盘分区

[aaa@qq.com nodes]# fdisk -cu /dev/sda
Command (m for help): n
nginx实现集群服务器的负载均衡
分区完成后同步分区表
Server4也指向server2

[aaa@qq.com ~]# iscsiadm -m discovery -t st -p 172.25.18.2
Starting iscsid:                                           [  OK  ]
172.25.18.2:3260,1 iqn.2018-06.com.example:server.target1
[aaa@qq.com ~]# iscsiadm -m node -l

此时在server4上面可以看到server1分出来的共享磁盘
[aaa@qq.com ~]# pvcreate /dev/sda1
nginx实现集群服务器的负载均衡
Server1查看并且,然后格式化
nginx实现集群服务器的负载均衡
此时在server4可以看到server1分出来的磁盘
nginx实现集群服务器的负载均衡
将磁盘挂载,在server4上写入东西,然后在server1挂载,则可以看到
nginx实现集群服务器的负载均衡
nginx实现集群服务器的负载均衡
但是只作为本地文件写入,两者不能同时写入.

下载数据库服务

[root@server1 ~]# yum install -y mysql-server

挂载磁盘到数据库目录下
nginx实现集群服务器的负载均衡
Server1关闭了mysql,server4先挂载,然后开启,则可以同步到server1数据库的内容。
两边不可以同时写入或者挂载,否则会造成脑裂
此时在网页上关闭了挂载的服务,然后将服务写入/etc/fstab,关闭集群管理
Server1,4同时写入挂载,如下:
nginx实现集群服务器的负载均衡
然后开启集群,它会自动挂载并且开启服务。
nginx实现集群服务器的负载均衡

同时写入???