轻量级应用服务的高可用架构学习一

公司新产品构思中,需提前设计产品网络架构及拓扑图。要求平台架构应有符合如下要求:

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出服务器池,当恢复时自动加入服务器池提供访问。

后续的数据解决方案,我会尽快写出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值