mariadb 现有动态列,支持json格式存储,类似mongodb的bson,但是操作能力较为尴尬,中间件有spider,我非常感兴趣的一个东西

关于spider 这里有一篇很好的博文,有时间一定得尝试

Spider引擎分布式数据库解决方案

mariadb 10.3 自带了 Galera ,但是坑爹的是官方镜像里面完全没有提起.没关系,我们程序员靠猜能完成很多事情.

在docker下部署,wsrep_sst_method=xtrabackup-v2 同步方式有坑,花了些时间,没有解决,目前就用wsrep_sst_method=rsync.

在 I7 4790k , nvme 固态硬盘下,测试了50条线程并发负载均衡写入,同步未见异常,但是我的表只设置了一个字段.

在并发写入的时候,把其中一个节点关闭,然后再启动,数据自动同步.

以下是在我电脑上建的一个虚拟机,16G内存,4 * 2 CPU 设置,单机部署的集群环境

docker pull mariadb:10.3

使用微容器的镜像版本,我用的是1.7.9

docker pull haproxy:alpine

haproxy.cfg

global
chroot /usr/local
daemon
nbproc 1
group nobody
user nobody
pidfile /opt/haproxy/logs/haproxy.pid
ulimit-n 65536
#spread-checks 5m
#stats timeout 5m
#stats maxconn 100 ########默认配置############
defaults
mode tcp
retries 3 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
maxconn 32000 #默认的最大连接数
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时
timeout server 30000ms #服务器超时
#timeout check 2000 #心跳检测超时
log 127.0.0.1 local0 err #[err warning info debug] ########MariaDB配置#################
listen mariadb
bind 0.0.0.0:3306
mode tcp
balance roundrobin
server s1 192.168.1.9:3306 weight 1 maxconn 10000 check inter 10s
server s2 192.168.1.9:3307 weight 1 maxconn 10000 check inter 10s
server s3 192.168.1.9:3308 weight 1 maxconn 10000 check inter 10s

关掉selinux和防火墙,避免夜长梦多

/et/hosts

mkdir /home/docker/mariadb/cluster0/
mkdir /home/docker/mariadb/cluster0/conf
mkdir /home/docker/mariadb/cluster0/data
mkdir /home/docker/mariadb/cluster1/
mkdir /home/docker/mariadb/cluster1/conf
mkdir /home/docker/mariadb/cluster1/data
mkdir /home/docker/mariadb/cluster2/
mkdir /home/docker/mariadb/cluster2/data
mkdir /home/docker/mariadb/cluster2/conf

Cluster0/server.cnf配置文件 先注释掉  wsrep_cluster_address,因为要初始化用户之后再开始集群

注意: wsrep_provider_options="gcache.size=128M"#同步复制缓冲池 ,这里我是因为我的电脑固态硬盘容量有限才设置成128M实际使用请根据情况修改

vi /home/docker/mariadb/cluster0/conf/server.cnf
[server]
[mysqld]
server_id=130
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
basedir=/usr
datadir=/var/lib/mysql
tmpdir=/tmp
user=mysql
skip-external-locking
skip-name-resolve
character-set-server=utf8
port=3306 #
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
#
# * Fine Tuning
#
max_connections=1000
connect_timeout=5
wait_timeout=600
max_allowed_packet=16M
thread_cache_size=128
sort_buffer_size=4M
bulk_insert_buffer_size =16M
tmp_table_size=32M
max_heap_table_size =32M
[galera]
wsrep_causal_reads=ON #节点应用完事务才返回查询请求
wsrep_provider_options="gcache.size=128M"#同步复制缓冲池
wsrep_certify_nonPK=ON #为没有显式申明主键的表生成一个用于certificationtest的主键,默认为ON
#log-bin=/app/galera/mysql-bin #如果不接从库,注释掉
#log_slave_updates=1 #如果不接从库,注释掉
query_cache_size=0 #关闭查询缓存
wsrep_on=ON #开启全同步复制模式
wsrep_provider=/usr/lib/galera/libgalera_smm.so #galera library
wsrep_cluster_name=MariaDB-Galera-Cluster
#wsrep_cluster_address="gcomm://192.168.1.9:4567,192.168.1.9:4568,192.168.1.9:4569" #galera cluster URL
wsrep_node_name=mariadb-0
#wsrep_node_address=172.18.0.4
wsrep_sst_auth=syncuser:syncuser
#wsrep_sst_method=xtrabackup-v2
wsrep_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2 #主键自增模式修改为交叉模式
wsrep_slave_threads=8 #开启并行复制线程,根据CPU核数设置
innodb_flush_log_at_trx_commit=0 #事务提交每隔1秒刷盘
innodb_buffer_pool_size=2G
[embedded]
[mariadb]
[mariadb-10.3]

Cluster1差异部分

wsrep_node_name=mariadb-1

Cluster2差异部分

wsrep_node_name=mariadb-2

启动第一个节点

docker run -d --name mariadb-cluster0 --expose  -p : -p : -e TIMEZONE=Asia/Shanghai -v /home/docker/mariadb/cluster0/conf:/etc/mysql/conf.d  -v /home/docker/mariadb/cluster0/data:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yse mariadb:10.3 

进去容器添加用户

[root@laizhenwei ~]# docker exec -it 1195455508b1 /bin/bash
root@1195455508b1:/# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is
Server version: 10.3.-MariaDB-10.3.+maria~jessie mariadb.org binary distribution Copyright (c) , , Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '' WITH GRANT OPTION;
Query OK, rows affected (0.001 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'syncuser'@'%'IDENTIFIED BY 'syncuser' WITH GRANT OPTION;
Query OK, rows affected (0.001 sec) MariaDB [(none)]> flush privileges;
Query OK, rows affected (0.001 sec) MariaDB [(none)]> shutdown;
Query OK, rows affected (0.001 sec) MariaDB [(none)]>

第二个节点,重复以上添加用户操作

docker run -d --name mariadb-cluster1 --expose  -p : -p : -e TIMEZONE=Asia/Shanghai -v /home/docker/mariadb/cluster1/conf:/etc/mysql/conf.d  -v /home/docker/mariadb/cluster1/data:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yse mariadb:10.3

第三个,重复以上添加用户操作

docker run -d --name mariadb-cluster2  --expose  -p : -p : -e TIMEZONE=Asia/Shanghai -v /home/docker/mariadb/cluster2/conf:/etc/mysql/conf.d  -v /home/docker/mariadb/cluster2/data:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yse mariadb:10.3

停止以及删除容器(注意操作,我这里是停止所有以及删除所有容器)

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

解开wsrep_cluster_address注释,再次启动3个节点  --wsrep-new-cluster 只有在第一次集群,第一个节点,才需要加上,下次启动不需要此参数

cluster0
docker run --name mariadb-cluster0 --expose  -p : -p : -v /home/docker/mariadb/cluster0/conf:/etc/mysql/conf.d  -v /home/docker/mariadb/cluster0/data:/var/lib/mysql mariadb:10.3 --wsrep-new-cluster
cluster1
docker run --name mariadb-cluster1 --expose  -p : -p : -v /home/docker/mariadb/cluster1/conf:/etc/mysql/conf.d  -v /home/docker/mariadb/cluster1/data:/var/lib/mysql mariadb:10.3
cluster2
docker run --name mariadb-cluster2 --expose  -p : -p : -v /home/docker/mariadb/cluster2/conf:/etc/mysql/conf.d  -v /home/docker/mariadb/cluster2/data:/var/lib/mysql mariadb:10.3

查看SHOW STATUS LIKE 'wsrep_cluster_size';

最后启动haproxy容器,这里不搞keepalive,我相信docker 重启机制

docker run -d --restart=always --name haproxy --expose  -p : -v /home/docker/haproxy/conf:/usr/local/etc/haproxy:ro 87e3fb63d1ff

用navicat 连接到haproxy,创建一个test数据库

Docker MariaDB 10.3 Galera Cluster 集群同步复制 多主 Docker Haproxy 负载均衡的更多相关文章

  1. 【原】基于 HAproxy 1.6.3 Keeplived 在 Centos 7 中实现mysql mariadb galera cluster 集群分发读写 —— 上篇

    前言 有一段时间没有写blogs,乘着周末开始整理下haproxy + keeplived 实现 mysql mariadb galera cluster 集群访问环境的搭建工作. 本文集中讲hapr ...

  2. MariaDB Galera Cluster集群搭建

    MariaDB Galera Cluster是什么?   Galera Cluster是由第三方公司Codership所研发的一套免费开源的集群高可用方案,实现了数据零丢失,官网地址为http://g ...

  3. Centos 7 下 Mysql 5.7 Galera Cluster 集群部署

     一.介绍 传统架构的使用,一直被人们所诟病,因为MySQL的主从模式,天生的不能完全保证数据一致,很多大公司会花很大人力物力去解决这个问题,而效果却一般,可以说,只能是通过牺牲性能,来获得数据一致性 ...

  4. 一次galera cluster集群故障节点无法启动问题排查

    现象 环境: Server version: 10.0.25-MariaDB-wsrep MariaDB Server, wsrep_25.13.raf7f02e 配置文件: [root@node-2 ...

  5. MySQL/MariaDB数据库的Galera高可用性集群实战

      MySQL/MariaDB数据库的Galera高可用性集群实战 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Galera Cluster概述 1>.什么是Gale ...

  6. EMQ集群搭建实现高可用和负载均衡(百万级设备连接)

    一.EMQ集群搭建实现高可用和负载均衡 架构服务器规划 服务器IP 部署业务 作用 192.168.81.13 EMQTTD EMQ集群 192.168.81.22 EMQTTD EMQ集群 192. ...

  7. rabbitmq3.6.5镜像集群搭建以及haproxy负载均衡

    一.集群架构 后端75.103.69分别是3台rabbitmq节点做镜像集群,前端103用haproxy作为负载均衡器 二.安装rabbitmq节点 参照 https://www.cnblogs.co ...

  8. 解决 RabbitMQ 集群 Channel shutdown: connection error 错误(HAProxy 负载均衡)

    相关文章:搭建 RabbitMQ Server 高可用集群 具体错误信息: 2018-05-04 11:21:48.116 ERROR 60848 --- [.168.0.202:8001] o.s. ...

  9. MariaDB Galera Cluster集群

    一.MariaDB Galera Cluster概要: 1.简述: MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步 ...

随机推荐

  1. oracle case when及decode的用法

    case ... when 语句 1) CASE column_name WHEN value1 THEN resutl1,... [ ELSE result ] END select name , ...

  2. python使用上下文管理器实现sqlite3事务机制

    如题,本文记录如何使用python上下文管理器的方式管理sqlite3的句柄创建和释放以及事务机制. 1.python上下文管理(with) python上下文管理(context),解决的是这样一类 ...

  3. 使用H2数据库进行单元测试

    背景 H2 数据库是一个开源的嵌入型内存数据库,采用纯Java语言实现: 程序非常小巧轻便,整个完整的Jar包也只有1.5M左右,很容易集成到项目中. 官网地址 http://www.h2databa ...

  4. css层叠样式初学

    一.css简介 1.层叠样式表:叠加效果,不同css对同一html修饰,冲突部分,优先级高作用,不冲突部分,共同作用 2.css作用 (1)修饰html (2)替代了标签自身的颜色,字号等属性,提高复 ...

  5. 【机器学习实战 第九章】树回归 CART算法的原理与实现 - python3

    本文来自<机器学习实战>(Peter Harrington)第九章"树回归"部分,代码使用python3.5,并在jupyter notebook环境中测试通过,推荐c ...

  6. 安装与配置cacti 0.8.8b

    cacti安装与配置 一.安装所需要的软件 Apache    安装Apache文档 Mysql      安装Mysql文档 Php       安装PHP文档 Rrdtool    安装rrdto ...

  7. CentOS上安装MongoDB速记

    测试环境版本CentOS 6.5 先创建安装目标文件夹并进入至该文件夹: mkdir /opt/mongodb cd /opt/mongodb 给mongodb创建用户及用户组: groupadd m ...

  8. 夏令营讲课内容整理 Day 3.

    本日主要内容是树与图.   1.树 树的性质 树的遍历 树的LCA 树上前缀和   树的基本性质: 对于一棵有n个节点的树,必定有n-1条边.任意两个点之间的路径是唯一确定的.   回到题目上,如果题 ...

  9. 【模板小程序】求M~N范围内的质数个数

    /* 本程序说明: [编程题] 求素数 时间限制:2秒 空间限制:32768K 输入M.N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数.素数定义:除了 ...

  10. 【模板小程序】求第n个质数

    #include <iostream> #include <vector> using namespace std; int nth_prime(int n) { vector ...