负载均衡

负载均衡

应用型 LB 快速入门

腾讯云应用型负载均衡是增强型负载均衡,相比于传统型负载均衡,应用型负载均衡支持更多的功能和更强的性能。除去传统型的基本功能外,应用型负载均衡覆支持用户配置基于域名和 URL 的转发规则,支持重定向(如将 HTTP 请求重定向为 HTTPS 请求),支持 SNI 绑定多个证书等等。

本文将引导您如何初步使用腾讯云应用型负载均衡。

购买云服务器并搭建后端服务

负载均衡只负责转发流量,不具备处理请求的能力。因此,您需要有处理用户请求的云服务器实例,请先购买云服务器,并搭建后端服务。

购买云服务器 在云服务器的 选购页面 选择适合自己的机型和镜像等,设置主机的初始密码,配置安全组(此处为了测试方便,可以先选择放通全部端口,后续再做限制)。

1

本例中已经在广州地域下创建了云服务器实例 rs-1rs-2,详情请参考 购买并启动云服务器实例

  • 主机信息

    • 地域:广州。
    • 可用区:广州三区一台,广州四区一台。
    • 主机计费模式:按量计费。
    • 网络计费模式:按带宽计费。
    • 所属网络:私有网络(默认的 Default-VPC)。
  • 机器配置

    • 实例类型:S4.SMALL2(标准型 S4)。
    • 操作系统 CentOS 7.5 64位。
    • CPU:1核。
    • 内存:2GB。
    • 系统盘:50GB(普通云硬盘)。
    • 数据盘:500GB(高性能云硬盘)。
    • 公网带宽:1Mbps(必选)。

*注意:

  • 在购买云服务器时注意开通公网流量,否则会导致后续关联 CLB 后访问不通。
  • 云服务器上必须购买公网带宽,因为当前的带宽属性在 CVM 上,而非 CLB 上。

搭建后端服务

本文以 HTTP 转发为例,云服务器上必须部署相应的 Web 服务器,如 Apache、Nginx、IIS 等。为了验证结果,示例在 rs-1 上部署了 Nginx 并返回一个带有 “This is rs-1! URL is index.html” 的 HTML,在 rs-2 上部署了 Nginx 并返回一个带有 “This is rs-2! URL is image/index.html” 的 HTML。部署 Nginx 请参考 Linux(CentOS) 下部署 Nginx。有关如何在云服务器上部署服务的更多内容,请参考 Linux(CentOS) 下部署 Java WebWindows 下安装配置 PHP

验证服务

访问云服务器的公网 IP+路径,若显示为您部署好的页面,则表示服务部署成功。

购买负载均衡实例

  1. 登录腾讯云 负载均衡服务购买页
  2. 本例地域选择与云服务器相同的【广州】,实例类型选择【应用型】,网络属性选择【公网】,网络选择【Default-VPC(默认)】,实例名称填写【clb-test】。
  3. 单击【立即购买】,完成付款。 有关负载均衡实例的更多内容,请参考 产品属性选择

2

  1. 在“LB 实例列表”页,选择对应的地域即可看到新建的实例。

3

创建负载均衡监听器

负载均衡监听器通过指定协议及端口来负责实际转发。本文以负载均衡转发客户端的 HTTP 请求配置为例。

配置 HTTP 监听协议和端口

  1. 登录腾讯云控制台,单击【云产品】>【网络】>【负载均衡】,进入负载均衡控制台。
  2. 在“LB 实例列表”中,找到已创建的应用型的负载均衡实例 ·clb-test·,单击实例 ID,进入负载均衡详情页。
  3. 在“基本信息”模块,可以单击名称后的修改图标修改实例名称。
  4. 在“监听器管理”中的【HTTP/HTTPS 监听器】下,单击【新建】,新建负载均衡监听器。

4

  1. 在弹出框中,配置以下内容:
    • 名称自定义为“Listener1”。
    • 监听协议端口为 HTTP:80。
  2. 单击【提交】,创建负载均衡监听器。

配置监听器的转发规则

  1. 在“监听器管理”中,选中刚才新建的监听器 Listener1,单击【+】,开始添加规则。

5

  1. 在弹出框中,配置域名、URL 路径和均衡方式。
    • 域名:您的后端服务所使用的域名,本例使用 www.qcloudtest.com。域名支持通配符,详情请参见 配置说明。
    • URL 路径:您的后端服务的访问路径,本例使用 /image/。
    • 均衡方式选择“按权重轮询”。

6

  1. 配置健康检查:开启健康检查,检查域名使用默认的转发域名和转发路径。

7

  1. 会话保持:不勾选会话保持。
  2. 单击【完成】,完成监听器转发规则的配置。

8

有关负载均衡监听器的更多内容,请参考 负载均衡监听器概述。

注意:

  • 一个监听器(即监听协议:端口)可以配置多个域名,一个域名下可以配置多条 URL 路径,选中监听器或域名,单击【+】,号即可创建新的规则。
  • 会话保持:如果用户关闭会话保持功能,选择轮询的方式进行调度,则请求依次分配到不同后端服务器上;如果用户开启会话保持功能,或关闭会话保持功能但选择 ip_hash 的调度方式,则请求持续分配到同一台后端服务器上去。

绑定云服务器

  1. 在“监听器管理”页面,选中并展开刚才创建的监听器 Listener1,选中域名、选中 URL 路径,在屏幕右侧即可看到该 URL 路径绑定的云服务器信息,单击【绑定】。

9

  1. 在弹出框中,选择与 CLB 同地域下的云服务器实例 rs-1rs-2,设置云服务器端口均为“80”,云服务器权重均为默认值“10”。

10

  1. 单击【确定】,完成绑定。

  2. 展开监听器到 URL 路径维度,可以查看绑定的云服务器和其健康检查状态,当状态为“健康”时表示云服务器可以正常处理负载均衡转发的请求。

11

注意:

一条转发规则(监听协议 + 端口 + 域名 + URL 路径)可以绑定同一台云服务器的多个端口。如用户在 rs-1 的 80 和 81 端口部署了一样的服务,则 CLB 支持示例中的转发规则同时绑定 rs-1 的 80 和 81 端口,两个端口都会接收到 CLB 转发的请求。

验证负载均衡服务

配置完成负载均衡后,可以验证该架构是否生效,即验证通过一个 CLB 实例下不同的 域名+URL 访问不同的后端云服务器,也即验证内容路由(content-based routing) 的功能。

方法一:配置 hosts 将域名指向 CLB

  1. 在 Windows 系统中,进入 C:\Windows\System32\drivers\etc 目录,修改 hosts 文件,把域名映射到 CLB 实例的 VIP 上。

12

  1. 为了验证 hosts 是否配置成功,可以运行 cmd,用 ping 命令探测一下该域名是否成功绑定了 VIP,如有数据包,则证明绑定成功。

13

  1. 在浏览器中输入访问路径 http://www.qcloudtest.com/image/,测试负载均衡服务。如下图所示,则表示本次请求被 CLB 转发到了 rs-1 这台 CVM 上,CVM 正常处理请求并返回。

14

  1. 此监听器的轮询算法是“按权重轮询”,且两台 CVM 的权重都是“10”,刷新浏览器,再次发送请求,可以看到本次请求被 CLB 转发到了 rs-2 这台 CVM 上。

15

注意:

image// 必须保留,代表 image 是默认的目录,而不是名为 image 的文件。

方法二:配置云解析将域名指向 CLB

  1. 打开 腾讯云域名注册页面 进行域名查询和注册。本例以qcloudtest.com 为例,详情请参考 域名注册
  2. 登录 腾讯云控制台,单击【云产品】>【域名与网站】>【云解析】。
  3. 单击您所购买的【域名】,在【域名解析管理】页面单击【添加记录】按钮,为域名添加 A 记录,输入以下内容:
    • 记录类型:A记录
    • 主机记录:即域名前缀。本例以解析所有前缀为例,设为 *.qcloudtest.com
    • 线路类型:默认。
    • 记录值:单击【关联云资源】,在弹出框勾选刚刚创建的 clb-test
    • TTL:设置为默认值“600s”。
  4. 添加完毕后,单击【保存】。

云解析将该记录在 Internet 上传播需要一段时间。为测试域名是否解析正常,可以在添加完解析记录一段时间后,直接访问绑定后的 CNAME 域名(如本例中的www.qcloudtest.com)来验证负载均衡。

配置重定向功能(可选)

重定向配置分为手动重定向和自动重定向:

  • 自动重定向(强制 HTTPS):PC、手机浏览器等以 HTTP 请求访问 Web 服务,希望 CLB 代理后,返回 HTTPS 的 respond。默认强制浏览器以 HTTPS 访问网页。
  • 自定义重定向:当出现 Web 业务需要临时下线(如电商售罄、页面维护,更新升级时)会需要重定向能力。如果不做重定向,用户的收藏和搜索引擎数据库中的旧地址只能让访客得到一个404或503错误信息页面降低了用户体验度,导致访问流量白白流失,且该页面积累的搜索引擎评分也会无效。 详情请参见 重定向配置

CentOS 下部署 Nginx

本文将为您详细介绍如何在 CentOS 系统下部署 Nginx 项目,适用于刚开始使用腾讯云的个人用户。

软件版本 本文在示例步骤中的软件版本如下,在实际操作时,请您以实际软件版本为准。

  • 操作系统:CentOS 7.5
  • Nginx 版本:Nginx 1.12.2

安装 Nginx

  1. 购买完成后,在云服务器的详情页面,单击【登录】,可以直接登录云服务器,输入自己的用户名密码后,开始搭建 Nginx 环境。有关如何创建云服务器实例,请参考 创建云服务器实例。
     # 安装 n=Nginx:
     yum -y install nginx  
     # 查看 Nginx 版本
     nginx -v
     # 查看 Nginx 安装目录
     rpm -ql nginx
     # 启动 Nginx
     service nginx start
    
  2. 访问该云服务器的公网 IP 地址,出现如下页面则表示 Nginx 部署完成:

16

  1. Nginx 的默认根目录 root 是/usr/share/nginx/html,直接修改 html 下的 index.html 静态页面,用来标识这个页面的特殊性。
     vim /usr/share/nginx/html/index.html
     # 在页面中输入
     Hello nginx , This is rs-1!
     URL is index.html
    
  2. 应用型负载均衡可以根据后端服务器的路径来进行请求转发,在/image路径下部署静态页面,相关命令如下:
    # 新建目录 image
    mkdir /usr/share/nginx/html/image
    cd /usr/share/nginx/html/image
    vim index.html
    # 在页面中输入
    Hello nginx , This is rs-1!
    URL is image/index.html
    
    注意:

Nginx 的默认端口是 80,如果想修改端口请修改配置文件并重启 Nginx。

验证 Nginx 服务

访问云服务器的公网 IP+路径,如果可以显示出已部署好的静态页面,则证明 Nginx 部署成功。

  • rs-1 的 index.html 页面:

17

  • rs-1 的 /image/index.html 页面:

18

CentOS 下部署 Java Web

本文将为您详细介绍如何在 CentOS 系统下部署 Java Web 项目,适用于刚开始使用腾讯云的个人用户。

软件版本

本文在示例步骤中的软件版本如下,在实际操作时,请您以实际软件版本为准。

  • 操作系统:CentOS 7.5
  • Tomcat 版本:apache-tomcat-8.5.39
  • JDK 版本:JDK 1.8.0_201

安装JDK

购买负载均衡服务后,在云服务器的详情页面,单击【登录】,可以直接登录云服务器,输入自己的用户名密码后,开始搭建 Java Web 环境。有关如何创建云服务器实例,请参考 购买并启动云服务器实例。

下载 JDK 输入以下命令:

mkdir /usr/java  # 创建Java文件夹
cd /usr/java     # 进入Java文件夹
# 直接使用命令: wget 下载链接,下载得到的压缩包无法解压,这是因为直接下载的压缩包默认没有接受 Oracle BSD 许可;每个人的 cookie 不一样,请前往https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html页面同意许可协议并获取带有自己 cookie 的下载链接(您也可以直接下载 JDK 安装压缩包,再上传到实例上)
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz
# 解压
chmod +x jdk-8u201-linux-x64.tar.gz
tar -xzvf jdk-8u201-linux-x64.tar.gz

设置环境变量

  1. 打开 /etc/profile 文件。 vi /etc/profile
  2. 按下 i 键进入编辑模式,在该文件中添加如下信息。
     # set java environment
     export JAVA_HOME=/usr/java/jdk1.8.0_201
     export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
     export PATH=$JAVA_HOME/bin:$PATH
    
  3. 按下 Esc 键退出编辑模式,输入:wq保存并关闭文件。
  4. 加载环境变量。 source /etc/profile

查看 JDK 是否安装成功

运行java -version命令,显示 JDK 版本信息时,表示 JDK 已经安装成功。

19

安装 Tomcat

下载 Tomcat 输入以下命令:

wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.39/bin/apache-tomcat-8.5.39.tar.gz
tar -xzvf apache-tomcat-8.5.39.tar.gz
mv apache-tomcat-8.5.39 /usr/local/tomcat/

在/usr/local/tomcat/目录中包含以下文件:

  • bin:脚本文件,包含启动和关闭 Tomcat 服务脚本。
  • conf:各种全局配置文件,其中最重要的是 server.xml 和 web.xml。
  • webapps:Tomcat 的主要 Web 发布目录,默认情况下把 Web 应用文件放于此目录。
  • logs:存放 Tomcat 执行时的日志文件。

注意: 如果下载链接失效,请替换为 Tomcat 官网 的最新下载链接。

添加用户

 # 创建一般用户 www来运行Tomcat
useradd www
# 创建网站根目录
mkdir -p /data/wwwroot/default
# 将需要部署的 Java Web 项目文件 WAR 包上传到网站根目录下,然后将网站根目录下文件权限改为 www。本示例将直接在网站根目录下新建一个 Tomcat 测试页面:
echo Hello Tomcat! > /data/wwwroot/default/index.jsp
chown -R www.www /data/wwwroot

设置 JVM 内存参数

  1. 创建一个/usr/local/tomcat/bin/setenv.sh脚本文件。 vi /usr/local/tomcat/bin/setenv.sh
  2. 按下 i 键进入编辑模式,添加如下内容并保存。 JAVA_OPTS='-Djava.security.egd=file:/dev/./urandom -server -Xms256m -Xmx496m -Dfile.encoding=UTF-8' 配置 server.xml
  3. 切换到 /usr/local/tomcat/conf/ 目录。
    cd /usr/local/tomcat/conf/
    
  4. 备份 server.xml 文件。
    mv server.xml server_default.xml
    
  5. 创建一个新的 server.xml 文件。
    vi server.xml
    
  6. 按下 i 键进入编辑模式,添加如下内容。
    <?xml version="1.0" encoding="UTF-8"?>
    <Server port="8006" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
    <Listener className="org.apache.catalina.core.AprLifecycleListener"/>
    <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
    type="org.apache.catalina.UserDatabase"
    description="User database that can be updated and saved"
    factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
    pathname="conf/tomcat-users.xml"/>
    </GlobalNamingResources>
    <Service name="Catalina">
    <Connector port="8080"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    maxThreads="1000"
    minSpareThreads="20"
    acceptCount="1000"
    maxHttpHeaderSize="65536"
    debug="0"
    disableUploadTimeout="true"
    useBodyEncodingForURI="true"
    enableLookups="false"
    URIEncoding="UTF-8"/>
    <Engine name="Catalina" defaultHost="localhost">
    <Realm className="org.apache.catalina.realm.LockOutRealm">
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    resourceName="UserDatabase"/>
    </Realm>
    <Host name="localhost" appBase="/data/wwwroot/default" unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="/data/wwwroot/default" debug="0" reloadable="false" crossContext="true"/>
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    </Host>
    </Engine>
    </Service>
    </Server>
    
  7. 按 Esc 键退出编辑模式,输入:wq保存并退出编辑。

启动 Tomcat

方法一 进入 Tomcat 服务器的 bin 目录,然后执行./startup.sh命令启动 Tomcat 服务器。

cd /usr/local/tomcat/bin
./startup.sh

运行结果如下:

20

方法二

  1. 设置快捷启动,在任何地方都可以通过 service tomcat start 来启动 Tomcat。
    wget https://github.com/lj2007331/oneinstack/raw/master/init.d/Tomcat-init
    mv Tomcat-init /etc/init.d/tomcat
    chmod +x /etc/init.d/tomcat
    
  2. 运行以下命令,设置启动脚本 JAVA_HOME。
sed -i 's@^export JAVA_HOME=.*@export JAVA_HOME=/usr/java/jdk1.8.0_201@'
/etc/init.d/tomcat
  1. 设置自启动。
chkconfig --add tomcat
chkconfig tomcat on
  1. 启动 Tomcat。
# 启动 Tomcat
service tomcat start
# 查看 Tomcat 运行状态
service tomcat status
# 关闭 Tomcat
service tomcat stop

运行结果如下: 21

  1. 若提示没有权限则输入。
    cd /usr/local
    chmod -R 777 tomcat
    
  2. 在浏览器地址栏中输入 http://公网IP:端口(端口为 server.xml 中设置的 connector port)进行访问。出现下图所示页面时表示安装成功。 22

配置安全组

如果访问不通,请检查安全组。如上示例中 server.xml 中的 connector port 是 8080,因此需在对应的云服务器所绑定的安全组上放通 TCP:8080。 23