负载均衡
负载均衡
应用型 LB 快速入门
腾讯云应用型负载均衡是增强型负载均衡,相比于传统型负载均衡,应用型负载均衡支持更多的功能和更强的性能。除去传统型的基本功能外,应用型负载均衡覆支持用户配置基于域名和 URL 的转发规则,支持重定向(如将 HTTP 请求重定向为 HTTPS 请求),支持 SNI 绑定多个证书等等。
本文将引导您如何初步使用腾讯云应用型负载均衡。
购买云服务器并搭建后端服务
负载均衡只负责转发流量,不具备处理请求的能力。因此,您需要有处理用户请求的云服务器实例,请先购买云服务器,并搭建后端服务。
购买云服务器 在云服务器的 选购页面 选择适合自己的机型和镜像等,设置主机的初始密码,配置安全组(此处为了测试方便,可以先选择放通全部端口,后续再做限制)。
本例中已经在广州地域下创建了云服务器实例 rs-1
和 rs-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 Web 及Windows 下安装配置 PHP。
验证服务
访问云服务器的公网 IP+路径,若显示为您部署好的页面,则表示服务部署成功。
购买负载均衡实例
- 登录腾讯云 负载均衡服务购买页。
- 本例地域选择与云服务器相同的【广州】,实例类型选择【应用型】,网络属性选择【公网】,网络选择【Default-VPC(默认)】,实例名称填写【clb-test】。
- 单击【立即购买】,完成付款。 有关负载均衡实例的更多内容,请参考 产品属性选择 。
- 在“LB 实例列表”页,选择对应的地域即可看到新建的实例。
创建负载均衡监听器
负载均衡监听器通过指定协议及端口来负责实际转发。本文以负载均衡转发客户端的 HTTP 请求配置为例。
配置 HTTP 监听协议和端口
- 登录腾讯云控制台,单击【云产品】>【网络】>【负载均衡】,进入负载均衡控制台。
- 在“LB 实例列表”中,找到已创建的应用型的负载均衡实例 ·clb-test·,单击实例 ID,进入负载均衡详情页。
- 在“基本信息”模块,可以单击名称后的修改图标修改实例名称。
- 在“监听器管理”中的【HTTP/HTTPS 监听器】下,单击【新建】,新建负载均衡监听器。
- 在弹出框中,配置以下内容:
- 名称自定义为“Listener1”。
- 监听协议端口为 HTTP:80。
- 单击【提交】,创建负载均衡监听器。
配置监听器的转发规则
- 在“监听器管理”中,选中刚才新建的监听器 Listener1,单击【+】,开始添加规则。
- 在弹出框中,配置域名、URL 路径和均衡方式。
- 域名:您的后端服务所使用的域名,本例使用 www.qcloudtest.com。域名支持通配符,详情请参见 配置说明。
- URL 路径:您的后端服务的访问路径,本例使用 /image/。
- 均衡方式选择“按权重轮询”。
- 配置健康检查:开启健康检查,检查域名使用默认的转发域名和转发路径。
- 会话保持:不勾选会话保持。
- 单击【完成】,完成监听器转发规则的配置。
有关负载均衡监听器的更多内容,请参考 负载均衡监听器概述。
注意:
- 一个监听器(即监听协议:端口)可以配置多个域名,一个域名下可以配置多条 URL 路径,选中监听器或域名,单击【+】,号即可创建新的规则。
- 会话保持:如果用户关闭会话保持功能,选择轮询的方式进行调度,则请求依次分配到不同后端服务器上;如果用户开启会话保持功能,或关闭会话保持功能但选择 ip_hash 的调度方式,则请求持续分配到同一台后端服务器上去。
绑定云服务器
- 在“监听器管理”页面,选中并展开刚才创建的监听器 Listener1,选中域名、选中 URL 路径,在屏幕右侧即可看到该 URL 路径绑定的云服务器信息,单击【绑定】。
- 在弹出框中,选择与 CLB 同地域下的云服务器实例
rs-1
和rs-2
,设置云服务器端口均为“80”,云服务器权重均为默认值“10”。
单击【确定】,完成绑定。
展开监听器到 URL 路径维度,可以查看绑定的云服务器和其健康检查状态,当状态为“健康”时表示云服务器可以正常处理负载均衡转发的请求。
注意:
一条转发规则(监听协议 + 端口 + 域名 + URL 路径)可以绑定同一台云服务器的多个端口。如用户在 rs-1 的 80 和 81 端口部署了一样的服务,则 CLB 支持示例中的转发规则同时绑定 rs-1 的 80 和 81 端口,两个端口都会接收到 CLB 转发的请求。
验证负载均衡服务
配置完成负载均衡后,可以验证该架构是否生效,即验证通过一个 CLB 实例下不同的 域名+URL 访问不同的后端云服务器,也即验证内容路由(content-based routing) 的功能。
方法一:配置 hosts 将域名指向 CLB
- 在 Windows 系统中,进入
C:\Windows\System32\drivers\etc
目录,修改hosts
文件,把域名映射到 CLB 实例的 VIP 上。
- 为了验证 hosts 是否配置成功,可以运行 cmd,用 ping 命令探测一下该域名是否成功绑定了 VIP,如有数据包,则证明绑定成功。
- 在浏览器中输入访问路径
http://www.qcloudtest.com/image/
,测试负载均衡服务。如下图所示,则表示本次请求被 CLB 转发到了 rs-1 这台 CVM 上,CVM 正常处理请求并返回。
- 此监听器的轮询算法是“按权重轮询”,且两台 CVM 的权重都是“10”,刷新浏览器,再次发送请求,可以看到本次请求被 CLB 转发到了 rs-2 这台 CVM 上。
注意:
image/
后 /
必须保留,代表 image
是默认的目录,而不是名为 image 的文件。
方法二:配置云解析将域名指向 CLB
- 打开 腾讯云域名注册页面 进行域名查询和注册。本例以qcloudtest.com 为例,详情请参考 域名注册。
- 登录 腾讯云控制台,单击【云产品】>【域名与网站】>【云解析】。
- 单击您所购买的【域名】,在【域名解析管理】页面单击【添加记录】按钮,为域名添加 A 记录,输入以下内容:
- 记录类型:
A记录
。 - 主机记录:即域名前缀。本例以解析所有前缀为例,设为
*.qcloudtest.com
。 - 线路类型:默认。
- 记录值:单击【关联云资源】,在弹出框勾选刚刚创建的
clb-test
。 - TTL:设置为默认值“600s”。
- 记录类型:
- 添加完毕后,单击【保存】。
云解析将该记录在 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
购买完成后,在云服务器的详情页面,单击【登录】,可以直接登录云服务器,输入自己的用户名密码后,开始搭建 Nginx 环境。有关如何创建云服务器实例,请参考 创建云服务器实例。
# 安装 n=Nginx:
yum -y install nginx
# 查看 Nginx 版本
nginx -v
# 查看 Nginx 安装目录
rpm -ql nginx
# 启动 Nginx
service nginx start
访问该云服务器的公网 IP 地址,出现如下页面则表示 Nginx 部署完成:
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
应用型负载均衡可以根据后端服务器的路径来进行请求转发,在/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 页面:
- rs-1 的 /image/index.html 页面:
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
设置环境变量
- 打开 /etc/profile 文件。
vi /etc/profile
按下 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
按下 Esc 键退出编辑模式,输入:wq保存并关闭文件。
- 加载环境变量。
source /etc/profile
查看 JDK 是否安装成功
运行java -version命令,显示 JDK 版本信息时,表示 JDK 已经安装成功。
安装 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 内存参数
- 创建一个/usr/local/tomcat/bin/setenv.sh脚本文件。
vi /usr/local/tomcat/bin/setenv.sh
- 按下 i 键进入编辑模式,添加如下内容并保存。
JAVA_OPTS='-Djava.security.egd=file:/dev/./urandom -server -Xms256m -Xmx496m -Dfile.encoding=UTF-8'
配置 server.xml 切换到
/usr/local/tomcat/conf/
目录。cd /usr/local/tomcat/conf/
备份 server.xml 文件。
mv server.xml server_default.xml
创建一个新的 server.xml 文件。
vi server.xml
按下 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 "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
按 Esc 键退出编辑模式,输入:wq保存并退出编辑。
启动 Tomcat
方法一 进入 Tomcat 服务器的 bin 目录,然后执行./startup.sh命令启动 Tomcat 服务器。
cd /usr/local/tomcat/bin
./startup.sh
运行结果如下:
方法二
设置快捷启动,在任何地方都可以通过 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
运行以下命令,设置启动脚本 JAVA_HOME。
sed -i 's@^export JAVA_HOME=.*@export JAVA_HOME=/usr/java/jdk1.8.0_201@'
/etc/init.d/tomcat
- 设置自启动。
chkconfig --add tomcat
chkconfig tomcat on
- 启动 Tomcat。
# 启动 Tomcat
service tomcat start
# 查看 Tomcat 运行状态
service tomcat status
# 关闭 Tomcat
service tomcat stop
运行结果如下:
若提示没有权限则输入。
cd /usr/local
chmod -R 777 tomcat
在浏览器地址栏中输入
http://公网IP:端口
(端口为 server.xml 中设置的 connector port)进行访问。出现下图所示页面时表示安装成功。
配置安全组
如果访问不通,请检查安全组。如上示例中 server.xml 中的 connector port 是 8080,因此需在对应的云服务器所绑定的安全组上放通 TCP:8080。