kubernetes 测试 Mariadb gtid 主从复制.
k8s 为 1个master 3个node
下载镜像 : mariadb 镜像版本是10.2.13 (此时10.3还没发布正式版)
docker pull mariadb
push到私有仓库
docker tag e1dd445713ae 192.168.91.137:/mariadb
docker push 192.168.91.137:/mariadb
-v /usr/local/docker/mariadb//conf:/etc/mysql/conf.d
挂载配置文件不靠谱,所以把容器内/etc/mysql 拷贝到glusterfs
docker cp d07feca8b0df:/etc/mysql /mnt/gv0/k8s-springcloud/mariadb/master/conf/mysql docker cp d07feca8b0df:/etc/mysql /mnt/gv0/k8s-springcloud/mariadb/slave/conf/mysql
在master 的my.cnf中的[mysqld] 添加以下内容 server-id master ip
binlog-format=ROW
log-bin=master-bin
log-slave-updates=true
sync-master-info=
slave-parallel-threads=
binlog-checksum=CRC32
master-verify-checksum=
slave-sql-verify-checksum=
server-id=
report-port=
port=
在slave 的my.cnf中的[mysqld] 添加以下内容 server-id slave ip (第一次启动slave 时不加,待初始化好了数据库以后,第二次启动容器的时候,加入)
binlog-format=ROW
log-bin=master-bin
log-slave-updates=true
sync-master-info=
slave-parallel-threads=
binlog-checksum=CRC32
master-verify-checksum=
slave-sql-verify-checksum=
server-id=
report-port=
port=
master.yaml 以nodePort 方式访问
kubectl create -f master.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mariadb-master
namespace: k8s-springcloud
spec:
replicas:
selector:
matchLabels:
app: mariadb-master
template:
metadata:
labels:
app: mariadb-master
spec:
nodeName: k8s-node-
hostNetwork: true
terminationGracePeriodSeconds:
containers:
- name: mariadb-master
image: 192.168.91.137:/mariadb
env:
- name: MYSQL_ROOT_PASSWORD
value: root
ports:
- containerPort:
hostPort:
livenessProbe:
exec:
command:
- mysql
- -uroot
- -proot
- -e
- "select 1"
initialDelaySeconds:
periodSeconds:
timeoutSeconds:
readinessProbe:
exec:
command:
- mysql
- -uroot
- -proot
- -e
- "select 1"
initialDelaySeconds:
periodSeconds:
timeoutSeconds:
volumeMounts:
- name: data
mountPath: /var/lib/mysql
- name: log
mountPath: /var/log
- name: conf
mountPath: /etc/mysql
volumes:
- name: data
hostPath:
path: /mnt/gv0/k8s-springcloud/mariadb/master/data
- name: log
hostPath:
path: /mnt/gv0/k8s-springcloud/mariadb/master/log
- name: conf
hostPath:
path: /mnt/gv0/k8s-springcloud/mariadb/master/conf/mysql --- apiVersion: v1
kind: Service
metadata:
name: mariadb-master
namespace: k8s-springcloud
labels:
app: mariadb-master
spec:
type: NodePort
ports:
- port:
nodePort:
targetPort:
slave.yaml 以nodePort 方式访问
kubectl create -f slave.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mariadb-slave
namespace: k8s-springcloud
spec:
replicas:
selector:
matchLabels:
app: mariadb-slave
template:
metadata:
labels:
app: mariadb-slave
spec:
nodeName: k8s-node-
terminationGracePeriodSeconds:
containers:
- name: mariadb-slave
image: 192.168.91.137:/mariadb
env:
- name: MYSQL_ROOT_PASSWORD
value: root
ports:
- containerPort:
hostPort:
livenessProbe:
exec:
command:
- mysql
- -uroot
- -proot
- -e
- "select 1"
initialDelaySeconds:
periodSeconds:
timeoutSeconds:
readinessProbe:
exec:
command:
- mysql
- -uroot
- -proot
- -e
- "select 1"
initialDelaySeconds:
periodSeconds:
timeoutSeconds:
volumeMounts:
- name: data
mountPath: /var/lib/mysql
- name: log
mountPath: /var/log
- name: conf
mountPath: /etc/mysql
volumes:
- name: data
hostPath:
path: /mnt/gv0/k8s-springcloud/mariadb/slave/data
- name: log
hostPath:
path: /mnt/gv0/k8s-springcloud/mariadb/slave/log
- name: conf
hostPath:
path: /mnt/gv0/k8s-springcloud/mariadb/slave/conf/mysql --- apiVersion: v1
kind: Service
metadata:
name: mariadb-slave
namespace: k8s-springcloud
labels:
app: mariadb-slave
spec:
type: NodePort
ports:
- port:
nodePort:
targetPort:
进入master 给slave 分配权限
grant replication slave,replication client on *.* to 'slave'@'%' identified by 'slave';
flush privileges;
进入slave
change master to MASTER_HOST='192.168.1.207',MASTER_USER='slave',MASTER_PASSWORD='slave',MASTER_USE_GTID=current_pos;
START SLAVE;
show slave status\G
在master创建表
-- ----------------------------
DROP TABLE IF EXISTS `tenant_user_info`;
CREATE TABLE `tenant_user_info` (
`id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`create_time` datetime(0) DEFAULT NULL,
`modifier` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`modify_time` datetime(0) DEFAULT NULL,
`version` int(20) DEFAULT NULL,
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`account_non_expired` bit(1) DEFAULT NULL,
`account_non_locked` bit(1) DEFAULT NULL,
`credentials_non_expired` bit(1) DEFAULT NULL,
`enabled` bit(1) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
编写java程序,在插入过程中,直接把slave关机,然后插入结束后,看数据是否自动同步
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserInfoServiceTest { @Resource
private UserInfoService userInfoService; private ExecutorService executorService = Executors.newFixedThreadPool(20); @Test
public void saveTest(){
int dataCount = 10000;
List<CompletableFuture<UserInfo>> futures = new ArrayList<>(dataCount);
for(int i=0;i<dataCount;i++){
UserInfo userInfo = new UserInfo();
userInfo.setUsername("atho"+i);
userInfo.setPassword("1232456");
userInfo.setEnabled(true);
userInfo.setCredentialsNonExpired(true);
userInfo.setAccountNonExpired(true);
userInfo.setAccountNonLocked(true);
futures.add(CompletableFuture.supplyAsync(() -> userInfoService.saveAndFlush(userInfo), executorService).exceptionally(e -> {
e.printStackTrace();
return null;
}));
}
futures.stream().map(CompletableFuture::join).collect(Collectors.toList()).forEach(u-> System.out.println(u.getId()));
}
}
其中10条数据,是之前插入的
附上几个简单命令
#查看master gtid位置
select @@global.gtid_current_pos;
#查看slave gitd位置
select @@global.gtid_slave_pos;
#跳过几个错误
stop slave;
set global sql_slave_skip_counter=1;
start slave;
如果是已存在的数据库 改为gtid,那么复制数据库文件到slave 以后操作
master 操作
MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000005 | 359 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.000 sec)
slave 操作
change master to master_host='192.168.91.141', MASTER_PORT=3306,master_user='slave', master_password='slave', master_log_file='master-bin.000005', master_log_pos=359;
START SLAVE;
kubernetes 测试 Mariadb gtid 主从复制.的更多相关文章
- Centos7.5部署MySQL5.7基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)
之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GT ...
- MariaDB GTID 复制同步
MariaDB GTID 复制同步 GTID:Global Transaction ID,全局事务ID,在整个主从复制架构中任何两个事物ID是不能相同的.全局事务ID是Mster服务器生成一个128位 ...
- 企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)
前言: 原理与思想 这里选用GTID主从复制模式Mysql主从复制模式,是为了更加确保主从复制的正确性.健康性与易配性.这里做的是两服务器A,B各有Mysql实例331 ...
- Mariadb之主从复制的读写分离
首先我们来回顾下代理的概念,所谓代理就是指的是一端面向客户端,另外一端面向服务端,代理客户端访问服务端,我们把这种代理叫正向代理:代理服务端响应客户端我们叫做反向代理,这个我们在之前nginx系列博客 ...
- MariaDB设置主从复制[转载]
3. MariaDB设置主从复制 标签: mariadbMySQL主从复制 翻译人员: 铁锚 翻译日期: 2013年12月25日 原文链接: Setting Up Replication 主从复制 ...
- Linux - centos7 下 MySQL(mariadb) 和 主从复制
目录 Linux - centos7 下 MySQL(mariadb) 和 主从复制 MySQL(mariadb) 安装MySQL(mariadb) 配置数据库的中文支持 在远程用 mysql客户端去 ...
- MySQL 5.7 基于GTID主从复制+并行复制+半同步复制
环境准备 IP HOSTNAME SERVICE SYSTEM 192.168.131.129 mysql-master1 mysql CentOS7.6 192.168.131.130 mysql- ...
- MariaDB基于GTID主从复制及多主复制
一.简单主从模式配置步骤(必须要mysql5.6,此处以maridb10.0.10为例) 1.配置主从节点的服务配置文件 # vim /etc/my.cnf 1.1.配置master节点: [mysq ...
- mysql gtid 主从复制
基于GTID环境搭建主从复制 1.环境 ----------------------------------------------------------| |mysql版本 | 5.7.14 | ...
随机推荐
- (转)TCP连接异常断开检测
TCP是一种面向连接的协议,连接的建立和断开需要通过收发相应的分节来实现.某些时候,由于网络的故障或是一方主机的突然崩溃而另一方无法检测到,以致始终保持着不存在的连接.下面介绍一种方法来检测这种异常断 ...
- Linux入门基础教程之Linux下软件安装
Linux入门基础教程之Linux下软件安装 一.在线安装: sudo apt-get install 即可安装 如果在安装完后无法用Tab键补全命令,可以执行: source ~/.zshrc AP ...
- JAVA的get post 区别
1. get 是从服务器上获取数据,post 是向服务器传送数据. get 请求返回 request - URI 所指出的任意信息.Post 请求用来发送电子邮件.新闻或发送能由交互用户填写的表格.这 ...
- Win7-64位安装TensorFlow-CPU
利用Anaconda安装 1.首先下载Anaconda3-5.1.0-Windows-x86_64.exe 下载地址:https://repo.continuum.io/archive/Anacond ...
- 《C程序猿从校园到职场》带领大家从校园走向职场
七夕节刚过.就有好消息传来:本人新书<C程序猿从校园到职场>正式出版并在各大电商平台上发售了! 以下.让我们一起来赞赏一下纸质书的"风採"吧. 本书文件夹 第1章 概述 ...
- js eventLoop (使用chunk 同步变异步)
https://www.cnblogs.com/xiaohuochai/p/8527618.html 线程 javascript是单线程的语言,也就是说,同一个时间只能做一件事.而这个单线程的特性,与 ...
- oauth 2.0转
原文:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛 ...
- 【NLP】文本相似度
http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html
- windows上完美的X-server服务器软件:MobaXterm
这个软件 太 TMD 好了 . 干净.绿色.小巧. X-server 软件.想知道如何用不,直接打开运行该软件,这样就Enough了!
- IT部门的“2/8”现状
专家的研究和大量企业实践表明,在IT项目的生命周期中,大约80%的时间与IT项目运 营维护有关,而该阶段的投资仅占整个IT投资的20%,形成了典型的“技术高消费”.“轻服务.重技术”现象.Gartne ...