美文网首页数据库技术
Docker 搭建 高可用高负载数据库架构

Docker 搭建 高可用高负载数据库架构

作者: 一生悬命Cat | 来源:发表于2019-03-16 10:41 被阅读14次

    1.整体架构介绍

    1.nginx 负载均衡
    2.haproxy 负载均衡
    3.pxc 数据库集群
    4.Redis 集群

    整体架构如下图

    高可用,高负载架构.jpg

    1.nginx 负载均衡采用的是ip (hash)法

    为了使用户请求的session得以保留,故采用ip hash方法负载均衡

    upstream model{ 
          ip_hash; 
          server 10.0.0.10:8080; 
          server 10.0.0.11:8080; 
    }
    server {  
        listen       80;
        server_name  localhost;
        location / {  
                proxy_pass model;  
                proxy_redirect default;  
        } 
    }
    

    2.haproxy负载均衡+keepalived双机热备

    haproxy的配置

     ​global   
     #工作目录
      chroot /usr/local/etc/haproxy    #日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info    
     log 127.0.0.1 local5 info    
     #守护进程运行    
     daemon​
     defaults    
     log global    
     mode    http    
     #日志格式   
     option  httplog    
    #日志中不记录负载均衡的心跳检测记录    option  dontlognull    
    #连接超时(毫秒)    
    timeout connect 5000    
    #客户端超时(毫秒)   
     timeout client  50000    
    #服务器超时(毫秒)    
    timeout server  50000​
    #监控界面   
    listen  admin_stats    
    #监控界面的访问的IP和端口    
    bind  0.0.0.0:8888   
     #访问协议    
    mode        http    
    #URI相对地址   
     stats uri   /dbs    
    #统计报告格式    
    stats realm     Global\ statistics    
    #登陆帐户信息    
    stats auth  admin:abc123456
    #数据库负载均衡listen  proxy-mysql    
    #访问的IP和端口    bind  0.0.0.0:3306      
    #网络协议    mode  tcp    
    #负载均衡算法(轮询算法)    
    #轮询算法:roundrobin    
    #权重算法:static-rr    
    #最少连接算法:leastconn   
     #请求源IP算法:source     balance  roundrobin    
    #日志格式    
    option  tcplog    
    #在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测    
    option  mysql-check user haproxy    
    server  MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000      
    server  MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000      
    server  MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000     
    server  MySQL_4 172.18.0.5:3306 check weight 1 maxconn 2000    
    server  MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000    
    #使用keepalive检测死链    
    option  tcpka  
    

    keepalived配置

    vrrp_instance  VI_1 {    
    state  MASTER    
    interface  eth0    
    virtual_router_id  51   
     priority  100    
    advert_int  1    
    authentication {        
    auth_type  PASS       
     auth_pass  123456   
     }    
    virtual_ipaddress {        
    172.18.0.201    
    }
    }
    

    3.pxc集群

    #拉取镜像
    docker pull percona/percona-xtradb-cluster
    #改名
    docker tag percona/percona-xtradb-cluster pxc
    #创建网段
    docker network create --subnet=172.18.0.0/16 net1
    #创建数据卷
    volume create --name v1
    #创建第1个MySQL节点
    docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456
    -e CLUSTER_NAME=PXC 
    -e XTRABACKUP_PASSWORD=abc123456 
    -v  v1:/var/lib/mysql 
    -v backup:/data
    --privileged 
    --name=node1 
    --net=net1 
    --ip 172.18.0.2 pxc
    #创建第2个MySQL节点
    docker run -d -p 3307:3306 
    -e MYSQL_ROOT_PASSWORD=abc123456 
    -e CLUSTER_NAME=PXC 
    -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 
    -v v2:/var/lib/mysql 
    -v backup:/data 
    --privileged 
    --name=node2 
    --net=net1 
    --ip 172.18.0.3 pxc
    

    以此类推 创建5个

    4 reids 集群(3主3从)

    #安装Redis镜像
    docker pull yyyyttttwwww/redis
    #创建网段
    docker network create --subnet=172.19.0.0/16 net2
    #创建6个Redis容器
    docker run -it -d 
    --name r1 
    -p 5001:6379 
    --net=net2 
    --ip 172.19.0.2 
    redis bash
    #启动6节点Redis服务器
    docker exec -it r1 bash
    ./redis-server ../redis.conf
    #创建Cluster集群
    ./redis-trib.rb
     create --replicas 1 
    172.19.0.2:6379 
    172.19.0.3:6379 
    172.19.0.4:6379 
    172.19.0.5:6379 
    172.19.0.6:6379 
    172.19.0.7:6379
    

    相关文章

      网友评论

        本文标题:Docker 搭建 高可用高负载数据库架构

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