Docker 搭建 高可用高负载数据库架构
2019-03-16 本文已影响14人
一生悬命Cat
1.整体架构介绍
1.nginx 负载均衡
2.haproxy 负载均衡
3.pxc 数据库集群
4.Redis 集群
整体架构如下图
高可用,高负载架构.jpg1.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