公司新产品构思中,需提前设计产品网络架构及拓扑图。要求平台架构应有符合如下要求:
1.弹性:根据系统需求进行弹性的伸缩
2.可用:要能够保证系统运行的持续性,避免出现业务中断的情况
3.性能:要确保系统能够高效,快速的响应用户的请求
4.安全:能够保证系统的安全,以防止被恶意攻击
5.可管理系:该架构应能够便于后续的管理,监控,节省管理的时间和成本
本套架构是博主根据自身知识,应对轻量级的产品服务所搭设架构,其中有不成熟的地方,希望大家多提意见
安装部分:
1.NTP
server端
#yum –y install ntp ntpdate
#vim /etc/ntp.conf
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
restrict 192.168.10.0 mask 255.255.255.0 nomdify notrap
server 192.168.10.129
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 10
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
/etc/init.d/ntpd start
Chkconfig ntpd on
Ntpq –p
Client端
Crontab -e
*/15 * * * * ntpdate 192.168.10.129
2.HAProxy
请查看博主的另一篇文章有专门介绍HAProxy的安装,这里我将贴出对应的配置文件即可,80,81两台主机的haproxy配置文件基本相同
https://blog.csdn.net/jeccisnd/article/details/76146715
vim /usr/local/haproxy/conf/haproxy.cfg
#
# demo config for Proxy mode
#
global
maxconn 20000
#设定HAProxy进程可接受的最大并发数
ulimit-n 41000
#linux命令行选项,等同于上参数
log 127.0.0.1 local0
#全局的日志中配置,local0 是日志设备 info(err,warnig,minfo,debug)为日志级别,使用rsyslog
uid 200
gid 200
#用户和组 ,可以用uid,gid代替
chroot /var/empty
nbproc 1
#HAProxy启动时可创建的进程数,配合daemon参数使用,默认只启动一个进程,该值应小于cpu核数。
daemon
#进程后台运行,(推荐模式)
defaults
mode http
#实例的默认运行模式
retries 3
#连接后端服务器的失败重试次数
timeout connect 10s
#连接服务器的最长等待时间,默认单位为毫秒,可使用其它时间单位
timeout client 20s
#连接客户端发送数据时最长等待时间,默认单位为毫秒,可使用其它时间单位
timeout server 30s
#服务器回应给客户端数据发送的最长等待时间,默认单位为毫秒,可使用其它时间单位
timeout check 5s
#对后端服务器的检查超时时间,默认单位为毫秒,可使用其它时间单位
listen admin_stats
bind *:9188
#设置监控页面的访问地址,该地址表示为监听本机所有地址的9188端口
mode http
log global
#使用全局日志
stats refresh 30s
#监控页面自动刷新时间
stats uri /haproxy-status
#uri的访问后缀
stats realm welcome login\ Haproxy
#文本提示信息
stats auth admin:admin~!@
#统计页面的用户名和地址,每行一个
stats hide-version
#隐藏统计页面的HAProxy的版本信息
stats admin if TRUE
#可手工启动或禁用后端真实服务器,仅在1.4.9版本后有效
frontend test-proxy
bind *:80
#定义监听地址
mode http
log global
option httplog
#启用日志记录
option forwardfor
#获取客户端真实ip。通过日志“X-Forwarded-For”查看
option httpclose
#HAProxy在完成一次请教请求连接后,将主动关闭该连接,对性能非常有帮助
option dontlognull
option nolinger
option http_proxy
maxconn 8000
timeout client 30s
# layer3: Valid users
# acl allow_host src 192.168.200.150/32
acl allow_host src 192.168.10.0/24
#acl 控制,运行192.168.10.0/24网段的访问请求
#acl使用方法如下
#acl 自定义acl名称 acl方法 -i [ 匹配的路径或文件 ]
# acl allow_host src 0.0.0.0/24
http-request deny if !allow_host
#拒绝连接请求除allow_host外
# layer7: prevent private network relaying
# acl forbidden_dst url_ip 192.168.0.0/24
# acl forbidden_dst url_ip 172.16.0.0/12
acl forbidden_dst url_ip 192.168.20.0/24
http-request deny if forbidden_dst
default_backend test-proxy-srv
backend test-proxy-srv
mode http
timeout connect 5s
timeout server 5s
retries 2
option redispatch
#应用于cookie保持的环境
option abortonclose
#自动结束长时间连接
option nolinger
option http_proxy
option httpchk GET /index.html
balance roundrobin
cookie SERVERID
server web1 192.168.10.80:8080 cookie server1 weight 6 check inter 2000 rise 2 fall 3
server web2 192.168.10.81:8080 cookie server2 weight 6 check inter 2000 rise 2 fall 3
server web3 192.168.10.82:8080 cookie server3 weight 6 check inter 2000 rise 2 fall 3
server web4 192.168.10.83:8080 cookie server4 weight 6 check inter 2000 rise 2 fall 3
#后端服务器真实地址
# layer7: Only GET method is valid
acl valid_method method GET
acl valid_method method POST
http-request deny if !valid_method
# layer7: protect bad reply
http-response deny if { res.hdr(content-type) audio/mp3 }
3.Keepalived
wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
tar zxvf keepalived-1.3.5.tar.gz
cd keepalived-1.3.5.tar.gz
./config --sysconf=/etc --with-kernel-dir=/usr/src/kernels/
make
make install
ln -s /usr/local/sbin/keepalived /sbin
chkconfig keepalived on
192.168.10.80主机master 配置部分如下,192.168.10.81主机 slave将state master 更改为state backup ,priority 100更改为priority 90即可
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 2
}
vrrp_instance G1 {
state MASTER
interface eth0
virtual_router_id 20
priority 100
advert_int 2
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
notify_master "/etc/keepalived/sh/master.sh"
notify_backup "/etc/keepalived/sh/backup.sh"
notify_fault "/etc/keepalived/sh/fault.sh"
track_script {
check_haproxy
}
virtual_ipaddress{
192.168.10.90/24 dev eth0
}
}
其中
notify_master "/etc/keepalived/sh/master.sh"
notify_backup "/etc/keepalived/sh/backup.sh"
notify_fault "/etc/keepalived/sh/fault.sh"
该处的三个脚本则为当Keepalived状态改变发送的邮件告警,可以自行编写,这里为大家展示一个,当然告警需要安装sendmail,可以查看我的另一篇博文
https://blog.csdn.net/jeccisnd/article/details/72885682
#!/bin/bash
HOSTIP=`ifconfig eth0 | grep inet | egrep -v inet6 | awk -F 'net' '{print $2}'`
#输出本机IP
LOGFILE=/var/log/keepalived-state.log
#状态改变过程,可查看此文件
echo "[Master]" >> $LOGFILE
date >> $LOGFILE
echo "$HOSTNAME ,$HOSTIP ==> BACKUP " | mail -s "This is Test " xxxxxxxxxxxx@xxx.com
#发送通知邮件
4.Tomcat+jdk
Tomcat,java的安装本文不描述,但是设置好tomcat的默认首页路径和默认页面即可。为展示HAProxy的负载部分,各个tomcat容器内的index.html文件内容最好能够区分开来。
5.日志观察及针对Keepalived的可用性检测
Keepalived的日志 /var/log/message
目前81为master,当我停止81HaProxy程序时,81将会因健康监测失败,成为fault状态,80则成为master状态。
大家可以注意,左上角两处红色圈住标记为当主机81上的负载均衡程序HAProxy因崩溃而关闭时触发了keep的健康监测,导致主机81进入fault状态,此时主机80得到通知成为master状态,开始提供服务。右下角的红色圈住标记为我们对飘逸地址的ping监测,大家可以看出切换过程没有产生丢包现象,当然有业务的时候也许有一些丢包,但是几秒钟内的丢包是可以接受的。而右上角的标记处可以看到,我不断的刷新访问,页面依然访问正常,而且负载也正常。
6.HAProxy的负载均衡内容检测
当某一台tomcat崩溃无法提供前端页面展示时,此时的HAProxy能否检测到并将其T出服务器池呢?
答案是肯定的,博主有尝试过,不管服务器池指向的后端真实地址是web主机地址,或者是中间还有再有nginx(即为HAproxy==>NginX==>Web主机),都能够成功的监测出问题主机,并t出服务器池,当恢复时自动加入服务器池提供访问。
后续的数据解决方案,我会尽快写出。