Mycat读写分离以及拆库拆表综合实验1:主从复制与多源复制

数据规划:

Haproxy 集群

haproxy01 node127 192.168.31.127
haproxy02 node128 192.168.31.128

Mycat集群

mycat01 node119 192.168.31.119
mycat02 node118 192.168.31.118

MySQL主从复制集群

mysqlm1 node115   192.168.31.115
mysqlm2 node116   192.168.31.116
mysqls1  node117   192.168.31.117

MySQL galera Cluster

pxc1 node123 192.168.31.123
pxc2 node124 192.168.31.125
pxc3 node126 192.168.31.126

部署mysql互为主从、多源复制

编辑node115配置文件

node115# cat /etc/my.cnf
                datadir=/var/lib/mysql
                socket=/var/lib/mysql/mysql.sock
                log-bin=/tmp/node115
                log-bin-index=/tmp/node115
                server-id=115
                innodb_file_per_table=1

编辑node116配置文件

node116# cat /etc/my.cnf
log-bin=/tmp/node116
log-bin-index=/tmp/node116
server-id=116
innodb_file_per_table=1

编辑node117配置文件
node117上的配置

master_info_repository=TABLE
relay_log_info_repository=TABLE
server-id=117
slave_skip_errors = 1062

master_info_repository

开启MTS功能后,务必将参数master_info_repostitory设置为TABL,这样性能可以有50%~80%的提升。这是因为并行复制开启后对于元master.info这个文件的更新将会大幅提升,资源的竞争也会变大。在之前InnoSQL的版本中,添加了参数来控制刷新master.info这个文件的频率,甚至可以不刷新这个文件。因为刷新这个文件是没有必要的,即根据master-info.log这个文件恢复本身就是不可靠的。在MySQL 5.7中,推荐master_info_repository设置为TABLE,来减少这部分的开销。

relay_log_info_repository 同理

在node115、node116上执行授权操作
mysql> grant replication slave on *.* to ‘rep‘@‘192.168.31.%‘ identified by ‘Mirror-12345‘;

在配置同步之前先要获取master file以及Pos,请根据实际情况配置

mysql> show master status\G
*************************** 1. row ***************************
             File: node115.000002
             Position: 35291277

在node116上的配置:

mysql> change master to
    -> master_host=‘192.168.31.115‘,
    -> master_user=‘rep‘,
    -> master_password=‘Mirror-12345‘,
    -> master_port=3306,
    -> master_log_file=‘node115.000002‘,
    -> master_log_pos=154;

在node115上的配置:

mysql> change master to
    -> master_host=‘192.168.31.116‘,
    -> master_user=‘rep‘,
    -> master_password=‘Mirror-12345‘,
    -> master_port=3306,
    -> master_log_file=‘node116.000002‘,
    -> master_log_pos=154;

node117上的配置

mysql> set global read_only=1;  #只读模式

change master to
master_host=‘192.168.31.115‘,
master_user=‘rep‘,
master_password=‘Mirror-12345‘,
master_port=3306,
master_log_file=‘node115.000002‘,
master_log_pos=154 for channel ‘node115‘; #以channel区分源

change master to
master_host=‘192.168.31.116‘,
master_user=‘rep‘,
master_password=‘Mirror-12345‘,
master_port=3306,
master_log_file=‘node116.000001‘,
master_log_pos=447 for channel ‘node116‘;

确定replication已经正常运行

mysql> show slave status\G[for channel chanelname]
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

在node115或者node116上使用存储过程来确定同步

#创建表

CREATE TABLE `t3` (
    `id` INT (11) NOT NULL AUTO_INCREMENT,
    `user_id` VARCHAR (20) NOT NULL,
    `vote_id` INT (11) NOT NULL,
    `group_id` INT (11) NOT NULL,
    `create_time` datetime NOT NULL,
    PRIMARY KEY (`id`),
    KEY `index_user_id` (`user_id`) USING HASH
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8

#创建存储过程

DELIMITER //
CREATE  PROCEDURE `t5`(IN n int)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE (i <= n ) DO  INSERT INTO t3(user_id,vote_id,group_id,create_time ) VALUES (FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 100) ,now() );
set i=i+1;
END WHILE;
END;
//

#调用存储

call t5(10000)

#在node117上确定数据已经同步

mysql> select count(*) from t3;

部署galera cluster

[[email protected] ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
# yum install Percona-XtraDB-Cluster-57
# systemctl start mysql
# mysql -uroot -p
mysql> grant all on *.* to [email protected]‘192.168.31.%‘ identified by ‘Mirror-12345‘; #授权sst用户
# systemctl stop mysql

修改wsrep配置文件

[[email protected] ~]# cat /etc/percona-xtradb-cluster.conf.d/wsrep.cnf |grep -v ‘#‘
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_address=gcomm://192.168.31.123,192.168.31.125,192.168.31.126
binlog_format=ROW

default_storage_engine=InnoDB

wsrep_slave_threads= 8

wsrep_log_conflicts

innodb_autoinc_lock_mode=2

wsrep_node_address=192.168.31.123
wsrep_cluster_name=pxc-cluster

wsrep_node_name=node123

pxc_strict_mode=ENFORCING

wsrep_sst_method=xtrabackup-v2

wsrep_sst_auth="sstuser:Mirror-12345"

修改其余两个节点的配置文件,与第一个完全相同,除了一下两个参数

wsrep_node_name=node125
wsrep_node_address=192.168.31.125

wsrep_node_name=node126
wsrep_node_address=192.168.31.126

启动第一个节点

[[email protected] ~]# systemctl start [email protected]

mysql> show status like ‘wsrep%‘; #请关注下面的参数
| wsrep_cluster_size               | 1

启动第二个节点

[[email protected] ~]# systemctl start [email protected]

mysql> show status like ‘wsrep%‘; #请关注下面的参数
| wsrep_cluster_size               | 2

启动第三个节点

[[email protected] ~]# systemctl start [email protected]

mysql> show status like ‘wsrep%‘; #请关注下面的参数
| wsrep_cluster_size               | 3

请使用之前提供的存储过程验证rep功能。

需要说明的是:这个是测试环境,包括之前的mysql主从,以及当前的galera cluster,所以没有全量备份这个步骤,在生产环境中,需要注意。

原文地址:http://blog.51cto.com/2143754/2119712

时间: 2024-10-03 07:01:21

Mycat读写分离以及拆库拆表综合实验1:主从复制与多源复制的相关文章

Mycat读写分离和分库分表配置

Mycat是一个开源的分布式数据库系统,不同于oracle和mysql,Mycat并没有存储引擎,但是Mycat实现了mysql协议,前段用户可以把它当做一个Proxy.其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端mysql存储引擎里面.最新版本的Mycat不仅支持mysql,还可以支持MS SqlServer,Oracle,DB2等关系型数据库,而且还支持MongoDB这种NoSQL.Mycat对调用者屏蔽了后端存储具体实现. Mycat的原理是先拦截用户的SQL语句并做分

LVS+MYCAT+读写分离+MYSQL主备同步部署手册

LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1         编辑my.cnf文件… 2 1.2.2         重启数据库… 2 1.3       锁定主数据库DDL操作… 2 1.4       主备已有数据同步… 2 1.5       停止从服务… 3 1.6       配置备用数据库… 3 1.6.1         编辑my

LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)

1      配置MYSQL主备同步 1.1    测试环境 mysql版本:5.6.24: 操作系统内核版本:Linux-3.13-0-32 主数据库IP:192.168.10.3: 主数据库名:db351353: 备用数据库IP:192.168.10.4: 备用数据库名:db351353. 1.2    配置主数据库 1.2.1   编辑my.cnf文件 #服务器唯一ID,一般取IP最后一段 server_id = 3 #启用二进制日志 log_bin=mysql_bin #需要备份的数据库

【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)

By leo | 2015/05/13 0 Comment LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1         编辑my.cnf文件… 2 1.2.2         重启数据库… 2 1.3       锁定主数据库DDL操作… 2 1.4       主备已有数据同步… 2 1.5       停止从服务… 3 1.6      

Mycat读写分离、主从切换学习(转)

http://blog.csdn.net/zhanglei_16/article/details/50707487 Mycat读写分离.主从切换学习问题一:分表.分库的优缺点,以及分表无法成为主流分表方式:是在将一个大表,在一个db库内,分成多个分表,优点是:分开之后的表,仍然在一个库内,便于查看.管理.缺点:db只能在一个服务器内,不能解决I/O问题,负载集中 分库方式:将一个大表,分布在多个DB中,每个DB只保留一部分数据,所有数据组合起来才是全库的数据.优点:优点是分担IO.负载均衡,可以

Mycat读写分离部署分享

安装配置mycat 涉及到的安装包: 安装包:Mycat-server-1.6-RELEASE-linux.tar.gz 依赖环境:jdk-7u75-linux-x64.tar.gz 1安装JDK (1)创建java目录 # mkdir -p /usr/local/java (2)上传JDK到/usr/local/java目录下 (3)解压jdk-7u75-linux-x64.tar.gz # cd /usr/local/java # tar -zxvf jdk-7u75-linux-x64.t

mysql主从同步+mycat读写分离+.NET程序连接mycat代理

背景 最近新项目需要用到mysql数据库,并且由于数据量大的原因,故打算采用1主1从(主数据库负责增.删.改操作:从数据库负责查操作)的数据库架构,在实现主从之后还要实现读写分离的代理,在网上搜寻了很久,自己也了解了一些资料,目前有三种代理组件:1.mysql_proxy   2.amoeba   3.mycat   我采用了第3种,选择mycat的原因下面会提到. 部署环境 我在我虚拟机下面装了三台Centos7_x64系统: 1.192.168.8.47 主mysql服务器 2.192.16

web 项目 连接mycat 读写分离失效问题,

问题描述:mycat 读写分离已配好,在sql工具上查询操作是可以的,但是在项目中,读数据就走write 数据库, 解决      :环境spring +mvc +ibaites,在java中自己写jdbc连接是可以,读写分离,但是就是在业务程序中不能读写分离 之前是想是不是jdbc问题,换了几个jdbc连接池还是不行,最后各种查资料(没用网上根本没有这个), 最后各种方法试最后定位到事务的问题,因为代码命名不规范,方法被纳入到事务管理,因此造成读写数据都走write数据库 结论:    myc

Mysql mycat读写分离

Mysql mycat读写分离: 下载网址:http://dl.mycat.ioMycat官方网址:http://mycat.org.cn 说明:10.0.1.2为mycat服务器,10.0.1.3.10.0.1.4为mysql服务器 yum install java-1.8.0-openjdk tar zxfv Mycat-server-1.6.7.5-test-20200109231555-linux.tar.gz -C /space/ 配置读写分离: vi /space/mycat/con

Mycat读写分离以及拆库拆表综合实验2:部署配置mycat读写分离与拆库拆表

部署 mycat mycat基于java运行,检查java版本 [[email protected] ~]# java -version openjdk version "1.8.0_171" OpenJDK Runtime Environment (build 1.8.0_171-b10) OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode) 配置java变量 [[email protected] ~]# vim /etc/p