开发者学堂课程【企业集群平台架构设计与实现:lvs/haproxy/keepalived:企业集群平台架构设计与实现 haproxy 篇4】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/391/detail/5016
企业集群平台架构设计与实现 haproxy 篇4
目录:
一、关于爱维 Linux 公开课的介绍
二、课程讨论答疑
一、公开课的介绍
前边介绍了 haproxy 。 这是公开课第九期的一个课程,就是关于企业集群应用架构设计与实现。通过两个课时重点介绍集群的一个实现,讲述了两个常用的集群软件,一个是lvs,另外一个是haproxy。还有一个集群架构的实现。这个课程到这一期基本上就完成了。
那么下个课时的内容是虚拟化。也就是:虚拟化平台开源利器Proxmox。
先登陆腾讯课堂。打开公开课的地址:
https://ke.qq.com/course/117291#term_ jd a 100127883
看课程目录,主要是讲关于一个虚拟化管理平台。这个软件非常好用,是开源的,使用也非常方便,比直接通过KVM建虚拟机或管理就简单很多。也比通过 openstack 搭建环境要更简单很多。这个对于中小型应用来说基本上是全部都能满足的。所以,重点介绍集成管理平台。虚拟化管理平台它可以快速建立一个虚拟机,还有基于KVM的虚拟机。
二、课程讨论答疑
1、三个 bank 用的 server 和端口能不能相同?
端口其实定义后端的一个 server 主机。一个主机组,他们的端口是随便的,可以相同也可以不同。
2、两个后端 server 的端口8080可以跟前端主机80相同吗?
这两个后端的地址是随便定义的。这两个服务器237和234是另外一个独立的服务器。那么端口可以随便定义。这里就是简单定成8080,但定成80也可以,只要跟本机不冲突就可以。
比如,236主机这个80端口,让 haproxy 给占用的。如果再输入一个本机,236的80就不行了,所以,只要本机的8080端口不冲突就没问题。Haproxy 默认就会把80端口给占用了,这里绑定就是80端口,后端的server是本机也没问题,后端的 server 不占80端口。后端的两个主机就是两个主机组,没有定义端口,定义端口是在 frontend 里边去进行定义的,backend 里边没有定义端口,定义端口都是在 frontend 里边去定义端口的,在这段去进行定义:
……
frontend www
Bind *:80
mode http
option httplog
option forwardfor
option httpclose
log global
……
“Bind *:80”是绑定一个80。
3、如果再加第二个 frontend 的话,还能不能再定义80 ?
可以定义。它其实就相当于虚拟主机的概念。相当于 IIS 或者 Apache 里边虚拟主机的概念,这个是可以相同的。
4、Haproxy 硬件配置
如果要安装 haproxy APP 的话,配置就可以。它的配置比这个LVS配置要稍高,因为相对来说还是比较消耗资源的,对硬件有消耗,对网卡、带宽都是有消耗的。因为 haproxy 进出都是要经过它自身的。所以对性能这块,这个配置要比 LVS 的服务器要稍微高一点。它对内存的要求并不高。内存的话一般是16G、32G就足够。
5、100万的 PV 量和1000万 PV 量的,怎么选?
100万 PV 是没有多少的。比如,现在有一个环境是集群,一般说100万的 PV 量一天大概是五千万到1亿左右,用的是一个底层LVS。
那么 LVS 的配置大概到8G内存。然后只需要一颗四核的 CPU。
大概有两年多没有出过任何问题。如果说,像这个配100万PV 量其实是很小的,要用 Apache 建议 16G 内存、两颗四核CPU。16G内存足够一千万的量。把这个内存再稍微加大一点加到32G,CPU有两颗六核或八核是没有问题的。这些硬件之间也没有差多少钱应该。
6、访问控制
Haproxy 的访问控制可以限制登录的来源地址,另外,也可以通过密码去控制访问。这两个方面基本上就足够了。如果要看的人很多的话其实是可以设置很多密码的。这里是设了一个密码,是123,
listen admin stats
bind 0.0.0.0:9188
mode http
1og 127.0.0.1 loca10 err
stats refresh 30s
stats uri /haproxy-s tatus
stats realm welcome login\ Haproxy
stats auth admin:admin123
stats hide-version
stats admin if TRUE
如果要成批去设置的话,就在最下边再一行,然后再继续把前面的内容加上,后面用户名,密码多加一行就可以了,一行是一个密码,一行一个陆续加就可以了。
7、Haproxy 比较好的一个地方
Haproxy 比较好的一个地方就是有一个内网地址和一个外网地址。在监控页面,把它绑定到内网地址上来,然后服务地址绑定在外网上,这样就非常安全。
8、根据业务量及硬件配置,公司要求不浪费1G内存。
这个标准要求好高,谁也达不到。一G内存现在多少钱?16G内存现在也就几百块钱。对内存的要求没有非常精确,谁都做不到要精确到1G的标准。因为没有人知道你的业务量。相对有点夸张。
但是,一般情况下,在硬件选型的时候,8G内存就足够了。
建议选16G吧,选多一点对做技术本身来说是没有坏处的。
可能有时候觉得要尽量给公司去节省资源,本来8G就够用了,觉得4G也够用,那么到时候出了问题,内存不够,再去申请内存的时候,领导就会问:为什么当时没有考虑周全,没有考虑到位。所以,多申请,不管哪个行业,都是一个最基本的准则,需要8G,就申请16G。
9、硬件浪费
现在有很多硬件浪费,因为没有人能预估出来公司业务量到底需要多少硬件资源,或者说需要一些网络资源。
比如,使用阿里云的主机非常的贵,主要的原因就是现在对这个计划的不够周全。本来16G内存就足够了。但是开发、包括产品等,都说内存一定要足够大,结果预备了64G内存,而平时也就用大概16G左右。内存足够大肯定对开发者没有什么影响,内存小的话,什么问题都会遇到。比如,领导说内存小不加内存了,去优化程序。这就是非常烦恼的事情了。
10、一台机器装了十几个 tomcat,内存的使用率是99%。
Tomcat 是单线程的,可以在一个机器上装两个到三个内存稍微大点的,但装十几个,用的还是一个硬件资源体,那 gdm 要怎么配?
成本是需要考虑,但是在硬件上一定不要去省成本。把钱省给公司,公司没有给你钱,那么出了问题还得自己搞定。换句话说,反正,钱是公司的钱,只要保证业务稳定其实就已经足够了,不需要考虑别的。如果不做默认配置的话,发生内存溢出的概率是很高的,默认情况下,原本配置是128兆,最高到256兆,非常低必须得配置。然后,对gdm 这块,就改成自动化的,给内存的大小去自动去设置一个合适的 gdm 值。
Tomcat 是不能用缺省的配置,特别是 gdm 。这里,一定要用自己重新设置的值,只有这样,这个系统才能达到充分的发挥。
11、内存达到4G也会有溢出
这是肯定的。其实优化是逃不开的。这是根据业务本身来定的,设大了也不一定好,设置小的话那肯定是有问题的。具体设置多少跟业务类型来定。
对 Tomcat 并发来说,最多能支持200多个并发。并发很高的话,那肯定是群架构。有一些对动态请求比较多的都会用的其他方式了。
所以,做 tomcat 基本上内存一定要足够大,足够大的话才能保证没有问题。
对于在一台机器装了十几个 tomcat 的问题,在一个机器上多起几个 Tomcat 就行,但是不要起太多,太多的话反而没有意义了,内存足够大的话,起两个到三个就弥补了单线程。
单线程的概念,能充分利用多个 cpu 的优势。
12、Tomcat怎么有129个?
“起了129个 Tomcat 实例,物理服务器硬件配置是32个G物理内存运行129个实例。”
这应该不是运行129个实例,应该是之前开的 gdm 没有停掉,然后不停的重新起 Tomcat 导致的。起129个实例,一个实例32G的内存, gdm 加载起来的话内存连1亿都没有,怎么运行?129个的话最大512兆是,平分也不够的。比如是100多个,一个是512兆,十个就是100个50G,现在还是129个,这绝对是一个僵尸的进程。
就是上次 Tomcat 的没有停掉,这次又重起了一个 Tomcat ,所以,越起越多,真的实例没有这么多。
所说的实例是什么?就是起了两个 Tomcat ,或者起了三个Tomcat ,而不是说起了多少个进程。
小游戏这样的应用,每个小应用可能都是非常小的一些业务。这本身都是些小业务,就相当于做一些小容器一样。
可以把这个服务器做到 docker 里,都通过容器做虚拟化,这样能避免资源消耗。
可以考虑一下,运行这么多个Tomcat 实例,还不如把每个 Tomcat实例封装到 docker 里边,然后起100多个 docker ,这样的一个虚拟化容器性能又高。
这里,不用看 gdm 是怎么设置的,gdm 肯定不是按标准去设置的。它最大是512兆对,可能平时也只用了就是几十兆。这样才不会出现 OM 。如果都用到顶峰512兆早就出现 OM 了。