有了docker虚拟机,就需要利用平台部署数据库的集群,在实际操作之前介绍下数据库集群的方案和各自的特点。源码:https://github.com/limingios/netFuture/tree/master/mysql-pxc/
集群的方案
单节点的弊病
- 大型互联网程序用户群体庞大,所以架构必须要特殊设计
- 单节点的数据库无法满足性能的要求
案例15年前,高考成绩可以在网上查(河南几十万考生),那时候基本家里都没电脑,都是去网吧白天去网吧也查不了,太慢了,后来半夜通宵有时候可以查到,也就是说白天基本查不了人太多了。晚上看运气。一个数据库的实例1万多人就无法反应了。
- 单节点的数据库没有冗余设计,无法满足高可用互联网科技发展蓬勃兴起,人工智能时代来临,抓住下一个风口。为帮助那些往想互联网方向转行想学习,却因为时间不够,资源不足而放弃的人。我自己整理的一份最新的大数据进阶资料和高级开发教程,大数据学习群: 740041381就可以找到组织学习 欢迎进阶中和进想深入大数据的小伙伴加入
常用的mysql集群设计方案
- Replication
- 速度快
- 弱一致性
- 低价值
- 场景:日志,新闻,帖子
- PXC
- 速度慢
- 强一致性
- 高价值
- 场景:订单,账户,财务
Percona Xtradb Cluster,简称PXC。是基于Galera插件的MySQL集群。相比那些比较传统的基于主从复制模式的集群架构MHA和MM+keepalived,galera cluster最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。本身galera cluster也是一种多主架构。galera cluster最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证MySQL集群的数据一致性。在PXC里面任何一个节点都是可读可写的。在其他的节点一定是可以读取到这个数据。
-
建议PXC使用PerconaServer(MYSQL的改进版,性能提升很大)
-
PXC方案和Replication方案的对比
PXC任意一个节点都可以存在读写的方案,也就是任意一个节点都可以当读或者当写。同步复制。保证强一致性。
Replication方案,主从的方式,他是采用异步的方式。
- PXC的数据强一致性
同步复制,事务在所有节点要提交都提交。要么都不提交
- Replication弱一致性,主要master成功就成功了。返回给调用者。如果slave失败,也没办法。因为已经告诉调用者成功了,调用者获取查询的时候查询不到信息。例如:在淘宝买个东西,付款也成功了,查询订单没信息是不是要骂娘。
环境搭建
应用 | IP地址 | 服务 | 配置 | 安装应用 | 安装方式 |
---|---|---|---|---|---|
docker-mysql | 192.168.66.100 | docker-mysql | 双核 8g内存 | docker-mysql | docker |
(1). 虚拟机vagrant讲述安装的步骤
vagrant up
(2).机器window/mac开通远程登录root用户下
su -
# 密码
vagrant
#设置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd
PXC集群安装介绍
PXC既可以在linux系统安装,也可以在docker上面安装。
- 安装镜像PXC镜像
docker pull percona/percona-xtradb-cluster
#本地安装
docker load </home/soft/pxc.tar.gz
- 创建内部网络的
处于安全,需要给PXC集群实例创建Docker内部网络,都出可虚拟机自带的网段是172.17.0., 这是内置的一个网段,当你创建了网络后,网段就更改为172.18.0.,
docker network create net1
docker network inspect net1
docker network rm net1
#设置网段
docker network create --subnet=172.18.0.0/24 net1
- 创建Docker 卷
一旦生成docker容器,不要在容器内保存业务的数据,要把数据放到宿主机上,可以把宿主机的一个目录映射到容器内,如果容器出现问题,只需要吧容器删除,重新建立一个新的容器把目录映射给新的容器。
之前一直有个疑问,如果直接映射目录的吧,存在失败的问题,现在终于知道解决方案了,直接映射docker卷就可以可以忽略这个问题了。
容器中的PXC节点映射数据目录的解决方法
docker volume create n