第一章 负载均衡1.1 集群代理功能分类1.1.1 LD(负载均衡)代理服务器通过负载均衡算法, 将客户端的该并发请求策略行的分发到后端服务器处理, 实现请求的分布式处理, 应对高并发场景1.1.2 HA(高可用)代理服务通过健康检查机制, 来监听后端服务器的状态, 实现集群的高可用, 保证服务的不间断运行1.2 负载均衡1.2.1 负载均衡的设备软件负载均衡: LVS, HAproxy, nginx硬件负载均衡: F5:BIG-IP, A101.2.2 负载均衡实现方式http重定向七层反向代理负载均衡原理: 反向代理服务器接收用户请求, 之后将请求通过负载均衡算法, 将请求分发给后端服务器优点: 部署简单, 处于http协议层面的负载均衡缺点: 使用反向代理服务器, 后端服务器不能暴露给用户, 因此代理服务器需要双网卡, 实现与客户机和服务器的通信四层ip网络层负载均衡原理: 在网络层与传输层, 通过修改请求的目标地址, 实现负载均衡, 当代理服务器接收到请求后, 会修改请求的目标地址, 将请求转发给服务器, 当代理服务器接收到服务器的响应后, 将响应的源地址修改为代理服务器地址, 之后将响应信息发送给客户端优点: 在响应请求时, 比反向代理服务器的负载均衡块缺点: 不能处理更高级的请求数据链路层负载均衡原理: 在网络层, 代理服务器与服务器设置相同的虚拟ip, 在数据链路层, 修改MAC地址实现负载均衡, 当代理服务器接收客户端请求后, 将目标地址的mac地址修改为后端服务器的MAC地址, 之后有后端服务器直接将响应信息返回给客户端优点: 代理服务器不需要再进行IP地址的转换, 数据响应时, 不在经过代理服务器缺点: 负载均衡器的网卡宽带要求高硬件设备实现负载均衡:1.2.3 四层负载与七层负载四层负载均衡的实现方式: LVS七层负载均衡的实现方式: nginx, HAproxy1.3 LVS1.3.1 工作模式NET转发: 客户端访问代理服务器, 请求封装客户机ip与代理服务器公网IP, 之后代理服务器接收请求, 将请求的代理服务器公网ip改为后端服务器IP, 之后请求交给服务器处理, 服务器在响应中封装服务器IP与客户机IP, 之后将响应信息交给代理服务器, 代理服务器将响应中的后端服务器IP修改为代理服务器公网IP, 之后将响应信息发送给客户机DR直接路由: 客户机访问代理服务器, 请求封装客户机IP与代理服务器虚拟IP(代理器与后端服务器设置有相同的虚拟IP), 之后代理服务器收请求, 将请求的目标MAC地址修改改为后端服务器的MAC地址, 之后将请求转发给后端服务器, 后端服务器处理请求后, 响应信息封装虚拟IP与客户端IP, 并将响应信息发送给客户端TUN-IP隧道模式:注意:net中, 后端服务器的网关必须指向代理服务器内网ip, 否则响应服务送达客户端net模式中, 代理服务器需要两张网卡, 一张设置公网ip, 保证客户机与代理服务器的通信, 另一张设置内网IP, 保证代理服务器与后端服务器的通信dr模式中, 代理服务器与后端服务器需要设置相同的虚拟IP, 保证后端服务器能直接将响应信息发送给客户机net, dr, 隧道的区别:net模式:1.4 负载均衡算法1.4.1 静态调服法RR(轮循): 将请求平均的分配给每台服务器WRR(权重): 将请求按照设置的权重比, 分配给服务器1.4.2 动态调服法LC(最少连接): 将请求动态的分配给建立连接数最少的服务器WLC(权重最少连接): 按照设置的权重比与服务器当前建立的连接数, 将请求动态分配给权重高连接数少的服务器第二章 LVS-NAT(高并发)web安装httpdyum -y install httpdLVS服务器设置双网卡[图片]组建网络环境#lvs服务器的36网卡设置ipifconfig ens36 192.168.1.100 netmask 255.255.255.0 upsystemctl restart networkip a#保证100与70互ping#130与132,134互ping#132与134互pingclient: VMNET0 192.168.1.70lvs-client: VMNET0 192.168.1.100lvs-server: VMNET2 192.168.255.130web1: VMNET2 192.168.255.132web2: VMNET2 192.168.255.134web服务器配置静态web服务与路由#132与134配置web环境rm -rf /var/www/html/*echo ‘welcome’ /var/www/html/index.htmlroute add -net 192.168.1.0/24 gw 192.168.255.130配置lvs服务器echo 1 /proc/sys/net/ipv4/ip_forward //开启路由转发yum -y install ipvsadm //安装lvsipvsadm -A -t 192.168.1.100:80 -s rripvsadm -a -t 192.168.1.100:80 -r 192.168.255.132:80 -mipvsadm -a -t 192.168.1.100:80 -r 192.168.255.134:80 -m测试访问http://192.168.1.100第三章 LVS-DR(高并发)组建网络环境client: 真机lvs: 192.168.255.130 虚拟ip: 192.168.255.140web1: 192.168.255.132 虚拟ip: 192.168.255.140web2: 192.168.255.134 虚拟ip: 192.168.255.140部署lvs服务器#配置虚拟IPifconfig ens33:0 192.168.255.140 broadcast 192.168.255.255 netmask 255.255.255.0 uproute add -host 192.168.255.140 dev ens33:0#配置路由转发vim /etc/sysctl.confnet.ipv4.ip_forward1 //开启路由转发net.ipv4.conf.all.send_redirects0 //禁用所有重定向net.ipv4.conf.ens33.send_redirects0 //禁用网卡重定向net.ipv4.conf.default.send_redirects0 //禁用默认重定向#重载, 让配置生效sysctl -p#设置路由规则yum -y install ipvsadmipvsadm -A -t 192.168.255.140:80 -s rripvsadm -a -t 192.168.255.140:80 -r 192.168.255.132:80 -gipvsadm -a -t 192.168.255.140:80 -r 192.168.255.134:80 -g#将转发规则设置为永久生效ipvsadm-save /etc/sysconfig/ipvsadmsystemctl restart ipvsadmsystemctl enable ipvsadm配置web集群yum -y install httpdrm -rf /var/www/html/*echo ‘welcome’ /var/www/html/index.html#web集群配置虚拟ipifconfig lo:0 192.168.255.140/32#配置, 确保web集群忽略arp响应echo 1 /proc/sys/net/ipv4/conf/all/arp_ignore##配置, 确保web集群可以发送响应echo 2 /proc/sys/net/ipv4/conf/all/arp_announce客户端测试访问#访问虚拟IPhttp://192.168.255.140第四章 keepalived(高可用)4.1 高可用集群4.1.1 高可用集群减少代理集群服务的中断时间, 为业务的不间断运行提供可高的保障4.1.2 高可用集群衡量标准可用性平均无故障时间/(平均故障维修时间平均无故障时间)标准:基本可用性: 99%较高可用性: 99.9%高可用性: 99.99%极高可用性: 99.999%4.1.3 自动切换/故障转移当主代理服务无法正常工作时, 系统自动切换, 将从代理临时自动替换为主代理服务, 保证服务的不间断运行4.1.4 自动检测自动检测: 自动检测是指, 代理主从服务通过冗余的侦测线与监听程序, 来互相侦测, 对方的服务状态或主机运行情况, 主代理服务挂掉, 从代理服务会自动切换为主代理服务, 保证服务的不间断运行脑裂: 当主从代理的侦测线断开, 主代理服务依然正常工作, 单从代理服务由于监听不到主代理服务的心跳, 就会进行自动切换, 这时就会形成主从代理服务进行资源的争夺, 形成主从代理处理用户请求, 导致后端的数据损坏脑裂原因:主从代理的侦测线损坏主从代理连接侦测线的网卡或交换机损坏仲裁机故障配置信息不正确解决脑裂方案:添加冗余的侦测线启用磁盘锁, 保证只有一方可以获得资源启用仲裁机制, 让挂掉的主节点, 主动释放资源监控系统设置脑裂监控报警4.1.5 其他高可用产品heartbeatpacemaker4.2 keepalived4.2.1 keepalived保证集群实现高可用的产品, 保证服务不间断运行4.2.2 keepalived工作原理keep是以vrrp(虚拟路由冗余协议)协议实现的, 将多台相同功能的服务器进行分组, 组中设立主从服务, 主服务设置虚拟ip, 来被外网进行访问, 同时主服务会向从服务发送组播, 当从服务接收不到该组播时, 就会认为主服务挂掉, 那么从服务集群, 就会将组中除主服务外, 优先级最高的设置为主节点4.2.3 keepalived主要模块core: 负责主服务进程的启动, 维护以及解析全局配置文件chenk: 负责集群服务的健康检查vrrp: 实现vrrp协议4.3 keepadlived实操4.3.1 实现对服务器的检测环境server1(主): 192.168.255.130 真实ipserver1(主): 192.168.255.100 虚拟ipserver2(从): 192.168.255.132 真实ipserver2(从): 192.168.255.100 虚拟ipclient: 真机配置主服务器(130)yum -y install keepalivedvim /etc/keepalived/keepalived.conf!Configuration File for keepalived#全局配置global_defs {#配置130主机路由idrouter_id 1}#vrrp配置, 实例名为VI_1, 主从名称保持一致vrrp_instance VI_1 {#将该节点做为主服务器state MASTER#监控网卡interface ens33#监控真实IPmcast_src_ip 192.168.255.130#虚拟路由编号, 该路由id优先级比全局配置高, 主从id要一至, 确保属于同一组virtual_router_id 50#设定本机优先级, 优先级越高, 该优先级表示占用资源的优先级priority 100#设置主从互相监听的时间间隔, 时间间隔为1秒advert_int 1#配置组播的认证, 确保同一组的成员的通信authentication {#认证方式为密码认证auth_type PASS#组密码为111111auth_pass 111111}#配置虚拟ip, 对外提供服务virtual_ipaddress {192.168.255.100/24}}#启动或重启keepalivedsystemctl start keepalived.servicesystemctl enable keepalived.service#安装httpdyum -y install httpdecho “test” /var/www/html/index.htmlsystemctl start httpdsystemctl enable httpd配置从服务器(132)yum -y install keepalivedvim /etc/keepalived/keepalived.conf!Configuration File for keepalived#全局配置global_defs {#配置132主机路由idrouter_id 2}#vrrp配置, 实例名为VI_1, 主从名称保持一致vrrp_instance VI_1 {#将该节点做为从服务器state BACKUP#监控网卡interface ens33#监控真实IPmcast_src_ip 192.168.255.132#虚拟路由编号, 该路由id优先级比全局配置高, 主从id要一至, 确保属于同一组virtual_router_id 50#设定本机优先级, 优先级越高, 该优先级表示占用资源的优先级priority 99#设置主从互相监听的时间间隔, 时间间隔为1秒advert_int 1#配置组播的认证, 确保同一组的成员的通信authentication {#认证方式为密码认证auth_type PASS#组密码为111111auth_pass 111111}#配置虚拟ip, 对外提供服务virtual_ipaddress {192.168.255.100/24}}#启动或重启keepalivedsystemctl start keepalived.servicesystemctl enable keepalived.service#安装httpdyum -y install httpdecho “test2” /var/www/html/index.htmlsystemctl start httpdsystemctl enable httpd客户端测试http://192.168.255.100#关闭主节点http://192.168.255.100#开启主节点, 查看资源是否被主节点争夺http://192.168.255.1004.3.2 实现对代理服务器(lvs)的服务检测环境proxy server1(主): 192.168.255.133 真实ipproxy server1(主): 192.168.255.80 虚拟ipproxy server1(从): 192.168.255.134 真实ipproxy server1(从): 192.168.255.80 虚拟ipweb server1(主): 192.168.255.130 真实ipweb server1(主): 192.168.255.80 虚拟ipweb server2(从): 192.168.255.132 真实ipweb server1(从): 192.168.255.80 虚拟ipclient: 真机配置后端web服务yum -y install httpdecho “test” /var/www/html/index.htmlsystemctl start httpdsystemctl enable httpd#配置虚拟IPcp /etc/sysconfig/network-scripts/{ifcfg-lo,ifcfg-lo:0}vim /etc/sysconfig/network-scripts/ifcfg-lo:0DEVICElo:0IPADDR192.168.255.80NETMASK255.255.255.255ONBOOTyes#配置路由vim /etc/rc.local/sbin/route add -host 192.168.255.80 dev lo:0#配置arpvim /etc/sysctl.confnet.ipv4.conf.all.arp_ignore 1net.ipv4.conf.all.arp_announce 2net.ipv4.conf.default.arp_ignore 1net.ipv4.conf.default.arp_announce 2net.ipv4.conf.lo.arp_ignore 1net.ipv4.conf.lo.arp_announce 2#重启init 6主代理配置(133)yum -y install keepalived ipvsadmvim /etc/keepalived/keepalived.conf!Configuration File for keepalivedglobal_defs {router_id Directory1}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 60priority 110advert_int 1authentication {auth_type PASSauth_pass 222222}virtual_ipaddress {192.168.255.80/24 dev ens33}}#配置lVS, lvs采用虚拟ip192.168.255.80的80端口对外提供服务virtual_server 192.168.255.80 80 {#主从代理互相检测的时间间隔delay_loop 3#使用轮询算法lb_algo rr#lvs集群模式为LVS-DRlb_kind DR#与后端连接方式为TCPprotocol TCP#配置后端web服务地址与服务端口real_server 192.168.255.130 80 {#设置130服务器权重weight 1#代理服务于后端服务的TCP连接检查TCP_CHECK {#tcp连接的超时时间connect_timeout 3}}#配置后端web服务地址与服务端口real_server 192.168.255.132 80 {#设置132服务器权重weight 1#代理服务于后端服务的TCP连接检查TCP_CHECK {#tcp连接的超时时间connect_timeout 3}}}#重启keepalivedsystemctl restart keepalivedip ainit 6从代理配置(134)yum -y install keepalived ipvsadm#配置keepalivedvim /etc/keepalived/keepalived.conf!Configuration File for keepalivedglobal_defs {router_id Directory2}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 60priority 109advert_int 1authentication {auth_type PASSauth_pass 222222}virtual_ipaddress {192.168.255.80/24 dev ens33}}#配置lVS, lvs采用虚拟ip192.168.255.80的80端口对外提供服务virtual_server 192.168.255.80 80 {#主从代理互相检测的时间间隔delay_loop 3#使用轮询算法lb_algo rr#lvs集群模式为LVS-DRlb_kind DR#与后端连接方式为TCPprotocol TCP#配置后端web服务地址与服务端口real_server 192.168.255.130 80 {#设置130服务器权重weight 1#代理服务于后端服务的TCP连接检查TCP_CHECK {#tcp连接的超时时间connect_timeout 3}}#配置后端web服务地址与服务端口real_server 192.168.255.132 80 {#设置132服务器权重weight 1#代理服务于后端服务的TCP连接检查TCP_CHECK {#tcp连接的超时时间connect_timeout 3}}}#启动keepalivedsystemctl restart keepalivedinit 6测试http://192.168.255.80#关闭主节点keepalived服务http://192.168.255.80#启动主节点keepalived服务第五章 HApoxy(高并发)5.1 七层负载均衡(高并发)5.1.1 七层负载均衡代理服务器根据用户请求的url, 以及后端资源的动静分离, 将流量进行分发, 保证后端集群的高并发5.2 HAproxy的亲缘性5.2.1 目的确保同一客户端的多次连接请求, 始终被同一台后端服务器处理5.2.1 用户ip识别HApoay代理对客户端的ip进行哈希化, 将计算结果映射到后端服务器5.2.2 cookie识别Hopoay代理获取后端的响应信息后, 会响应信息中插入后端服务器的cookie id, 之后客户端会保存该cookie, 当客户端再次访问时, 请求中就会携带后端服务的cookie id5.2.3 session识别HApoxy代理对客户端请求信息中的session id哈希化, 将计算结果映射到后端服务器5.3 HAproxy配置的五大模块global: 全局配置, 进程与日志的配置defaults: 默认配置, 配置面向客户的前端, 提供服务后端, 监听后端服务的状态frontend: 前端代理配置, 配置url的匹配规则, 映射后端动静分离的服务器backend: 配置后端服务集群Listen: 代理与后端集群的监听5.3 实战5.3.1 HAproxy代理服务环境proxy server: 192.168.255.133web server1: 192.168.255.130web server2: 192.168.255.132client: 真机配置web服务yum -y install httpdecho “test” /var/www/html/index.htmlsystemctl restart httpd配置HAproxy代理服务器(133)yum -y install haproxy#配置HAproxyvim /etc/haproxy/haproxy.cfg#全局配置global#haproxy日志存放在本机log 127.0.0.1 local3 info#最大tcp连接数4096. 前后端的tcp连接数总和不可超过4096maxconn 4096#运行haproxy的用户uid 99#运行haproxy的组gid 99#haproxy以守护进程的方式运行在后台daemon#启动进程数为1nbproc 1#进程iid文件的存储路径pidfile /run/haproxy.pid#默认配置defaults#日志使用全局配置log global#连接模式mode http#该网站最大tcp连接数为2048maxconn 2048#代理服务器连接后端失败时, 重试3次retries 3#重试3次失败后, 切换到其他可用后端服务器option redispatch#代理与后端服务器建立tcp连接超时时间5秒timeout connect 5000#代理与客户端tcp连接超时时间50秒timeout client 50000#代理与后端服务tcp连接超时时间50秒timeout server 50000#客户端连接超时, 代理关闭连接, 释放资源option abortonclose#配置haproxy前台的管理页面, 访问http:ip/admin?status, 展示haproxy的管理页面stats uri /admin?status#监控登录页面的标题stats realm Private lands#haproxy前台管理页面的用户admin, 密码passwordstats auth admin:passeword#隐藏haproxy的版本信息stats hide-version#前端配置, 面向用户frontend http-in#访问代理服务器的任意网卡的ip的80端口, 都可以使用服务bind 0.0.0.0:80#面向客户端的模式mode http#日志采用全局配置log global#开启http的专用日志option httplog#静态资源使用短连接模式, 请求结束后关闭连接option httpclose#配置http请求不同页面的匹配规则acl html url_reg -i .html$#若用户访问本代理的.html结尾的页面, 代理将该请求, 转发给后端web服务器use_backend html-server if html#若匹配不到.html结尾, 默认将请求交给后端处理default_backend html-server#后端配置backend html-servermode http#开启高并发的轮询策略balance roundrobin#代理定期向后端集群发送get请求, 访问html, 判断后端服务是否正常option httpchk GET /index.html#将服务端的响应信息中, 插入服务端的cookie的idcookie SERVERID insert indirect nocache#配置后端服务, 权重都为1, 130的cookie的id为3,132为4, 并对后端服务进行健康检查, 每2秒进行一次健康检查, 判断依据为连续两次都能访问index, 表示健康, 若访问5次index都失败, 则判定后端服务不正常server html-A 192.168.255.130:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5server html-B 192.168.255.132:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5#启动HAproxysystemctl start haproxysystemctl enable haproxy测试访问http://192.168.255.133查看HAproxy状态http://192.168.255.133/admin?status5.3.2 HAproxy代理服务实现动静分离环境proxy server: 192.138.255.133html web server1: 192.168.255.130html web server2: 192.168.255.132php web server1: 192.168.255.134php web server2: 192.168.255.135client: 真机html web server配置yum -y install httpdecho “test” /var/www/html/index.htmlsystemctl start httpdsystemctl enable httpdphp web server配置yum -y install php httpdcat /var/www/html/index.php EOF?php phpinfo(); ?systemctl start httpdsystemctl enable httpd4. HAproxy代理服务配置yum -y install haproxyvim /etc/haproxy/haproxy.cfggloballog 127.0.0.1 local3 infomaxconn 4096uid 99gid 99daemonnbproc 1defaultslog globalmode httpmaxconn 2048retries 3option redispatchstats uri /adminstats auth zs:123timeout connect 5000timeout client 50000timeout server 50000frontend http-inbind 0.0.0.0:80mode httplog globaloption httplogoption httpcloseacl php url_reg -i .php$acl html url_reg -i .html$use_backend php-server if phpuse_backend html-server if htmldefault_backend html-serverbackend php-servermode httpbalance roundrobinoption httpchk GET /index.phpcookie SERVERID insert indirect nocacheserver php-A 192.168.255.134:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5server php-B 192.168.255.135:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5backend html-servermode httpbalance roundrobinoption httpchk GET /index.htmlcookie SERVERID insert indirect nocacheserver html-A 192.168.255.130:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5server html-B 192.168.255.132:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5#重启服务systemctl start haproxysystemctl enable haproxy5. 测试http://192.168.255.1336. 测试haproxy配置http://192.168.255.133/admin第六章 nginx(高并发)