频道栏目
首页 > 程序开发 > 软件开发 > 其他 > 正文
负载均衡相关知识学习
2016-07-04 09:24:37      个评论    来源:readerloop 虚拟化 资源  
收藏   我要投稿

负载均衡学习笔记

负载均衡的目的:提高效率和性能。我认为将不同的应用或者应用的不同部分分离开,增强各自的处理能力,是负载均衡最核心的理念。比如将数据库服务器和web服务器分离就是负载均衡的一种。

负载均衡理念

资源

(1) 处理器(CPU) (2) 内存 (3) 网络 (4) 存储(硬盘)

通过分配资源来提高应用的运行效率是负载均衡的核心。

负载均衡的主要实现途径

(1) 将应用分划到若干服务器上,通过这些服务器来进项负载均衡(例如将微博服务器和数据库服务器分开)。 (2) 给应用增加特定的模块来平衡每块应用功能需要的计算量;例如缓存创建的网站数据,从而节省从硬盘读取数据的时间,或从数据库内容中产生这些数据的时间,等等。 (3)创建额外的服务器来共享负载;它能有效增加服务器上完成的任务所需的计算能力。

原则

(1) 深入理解系统 (2) 规划 (3) 检测和测试

对网站进行负载均衡

nginx优点:高性能、事件驱动,以及可作为轻量级解决方案。他的内存占用了非常低,而这正是提高网站速度要解决的问题。

web服务器负载测试工具
* (1) httperf

# httperf demon
httperf --server Server02 --uri /index.html --num-conns 20000 --add-header='Accept-Encoding:gzip,deflate\n'

对于测量结果我们要重点关注服务器响应方面的数据,如下截图中红色圈起的内容:
\

加速Apache HTTP

(1) 禁用空载模块 (2) 禁用DNS查询 (3) 采用压缩
切记,压缩数据并非不费吹灰之力,相反他会给服务器带来额外的负载。 (4) FollwSymLinks和SymLinksIfOwnerMatch选项

加速nginx

(1) worker_processes和worker_cpu_affinity (2) Gzip压缩

对web服务器进行负载均衡

将所有到网站的连接请求通过一台或多台负载均衡服务器分发到多个不同的web服务器上。

\
* (1) 配置
* (2) 准备IPVS(ip虚拟服务器)服务器

# 安装ipvs服务
yum install ipvsadm

权重最小连接调度方式:即他会将入向连接转发给链接最少,权重最高的工作服务器
* (3) 准备工作服务器
* (4) 测试负载均衡器

为了保证web服务器卡上所有的静态数据保持同步,可使用景象工具,如rsync,来同步新近修改过的文件
* (5) 划分动态和静态内容

nginx对许多静态数据来说有高性能服务器,apache http对处理动态数据-例如php页面效率更高。

对数据库进行负载均衡

MySQL Cluster:开源的高性能的事务性数据库。它专门为高性能和强容错性而设计,保存任何一个数据节点的数据都会自动复制并存储到其他数据库节点。(网络数据库:Network Database)。在前端由知名的MySQL server 来处理sql查询;它会跟msyql cluster提供的NDB存储引擎通信,存储引擎会请求集群节点来处理查询,并将结果发回给发送最初请的MySQL Server.
\

术语:

(NIC:网卡)

(LoadBalancer:集群管理服务器)

# 安装MySQL Cluster
wget https://www.mysql.com/get/Downloads/MySQL-Cluster-7.1/mysql-cluster-gpl-7.1.15-linux-i686-glibc23.tar.gz
tar xzf mysql-cluster-gpl-7.1.15-linux-i686-glibc23.tar.gz
cd mysql-cluster-gpl-7.1.15-linux-i686-glibc23
mv bin/ndb_mgm /usr/local/bin/
mv bin/ndb_mgmd /usr/local/bin
chmod +x /usr/local/bin/ndb_mg*

MySQL Cluster配置文件:

\

对网络进行负载均衡

术语:

(NLB:网络负载均衡)
(路由:IP提供寻址,通过互联发送数据到目的地的过程)
(NAT:网络地址转换)
(PAT: 端口地址转换,属于NAP的一种)

用户连接的整个过程,如下截图:

\

通过上述过程,你能清楚的看到那些地方已经做了负载均衡,那些地方尚未做负载均衡。

TCP连接工作方式:
* (1) 客户端想服务器发送初始报文请求连接
* (2) 服务器响应,客户端和服务器进行握手,双方建立通信规则
* (3) 握手完成后,双方进入数据传送状态,互传数据。

TCP/UDP 二者的主要差异在于,UDP是无状态的,TCP是状态协议

IPVS常用的5种调度系统:
* 基于轮询的调度算法(Round-Robin)
* 加权轮询调度(Weighted Round-Robin)
* 基于最小连接的调度算法(Least-Connections)
* 加权最小连接调度(Weighted Least-Connections)
* 基于局部性的调度算法(Locality-Based Least-Connections)

CentOS 安装IPVS :

yum install -y ipvsadm

IPVS 的配置:

# 添加公网: -s rr 制定调度算法
ipvsadm -A -t 178.250.53.225:80 -s rr
# 添加工作服务器: -w 2 制定权值
ipvsadm -a -t 18.250.53.225:80 -r 192.168.1.2:80 -m -w 2 
ipvsadm -a -t 18.250.53.225:80 -r 192.168.1.3:80 -m
# 切换调度算法
ipvsadm -E -t 178.250.53.225:80 -s wrr

对SSL进行负载均衡

TSL作为如今保证互联网安全的手段之一,但是他给本身就捉襟见肘的HTTP服务器带来了额外的复杂度,因此常规HTTP服务器的负载会随着引入TSL带来的额外开销明显增加

术语:

(SSL:安全套接层)

(TSL:传输层安全)

公钥密码学(Publc-Key Cryptography)=非对称密码学(Asymmetcric Cryoptography)

对称密钥加密(Symmetric Key Encription):用同一密钥对报文进行加密

非对称密钥加密:加密与解密的密码不同看,往往,加密密钥公开,解密密码不公开。

TSL加密过程:
\

SSL负载均衡的不变之处,每个连接都要占用一个证书和一个会话,即无法在多台服务器间分担SSL数据流。因此SSL负载常用的方式:SSL加速(SSL Acceleration)和SSL前端(SSL Termination)

SSL前端

简单来说,可以创建一个节点来处理(终结)到网站的所有SSL连接,之后再将处理过的连接分发给服务器。这意味着,后面的服务器根本不用考虑SSL.

SSL加速

加速则需要特制的硬件设备。

配置web服务器上的SSL

创建自签名证书
#生成private.key文件和private.csr文件
openssl genrsa -des3 -out private.key 1024
openssl req -new private.key -out private.csr
cp private.key private.bkp
openssl rsa -in private.key.bkp -out private.key
# 生成证书
openssl x509 -days 365 -in private.csr -signkey private.key private.csr
额配置web服务器上的SSL(nginx)
server {
    listen 443 default_server ssl;
    server_name localhost;
    root html;
    index index.html index.htm;

    ssl on;
    ssl_certificate /etc/ssl/certs/private.crt;
    ssl_certificate_key /etc/ssl/private/private.key;
}
在nginx上启用SSL加速
# 找到nginx配置文件中的Server条目,加入以下内容:
ssl_engine 
配置nginx的反向代理
server {
    # 服务器基本信息
    listen 443;
    server_name memcache.plb.membrey.hk
    # 启用SSL并进行详细设置
    ssl on;
    ssl_certificate /etc/ssl/certs/private.crt;
    ssl_certificate_key /etc/ssl/private/private.key; 
    # 日志文件
    access_log /var/log/ssl-access.log;
    error_log /var/log/ssl-error.log;

    location / {
        proxy_pass http;//192.168.1.2;
        proxy_nex_upstream error timeout invalid_header http_500 http_502 http_503;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_redirect off;
    }
}

使用集群提高可用性

集群(Cluster)和高可用性(High Availatility,HA);高可用性,即网站保持一直在线并可用的能力,实现这个目标的主要途径就是通过冗余——准备一个备用系统来接管。

单一故障点

它是个单一系统,如果它出现了故障,整个系统都会无法工作。一下都是存在单一故障点的系统:
\

\

集群化

是指创建一组用于相同用途的服务器:分担负载,以及在某个集群成员出现故障时,由其余成员来处理该成员的额负载。

备用模式(Standby Mode)
* 冷状态
* 暖状态
* 热状态

 IPVS故障恢复

ipvsadm、ldirectord、heartbeat

# 安装集群软件包
yum install -y ipvsadm,ldirectord,heartbeat

云端负载均衡

云计算

一个允许用户购买,远程创建,动态扩展,以及管理系统的全自动服务器平台。

虚拟化

一种创建运行与真实服务器集群上的虚拟服务器的方法。

虚拟化管理器
一个在物理服务器上充当资源分配和硬件抽象层的软件。裸机虚拟化管理器;托管虚拟化管理器。

\

如今,市场上两种类型的都有若干种,最致命的如下。
裸机:
* VMware
* HyperV
托管:
* VMware Player
* VirtualBox
* Xen

虚拟化资源

存储、网络带宽、内存、

管理虚拟资源

云的弹性

用云服务器工作

点击复制链接 与好友分享!回本站首页
相关TAG标签 知识学习
上一篇:bash基本特性
下一篇:maven学习笔记
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站