美文网首页初见
分布式高可用负载均衡集群架构设计的实战演练

分布式高可用负载均衡集群架构设计的实战演练

作者: 有没有榴莲千层 | 来源:发表于2020-04-29 01:37 被阅读0次

一、总体架构

  • 双主负载均衡服务器
    1. 架构方式:nginx + keepalived实现nginx双主高可用的负载均衡
    2. 主从调度:两台 nginx + keepalived 负载均衡服务器互为主从,由keepalived配置的具体调度算法调度一台nginx服务器来承载本次请求分发的能力
  • DNS轮询
    • DNS轮询请求负载均衡服务器,负载均衡服务器通过keepalived调度算法选择一台负载均衡服务器来分发请求
  • Web服务器集群
    • 两台及以上Nginx Web服务器架设,来响应负载均衡服务器分发的请求
  • 主从读写分离数据库集群
    1. 读数据库:一台主MySql数据库处理写操作的业务
    2. 写数据库:一台以上从MySql服务器处理读操作的业务
  • 总体架构图
总体架构图

二、双主负载均衡服务器搭建

  • 服务器准备
    1. 负载均衡服务器1

      操作系统:Centos6.7 x32

      真实ip:192.168.137.2

      虚拟ip:192.168.137.100

      keepalived MASTER主ip:本机ip,即192.168.137.100

      keepalived BACKUP从ip:负载均衡服务器2 的虚拟ip,即 192.168.137.200

    2. 负载均衡服务器2

      操作系统:Centos6.7 x32

      真实ip:192.168.137.3

      虚拟ip:192.168.137.200

      keepalived MASTER主ip:本机ip,即192.168.137.200

      keepalived BACKUP从ip:负载均衡服务器1 的虚拟ip,即 192.168.137.100

    3. 高可用说明

      192.168.137.2和 192.168.137.3 两台负载均衡分别负责两个虚拟ip的请求

      192.168.137.2负责192.168.137.100

      192.168.137.3负责192.168.137.200

      当192.168.137.2的nginx挂掉了,它负责的192.168.137.100的请求由keepalived 调度给从服务器即192.168.137.3上的nginx响应

  • 在两台负载均衡服务器上nginx安装配置步骤
    1. 安装依赖

      #在安装nginx前,需要确保系统安装了g++、gcc、openssl-devel、pcre-devel和zlib-devel软件
      yum install gcc-c++
      yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel 
      
    2. 下载源码、解压、编译、安装

      wget http://nginx.org/download/nginx-1.8.1.tar.gz
      tar -zxvf nginx-1.8.1.tar.gz
      cd nginx-1.8.1
      #--prefix=/usr/local/nginx 指定安装目录
      ./configure --prefix=/usr/local/nginx \
       --with-http_ssl_module --with-http_spdy_module \
      --with-http_stub_status_module --with-pcre
      make
      make install
      
    3. 配置 nginx负载均衡

      vi /usr/local/nginx/conf/nginx.conf
      
      #配置负载均衡分发的web服务器集群池
      upstream web1    
      {
          #Nginx负载算法:轮询、ip_hash、weight、fair(第三方)、url_hash(第三方)
          ip_hash;#根据 ip_hash 负载调度算法命中 web服务器集群池中 其中一台 server        
          server 192.168.137.4:80;  
          server 192.168.137.5:80;  
      }   
      
      #虚拟主机
      server {   
          listen    80;       
          server_name  test.test007.com;
          location / {
              root  /var/www;      
              index  index.html index.htm;
              proxy_set_header Host $host;
              proxy_set_header X-Forwarded-For $remote_addr;
              #反向代理负载均衡服务器池 web1
              proxy_pass [http://web1;](http://web1%3B/)   
          }
      }
      
    4. 注:nginx五种负载算法

      #轮询:nginx默认,按请求顺序分配后端服务器,自动剔除down掉的服务器,自动加入存活服务器
      upstream web1    
      {     
          server 192.168.137.4:80;  
          server 192.168.137.5:80;  
      }   
      
      #Weight:设置权重,用于后端服务器性能不均的情况,访问比率约等于权重之比
      upstream web1    
      {     
          server 192.168.137.4:80 wight=1;  
          server 192.168.137.5:80 wight=5;  
      }   
      
      #ip_hash:解决了session问题,每个请求按访问IP的hash结果分配,这样每个访客可以固定一个后端服务器。
      upstream web1    
      {     
          ip_hash;
          server 192.168.137.4:80;  
          server 192.168.137.5:80;  
      }   
      
      #fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配。
      upstream web1    
      {     
          server 192.168.137.4:80;  
          server 192.168.137.5:80;  
          fair;
      }  
      
      #url_hash:按访问URL的hash结果来分配请求,使每个URL定向到同一个后端服务器,后端服务器为缓存时比较适用。另外,在upstream中加入hash语句后,server语句不能写入weight等其他参数。
      upstream web1    
      {     
          server 192.168.137.4:80;  
          server 192.168.137.5:80;  
          hash $request_uri;
          hash_method crc32;
      }  
      
  • 在两台负载均衡服务器上Keeplived安装步骤(两台操作一毛一样)
    wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
    tar -zxvf keepalived-1.2.18.tar.gz
    cd keepalived-1.2.18
    ./configure --prefix=/usr/local/keepalived 
    make 
    make install 
    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ 
    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ 
    mkdir -p /etc/keepalived 
    
  • 负载均衡服务器1上keepalived配置
    vi /etc/keepalived/keepalived.conf
    
    ! Configuration File for keepalived
    
        global_defs {
            #router 一个实例的标识
            router_id LVS_DEVEL 
        }
    
        vrrp_script chk_nginx {
            script "killall -0 nginx"
            interval 1
            weight 2
        }
    
        vrrp_instance VI_10 {
            #主/从服务器:MASTER / BACKUP,只有这两个值,必须大写
            #负载均衡服务器1的主服务器 = 负载均衡服务器1的从服务器(192.168.137.100)
            state MASTER
            interface eth1
            virtual_router_id 131
            #priority:  优先级,值越大优先级越高,MASTER 设置比 BACKUP大
            priority 100
            advert_int 1
            authentication {
                auth_type PASS
                auth_pass 123456
            }
            
            #设置处理的虚拟ip
            virtual_ipaddress {
                192.168.137.100  
            }
    
            track_script {
                chk_nginx
            }
    
            notify_master "/etc/keepalived/notify.sh master"
            notify_backup "/etc/keepalived/notify.sh backup"
            notify_fault "/etc/keepalived/notify.sh fault"
        }
    
        vrrp_instance VI_20 {
            #负载均衡服务器1的从服务器 = 负载均衡服务器2的主服务器(192.168.137.200)
            state BACKUP
            interface eth1
            virtual_router_id 132
            priority 99
            advert_int 1
            authentication {
                auth_type PASS
                auth_pass 123456
            }
    
            virtual_ipaddress {
                192.168.137.200
            }
    
            track_script {
                chk_nginx
            }
    
            notify_master "/etc/keepalived/notify1.sh master"
            notify_backup "/etc/keepalived/notify1.sh backup"
            notify_fault "/etc/keepalived/notify1.sh fault"
        }
    
  • 负载均衡服务器2上keepalived配置
    vi /etc/keepalived/keepalived.conf
    
    ! Configuration File for keepalived
    
        global_defs {
            router_id LVS_DEVEL
        }
    
        vrrp_script chk_nginx {
            script "killall -0 nginx"
            interval 1
            weight 2
        }
    
        vrrp_instance VI_10 {
            #负载均衡服务器2的从服务器 = 负载均衡服务器1的主服务器(192.168.137.100)
            state BACKUP
            interface eth1
            virtual_router_id 131
            priority 99
            advert_int 1
            authentication {
                auth_type PASS
                auth_pass 123456
            }
    
            virtual_ipaddress {
                192.168.137.100
            }
    
            track_script {
                chk_nginx
            }
    
            notify_master "/etc/keepalived/notify.sh master"
            notify_backup "/etc/keepalived/notify.sh backup"
            notify_fault "/etc/keepalived/notify.sh fault"
        }
    
        vrrp_instance VI_20 {
            #负载均衡服务器2的主服务器 = 负载均衡服务器1的从服务器(192.168.137.200)
            state MASTER
            interface eth1
            virtual_router_id 132
            priority 100
            advert_int 1
            authentication {
                auth_type PASS
                auth_pass 123456
            }
    
            virtual_ipaddress {
                192.168.137.200
            }
    
            track_script {
                chk_nginx
            }
    
            notify_master "/etc/keepalived/notify1.sh master"
            notify_backup "/etc/keepalived/notify1.sh backup"
            notify_fault "/etc/keepalived/notify1.sh fault"
        }
    
  • 启动两台负载均衡服务器
    Service keepalived start
    /usr/local/nginx/sbin/nginx
    
  • 通过ip a 查看生效的虚拟ip
负载均衡服务器1
负载均衡服务器2

三、DNS轮询配置

通过设置域名解析多条不同线路的A记录即可,或者用第三方DNS服务器

如例中根域名:test007.com

记录类型 主机记录 解析线路 记录值
A test 中国联通 192.168.137.100
A test 中国移动 192.168.137.200

四、Web服务器集群搭建

  • 服务器准备
    1. web服务器1

      操作系统:Centos6.7 x32

      真实ip:192.168.137.4

    2. web服务器2

      操作系统:Centos6.7 x32

      真实ip:192.168.137.5

  • 安装nginx web服务器
    • 同负载均衡nginx安装
  • 配置nginx web服务器
    vi /usr/local/nginx/conf/nginx.conf
    
    server {
    listen    80;
        server_name  localhsst;
    
        location /{
      root  /var/www;      
          index  index.html index.htm;
    }
    }
    
  • 防火墙对80端口开放绿灯
    /sbin/iptables -I INPUT -p tcp --dport 80-j ACCEPT
    /etc/rc.d/init.d/iptables save
    
    #测试操作可以直接让防火墙放个带薪假
    service iptables stop 
    

五、数据库主从读写分离架构设计

  • 服务器准备
    1. 主MySql服务器master

      操作系统:Centos6.7 x32

      真实ip:192.168.137.4

    2. 从MySql服务器slave

      操作系统:Centos6.7 x32

      真实ip:192.168.137.5

  • 安装并启动MySql服务器
    yum install mysql-server
    service mysqld start
    
  • 主MySql服务器master配置
    1. 修改配置
    vi /etc/my.cnf
    
    #指定server id
    server-id = 1
    
    #开启binlog日志
    log-bin 
    
    #允许日志同步
    sync-binlog=1 
    
    1. 重启生效配置
    service mysqld restart
    
    1. 授权同步用户
    mysql -u root -p
    
    #设置授权账户 slave1 给从服务器做同步使用
    mysql>grant replication slave,super,reload on *.* to slave1@192.168.137.5 identified by '123456'; 
    
    #查看File(binlog日志文件)和position(当前位置偏移)的值
    mysql>show master status/G; 
    
  • 从MySql服务器slave配置
    1. 修改配置
    vi /etc/my.cnf
    
    #指定server id
    server-id = 2
    
    #开启binlog日志
    log-bin 
    
    #允许日志同步
    sync-binlog=1 
    
    #设置只读
    read_only = 1  
    
    1. 重启生效配置
    service mysqld restart
    
    1. 与主MySql服务器Master的同步配置
    mysql -u root -p
    
    Mysql>Change master to
    >master_host='192.168.137.4',           #主MySql的ip
    >master_user='slave1',                  #master授权用户
    >master_password='123456',              #maser授权用户密码
    >master_log_file='mysqld-bin.000002',   #master binlog文件名
    >master_log_pos=106;                    #master position偏移量
    mysql>start slave;                      #开启slave
    
    Mysql>show slave status/G;              #看slave状态
    
    #下面这两个进程同时为Yes证明slave工作正常
    Slave_IO_Runing: Yes
    Slave_SQL_Runing: Yes
    

    此时mysql主从读写分离已经配置完成,在主数据库上创建数据库,创建表插入数据等写入操作等都会自动同步到从数据库。

由markdown编辑器 typora 发送

相关文章

  • EMQ高可用性+负载均衡架构

    1. emq高可用+负载均衡部署 1. emq高可用+负载均衡部署1.1. 整体架构规划1.2. EMQ集群部署1...

  • 后端架构师技术图谱-分布式和算法(二)

    分布式设计扩展性设计稳定性 & 高可用硬件负载均衡软件负载均衡限流应用层容灾跨机房容灾容灾演练流程平滑启动数据库扩...

  • 负载均衡

    一、负载均衡简介 负载均衡是微服务架构中必须使用的技术,通过负载均衡实现系统的高可用、集群扩展等。 其可以通过硬件...

  • 负载均衡是怎么做的?

    负载均衡 负载均衡是实现分布式系统高可用的方式之一;负载均衡策略实现了把高并发的流量分摊在其后的服务器集群上;常见...

  • 阿里云linux下Nginx整合Tomcat实现负载均衡集群

    Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)(下面只介绍负载均衡集群)1、负载均衡集...

  • 负载均衡

    负载均衡是分布式系统的一个重要手段,是达到高可用、高性能架构设计要素的重要手段。 按照问题考虑的层次,对于负载均衡...

  • 分布式高可用负载均衡集群架构设计的实战演练

    一、总体架构 双主负载均衡服务器架构方式:nginx + keepalived实现nginx双主高可用的负载均衡主...

  • galera集群

    集群分类:(面试题) 高可用 负载均衡 HPC 高性能计算 分布式集群 分布式文件系统(分布式存储) mysql官...

  • Dubbo负载均衡

    一、负载均衡的方式 在分布式集群架构下,负载均衡很重要。集群本来就是为了分担压力,负载均衡做的不好,就会失去了集群...

  • 微服务之负载均衡

    简介 在微服务架构中,负载均衡是必须使用的技术,通过它来实现系统的高可用、集群扩容等功能。负载均衡可以分为...

网友评论

    本文标题:分布式高可用负载均衡集群架构设计的实战演练

    本文链接:https://www.haomeiwen.com/subject/sfdwwhtx.html