美文网首页
数据库集群与负载均衡

数据库集群与负载均衡

作者: 爱修仙的道友 | 来源:发表于2019-04-13 12:30 被阅读0次

背景:

教务网系统,某时刻请求量急剧增多,mysql同时处理有限,过多即会排队。
搭载mysql的服务器崩溃,会导致网站故障

一、为什么要使用数据库集群和负载均衡?

1.高可用

集群:全国各地分布式存放数据库,不会因为单台故障,停止业务,
需要数据同步

2.高并发

负载均衡:平均分配任务

3.高性能

二、mysql数据库集群方式

image.png image.png

replication:
相当于读写分离,n台读,n台写,通过异步方式进行同步数据
缺点,会有时间差概念,也会有时可以写,但是同步信息式丢失数据,读不出来信息


image.png

PXC:
node1同步信息 node2、node3,只会产生true or false,保证数据同步

三、使用docker安装PXC

为什么使用docker搭建 :数据卷机制
docker 创建集群 将docker的mysql 上传到阿里云服务器,当docker挂掉之后,数据不会丢失

1.拉取PXC镜像

docker pull percona/percona-xtradb-cluster:5.7

2.创建volume卷

docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
  1. 创建虚拟network网络
docker network create --subnet=172.18.0.0/24 net1

4.运行PXC容器
相当于三台mysql,项目开发下,每一个docker都是在不同的服务器

# 创建node1  -aliyun 1 
docker run -d -p 8003:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=qwe123 -e XTRABACKUP_PASSWORD=qwe123 -e CLUSTER_NAME=PXC --name=node1 --net=net1 --ip 172.18.0.2 percona/percona-xtradb-cluster:5.7

# 创建node2  -aliyun 2
docker run -d -p 8004:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=qwe123 -e XTRABACKUP_PASSWORD=qwe123 -e CLUSTER_NAME=PXC -e CLUSTER_JOIN=node1 --name=node2 --net=net1 --ip 172.18.0.3 percona/percona-xtradb-cluster:5.7

# 创建node3  -aliyun3
docker run -d -p 8005:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=qwe123 -e XTRABACKUP_PASSWORD=qwe123 -e CLUSTER_NAME=PXC -e CLUSTER_JOIN=node1 --name=node3 --net=net1 --ip 172.18.0.4 percona/percona-xtradb-cluster:5.7

四、为什么要使用Haproxy?

1.高性能

image.png

2.使用docker安装Haproxy

# 拉取haproxy image
docker pull haproxy

# 在虚拟机中创建保存haproxy配置文件的目录
mkdir -p ~/haproxy_conf/

# 创建haproxy.cfg配置文件
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   /
    stats realm     Global\ statistics
    #登陆帐户信息
    stats auth  admin:qwe123
#数据库负载均衡
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
    option  tcpka
# 运行容器
docker run -it -d -p 8078:8888 -p 8036:3306 -v /root/haproxy_conf:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.5 haproxy

# 查看端口是否启动
netstat -ltunp | grep 8078

# 进入haproxy容器,启动haproxy
docker exec -it h1 bash

# 加载haproxy配置文件
haproxy -f /usr/local/etc/haproxy/haproxy.cfg

3.使用Navicat登录haproxy
在数据库中创建一个没有任何权限的haproxy用户,密码为空,来测试mysql负载均衡是否正常。

CREATE USER 'haproxy'@'%' IDENTIFIED BY '';

此时,本项目所有数据转为通过Haproxy 进行存储,要将原数据导入到Haproxy中在分发到node1,node2,node3,数据库接口已改变

但需要在Haproxy 创建用户, django 将数据库配置改为Haproxy的ip和端口

相关文章

网友评论

      本文标题:数据库集群与负载均衡

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