Linux学习:七层负载均衡详解2

目录

一、七层负载均衡的项目实战

1、Tomcat多实例部署

(1)复制程序文件

(2)修改端口,以启动实例。多实例之间端口不能一致。

(3)启动配置文件:

(4)将配置好的tomcat程序打包,以方便之后使用

(5)检查端口是否启动

(6)将每个实例的网页进行区分

(7)在浏览器访问,进行测试

​编辑2、配置负载均衡器

(1)先准备环境和下载nginx源码包

(2)配置文件

(3)启动nginx服务

 (4)使用命令行测试

(5)在浏览器上访问测试

二、专业负载均衡器Haproxy

1、haproxy简介

(1)haproxy的特点和优点

(2)haproxy保持会话

(3)haproxy负载均衡算法

(4)haproxy的主要工作模式

2、haproxy安装及配置文件参数

(1)haproxy安装

(2)haproxy环境

3、haproxy 实现七层负载均衡

4、haproxy实现四层负载均衡

一、七层负载均衡的项目实战

项目说明:实现tomcat多实例的负载均衡

1、Tomcat多实例部署

多虚拟主机:nginx多个server标签(域名,ip,端口)进程数量固定master+worker

多实例(多进程):同一程序启动多次,分两种情况;

第一种:一台机器跑多个站点;

第二种:一个机器跑一个站点多个实例,配合负载均衡

(1)复制程序文件

[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.81/bin/apache-tomcat-8.5.81.tar.gz --no-check-certificate

Linux学习:七层负载均衡详解2_第1张图片

如果报404错误,not found。可以在浏览器输入Index of /apache/tomcat/tomcat-8查询最新版本的tomcat,再次下载

Linux学习:七层负载均衡详解2_第2张图片

 随后需要配置jdk,由于下载比较慢。所以用本地源,在真机上上传软件包。

首先先安装lrzsz:yum -y install lrzsz

Linux学习:七层负载均衡详解2_第3张图片

 安装完后,用rz软件上传软件包。

[root@localhost ~]# rz �CCB0100000023be50e.**B0100000023be50

出现这种情况百度后发现是因为使用rz需要连接远程服务器的客户端支持,例如:finalshell、XShell等;改用finalshell连接Linux服务器后,tz命令即可正常使用

Linux学习:七层负载均衡详解2_第4张图片Linux学习:七层负载均衡详解2_第5张图片

 解压这两个软件包apache-tomcat-8.5.81.tar.gz和jdk-8u144-windows-X64.exe

[root@localhost ~]# tar xf jdk-8u161-linux-x64.tar.gz

[root@localhost ~]# tar xf apache-tomcat-8.5.81.tar.gz

 移动这两个软件到对应的文件里

[root@localhost ~]# mv apache-tomcat-8.5.81 /usr/local/tomcat [root@localhost ~]# mv jdk1.8.0_161/ /usr/local/java

配置Jdk的环境变量: vim /etc/profile.d/java.sh在这个文件里写下下面两行配置即可。

export JAVA_HOME=/usr/local/java export PATH=$JAVA_HOME/bin:$PATH

然后更新一下,就可以了,可以再检查一下:像下面这样就没什么问题了

[root@localhost ~]# source  /etc/profile.d/java.sh
[root@localhost ~]# java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

最后一步:我们需要复制两个tomcat,也就是在我们的虚拟机上需要有多个tomcat实例

[root@localhost ~]# cd /usr/local/
[root@localhost local]# ls
bin  etc  games  include  java  lib  lib64  libexec  sbin  share  src  tomcat
[root@localhost local]# cp -a tomcat/  ./tomcat8_1
[root@localhost local]# mv tomcat  ./tomcat8_2
[root@localhost local]# ls
bin  games    java  lib64    sbin   src        tomcat8_2
etc  include  lib   libexec  share  tomcat8_1
这样我们的虚拟机上就有两个tomcat实例:tomcat8_1,tomcat8_2

(2)修改端口,以启动实例。多实例之间端口不能一致。

首先修改端口:

[root@localhost local]# sed -i  's#8005#8011#;s#8080#8081#' tomcat8_1/conf/server.xml
[root@localhost local]# sed -i  's#8005#8012#;s#8080#8082#' tomcat8_2/conf/server.xml

(3)启动配置文件:

[root@localhost local]# ./tomcat8_1/bin/startup.sh
[root@localhost local]# ./tomcat8_2/bin/startup.sh
Linux学习:七层负载均衡详解2_第6张图片

查看端口是否可以正常启动:ss -tnlpLinux学习:七层负载均衡详解2_第7张图片

同时用diff命令来查看上面两个文件的不同:

diff tomcat8_1/conf/server.xml tomcat8_2/conf/server.xml 22c22

Linux学习:七层负载均衡详解2_第8张图片

(4)将配置好的tomcat程序打包,以方便之后使用

[root@localhost local]# tar zcf muti_tomcat8.tar.gz    ./tomcat8_1   ./tomcat8_2

(5)检查端口是否启动

(6)将每个实例的网页进行区分

用echo重定向一下页面,便于分辨,查看负载均衡的效果。

[root@localhost local]# echo  tomcat8081  >> ./tomcat8_1/webapps/ROOT/index.jsp
[root@localhost local]#  echo  tomcat8082  >> ./tomcat8_2/webapps/ROOT/index.jsp

(7)在浏览器访问,进行测试

 在浏览器分别输入192.168.40.131:8081和192.168.40.131:8082

Linux学习:七层负载均衡详解2_第9张图片

Linux学习:七层负载均衡详解2_第10张图片2、配置负载均衡器

(1)先准备环境和下载nginx源码包

准备环境:yum -y install gcc-c++ pcre pcre-devel zlib-devel zlib openssl openssl-devel

Linux学习:七层负载均衡详解2_第11张图片

 安装nginx源码包:

[root@localhost ~]# wget http://nginx.org/download/nginx-1.9.9.tar.gz

 安装完解压nginx:

[root@localhost ~]# tar xf nginx-1.9.9.tar.gz

编译一下:

[root@localhost ~]# cd nginx-1.9.9/
[root@localhost nginx-1.9.9]# ./configure   --prefix=/usr/local/nginx   --with-http_ssl_module   --with-stream

Linux学习:七层负载均衡详解2_第12张图片

[root@localhost nginx-1.9.9]# make

[root@localhost nginx-1.9.9]# make install
Linux学习:七层负载均衡详解2_第13张图片

 然后查看编译后的nginx文件,并备份

[root@localhost nginx-1.9.9]# cd /usr/local/
[root@localhost local]# ls
bin  etc  games  include  lib  lib64  libexec  nginx  sbin  share  src
[root@localhost local]# cd nginx
[root@localhost nginx]# ls
conf  html  logs  sbin
[root@localhost nginx]# cd conf/
[root@localhost conf]# ls
fastcgi.conf          fastcgi_params          koi-utf  mime.types          nginx.conf          scgi_params          uwsgi_params          win-utf
fastcgi.conf.default  fastcgi_params.default  koi-win  mime.types.default  nginx.conf.default  scgi_params.default  uwsgi_params.default
[root@localhost conf]# mv nginx.conf   nginx.conf.bak

(2)配置文件

过滤空格:

[root@localhost conf]# egrep '#|^$'  nginx.conf.default

过滤注释:

[root@localhost conf]# egrep -v '#|^$'  nginx.conf.default

重定向到nginx.conf

[root@localhost conf]# egrep -v '#|^$'  nginx.conf.default >> nginx.conf

打开配置文件,修改配置文件内容:

[root@localhost conf]# vim nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream  web{
        server 192.168.40.128:8081;
        server 192.168.40.128:8082;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.jsp index.htm;
            proxy_pass  http://web;
    }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

(3)启动nginx服务

先返回上一层:cd ..

启动服务:

[root@localhost nginx]# ./sbin/nginx

查看端口信息:

[root@localhost nginx]# ss -lntp
Linux学习:七层负载均衡详解2_第14张图片

 (4)使用命令行测试

使用curl命令进行测试,tail进行关键字提取

[root@localhost nginx]# curl -s 192.168.40.128|tail -1
tomcat8081
[root@localhost nginx]# curl -s 192.168.40.128|tail -1
tomcat8082

(5)在浏览器上访问测试

Linux学习:七层负载均衡详解2_第15张图片

 Linux学习:七层负载均衡详解2_第16张图片

 最终实现的效果是:在浏览器输入192.168.40.128时,浏览器会出现tomcat8081页面,刷新一次会出现tomcat8082页面。

二、专业负载均衡器Haproxy

1、haproxy简介

官网:http://www.haproxy.com

haproxy提供高可用、负载均衡以及基于TCP和Http的应用代理,支持虚拟主机,是免费、快速、并且可靠的一种负载均衡解决方案。适合处理高负载站点的七层数据请求。列斯的代理服务可以屏蔽内部真实服务器,防止内部服务器遭受攻击。

(1)haproxy的特点和优点

  • 支持原生ssl,同时支持客户端和服务器的ssl

  • 支持IPv6和unix套字节

  • 支持HTTP keep-alive

  • 支持HTTP/1.1压缩,节省宽带

  • 支持优化健康检测机制(SSL、scripted TCP、check agent……)

  • 支持7层负载均衡

  • 可靠性和稳定性非常好

  • 并发连接40000-50000个,单位时间处理最大请求20000个,最大数据处理10Gbps

  • 支持8种负载均衡算法,同时session保持

  • 支持虚拟主机

  • 支持连接拒绝,全透明代理

  • 拥有服务器状态监控页面

  • 支持ACL

(2)haproxy保持会话

haproxy为让同一客户端访问服务器可以保持会话,有三种解决方法:

客户端IP:haproxy通过客户端IP进行hash计算并保存,以此确保当相同ip访问代理服务器可以转发给固定的真实服务器

haproxy依靠真实服务器发送客户端的cookie信息进行会话保持

haproxy将保存真实服务器的session以及服务器标识,实现会话保持

(3)haproxy负载均衡算法

haproxy的负载均衡算法

  • roundrobin:基于权重轮询

  • static-rr:基于权重轮询。静态算法,运行时无法生效。

  • source:基于源IP的算法。对请求的源ip进行hash运算,将结果与后端服务器的权重总数相除后转发至某台服务器。

  • leastconn:最小连接。(适合数据库负载均衡,不适合会话短的环境)

  • url:对部分或整体url进行hash运算,再与服务器的总权重相除,最后转发到匹配端。

  • url_param:根据url路径中参数进行转发,保证在后端服务器数量不变的情况下,同一用户请求分发到同一机器。

  • hdr:根据http头转发,如果存在http头,则使用简单轮询。

(4)haproxy的主要工作模式

tcp模式:在该客户端和服务器之间将建立一个全双工的连接,且不会对7层的报文做任何处理的简单模式。

http模式:该模式下,客户端请求在转发给后端服务器之前会被深度分析,所有不与RFC格式兼容的请求都会被拒绝。

2、haproxy安装及配置文件参数

(1)haproxy安装

[root@localhost nginx]# yum -y install haproxy

(2)haproxy环境

haproxy的配置文件通常分为三部分:

  • global(全局配置部分)

  • defaults(默认配置部分)

  • listen(应用组件部分)

haproxy配置文件详解

[root@localhost nginx]# vim /etc/haproxy/haproxy.cfg全局配置
参数是进程级的,通常和操作系统(os)相关
global
    log        127.0.0.1 local2	//日志输出配置,所有日志记录在本机系统日志,通过loca10输出
    log			127.0.0.1 local2  notice //notice为日志级别,通常有24个级别。

chroot      /var/lib/haproxy    //chroot运行的路径
uid  99                         //所属运行的uid
gid  99                         //所属运行的用户组
pidfile     /var/run/haproxy.pid //haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
maxconn     4000        //默认最大连接数
user        haproxy     //
group       haproxy     //
daemon      //以后台形式运行haproxy
naproc  1    //进程数量,可以设置多个进程提高性能

3、haproxy 实现七层负载均衡

keepalived + haproxy

=================================================

(1)准备工作

web:192.168.40.135

dr:192.168.40.128

安装haproxy:​

[root@localhost ~]# yum -y install haproxy​

把原有的配置文件给拷贝一份,去掉配置文件里的空格和注释:​

[root@localhost ~]# cp -cf  /etc/haproxxy/haproxy.cfg{,.bak}
[root@localhost ~]# sed -i -r '/^[ ]*#/d' /etc/haproxy/haproxy.cfg

打开配置文件;​

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg​

配置文件如下:​

global          //关于进程的全局参数
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats
defaults     
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
    listen stats
        bind        *:1314
        stats       enable
        stats refresh      30s
        stats          hide-version
        stats uri      /haproxystats
        stats realm     Haproxy\  stats
        stats auth      qfedu:123
        stats admin     if  TRUE
     frontend  web
        mode    http
        bind    *:80
        default_backend  httpservers
backend  httpservers
        balance roundrobin
        server  http1  192.168.40.135:8081 maxconn 2000 weight 1 check inter 1s rise 2 fall 2
        server  http2  192.168.40.135:8082 maxconn 2000 weight 1 check inter 1s rise 2 fall 2​

重启haproxy服务,并检测一下端口信息:​

[root@localhost ~]# systemctl start haproxy
[root@localhost ~]# ss -ltnp​

(2)测试:然后在浏览器上输入192.168.40.128,会在两个页面轮询,也可以打开隐私窗口,会出现如下页面

Linux学习:七层负载均衡详解2_第17张图片

登录后,就可以看到监控页面,查看一些信息

Linux学习:七层负载均衡详解2_第18张图片

 这个时候我们可以准备另一台机器,安装web服务器的检测压测工具ab.指定一共访问100000次,每次并发数量300,访问的是http://。这样返回监控页面,刷新后就会有明显的变化。​

[root@localhost ~]# ab -n 100000 -c 300 http://192.168.40.128

4、haproxy实现四层负载均衡

web1:192.168.40.133

web2:192.168.40.135

dr:192.168.40.136

(1)配置环境:

在后台的web1和web2上安装mariadb​

[root@localhost ~]# yum -y install mariadb mariadb-server​

在dr上进行haproxy的配置

配置内容如下:(相较于七层负载均衡的配置,四层的配置多加了数据库,绑定了一个mysql)​

global          //关于进程的全局参数
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats
defaults     
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
    listen stats
        bind        *:1314
        stats       enable
        stats refresh      30s
        stats          hide-version
        stats uri      /haproxystats
        stats realm     Haproxy\  stats
        stats auth      qfedu:123
        stats admin     if  TRUE
     frontend  web
        mode    http
        bind    *:80
        default_backend  httpservers
backend  httpservers
        balance roundrobin
        server  http1  192.168.40.135:8081 maxconn 2000 weight 1 check inter 1s rise 2 fall 2
        server  http2  192.168.40.135:8082 maxconn 2000 weight 1 check inter 1s rise 2 fall 2
        listen mysql
        bind *:3306
        mode  tcp
        balance   roundrobin
        server mysql1 192.168.40.133:3306  weight 1 check inter 1s rise 2 fall 2
        server mysql2 192.168.40.135:3306  weight 1 check inter 1s rise 2 fall 2

然后保存退出,重新启动haproxy,用ss -tnlp查看端口是否成功开启。

(2)在web1和web2上启动mariadb

[root@localhost ~]# systemctl start mariadb

打开mysql:​

[root@localhost ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

创建一个可以由远程连接的用户:

MariaDB [(none)]> grant all on *.* to 'ha'@'%' identified by '123456';
Query OK, 0 rows affected (0.04 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.02 sec)
MariaDB [(none)]> exit
Bye

上述(2)操作,在web1和web2均作一遍

(3)在dr上远程连接mysql

首先安装mariaddb:​

[root@localhost ~]# yum -y install mariadb  mariadb-server​

注意:这里一定要注意这里的mariadb不用启动,直接可以进行下一步的远程连接即可。

远程连接数据库​

[root@localhost ~]# mysql -uhaproxy -p'123456' -h192.168.40.136

​查看库:

MariaDB [(none)]> show databases;

Linux学习:七层负载均衡详解2_第19张图片

创建一个数据库用于测试​

MariaDB [(none)]> create database haproxy;
Query OK, 1 row affected (0.00 sec)

然后退出数据库​

MariaDB [(none)]> exit
Bye

​再一次登进数据库​

[root@localhost ~]# mysql -uhaproxy -p'123456' -h192.168.40.136

查看数据库

[root@localhost ~]# mysql -uhaproxy -p'123456' -h192.168.40.136

Linux学习:七层负载均衡详解2_第20张图片

通过上图可以看出,数据库里的haproxy1并没有出现,随后创建haproxy2,退出,再次登录,查看数据库可以看到haproxy1,退出,再次登录,可以看到haproxy2。

Linux学习:七层负载均衡详解2_第21张图片

同时可以在web1和web2分别查看到数据库haproxy1和haproxy2

你可能感兴趣的:(Linux学习,linux,学习,负载均衡)