mycat读写分离与主从切换

1, 分库分表的优缺点、以及为什么分表方式无法成为主流?

分表:在台服务器上,优点是易维护,类似表分区,缺点是在一台db服务器上,无法分担IO、负载集中。

分库:在多台服务器上,优点是分担IO、负载均衡,缺点是较不易维护、数据统计以及jion操作有些难度。

数据库切分的目的是为了分担IO、负载均衡,分表无法达到最佳的要求,所以无法成为主流。

2, 准备主库

tar -xvf mysql-5.6.12.tar.gz

cd mysql-5.6.12

time cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql56m1 -DMYSQL_DATADIR=/home/data/mysql56m1/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR==/usr/local/mysql56m1/mysql.sock -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

time make

time make install

chown -R mysql /home/data/

chgrp -R mysql /home/data/

chown -R mysql /usr/local/mysql

chown -R mysql /usr/local/mysql56m1

chgrp -R mysql /usr/local/mysql

chgrp -R mysql /usr/local/mysql56m1/

mkdir -p /home/data/mysql56m1/binlog/

chown -R mysql.mysql /home/data/mysql56m1/binlog/

mkdir -p /home/data/mysql5610/binlog/

chown -R mysql.mysql /home/data/

cd /usr/local/mysql56m1

time scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql56m1 –datadir=/home/data/mysql56m1/data –defaults-file=/usr/local/mysql56m1/my.cnf

cp support-files/mysql.server /etc/init.d/mysql56m1

chmod 700 /etc/init.d/mysql56m1

echo “export PATH=$PATH:/usr/local/mysql56m1/bin”>>/etc/profile

source /etc/profile

chkconfig –add mysql56m1

service mysql56m1 start

3, 准备备库

tar -xvf mysql-5.6.12.tar.gz

cd mysql-5.6.12

time cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql56s1 -DMYSQL_DATADIR=/home/data/mysql56s1/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR==/usr/local/mysql56s1/mysql.sock -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

time make

time make install

chown -R mysql /home/data/

chgrp -R mysql /home/data/

chown -R mysql /usr/local/mysql

chown -R mysql /usr/local/mysql56s1

chgrp -R mysql /usr/local/mysql

chgrp -R mysql /usr/local/mysql56s1/

mkdir -p /home/data/mysql56s1/binlog/

chown -R mysql.mysql /home/data/mysql56s1/binlog/

mkdir -p /home/data/mysql5610/binlog/

chown -R mysql.mysql /home/data/

cd /usr/local/mysql56s1

time scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql56s1 –datadir=/home/data/mysql56s1/data –defaults-file=/usr/local/mysql56s1/my.cnf

cp support-files/mysql.server /etc/init.d/mysql56s1

chmod 700 /etc/init.d/mysql56s1

echo “export PATH=$PATH:/usr/local/mysql56s1/bin”>>/etc/profile

source /etc/profile

chkconfig –add mysql56s1

service mysql56s1 start

4, 搭建主从环境

在一台服务器,主3317端口,从3327端口。

主库备库上,添加复制帐号:

GRANT REPLICATION SLAVE ON . TO ‘repl’@’10.254.%’ IDENTIFIED BY ‘mycatms’;

在备库上3327端口上设置复制:

stop slave;

reset slave;

change master to master_user=’repl’, master_password=’mycatms’, master_host=’127.0.0.1’,master_port=3317, master_log_file=’mysql-bin.000003’,master_log_pos=840;

start slave;

show slave status\G;

主库:3317端口

从库:3327端口

数据同步测试:

5, 数据同步测试:

配置schema.xml:

然后修改mycat的schema.xml:

balance为1:让全部的readHost及备用的writeHost参与select的负载均衡。

switchType为2:基于MySQL主从同步的状态决定是否切换。

heartbeat:主从切换的心跳语句必须为show slave status。

5.0 数据录入:

mysql> explain create table company(id int not null primary key,name varchar(100));

+———–+———————————————————————+

| DATA_NODE | SQL |

+———–+———————————————————————+

| dn1 | create table company(id int not null primary key,name varchar(100)) |

| dn2 | create table company(id int not null primary key,name varchar(100)) |

| dn3 | create table company(id int not null primary key,name varchar(100)) |

+———–+———————————————————————+

3 rows in set (0.00 sec)

mysql> create table company(id int not null primary key,name varchar(100));

Query OK, 0 rows affected (0.01 sec)

mysql> explain insert into company(id,name) values(1,’alibaba’);

+———–+————————————————–+

| DATA_NODE | SQL |

+———–+————————————————–+

| dn1 | insert into company(id,name) values(1,’alibaba’) |

| dn2 | insert into company(id,name) values(1,’alibaba’) |

| dn3 | insert into company(id,name) values(1,’alibaba’) |

+———–+————————————————–+

3 rows in set (0.10 sec)

mysql> insert into company(id,name) values(1,’alibaba’);

Query OK, 1 row affected (0.00 sec)

mysql>

5.1主库验证:

[[email protected]_idc_squid_1_11 logs]# /usr/local/mysql56m1/bin/mysql -uroot -p -P3317 –socket=/usr/local/mysql56m1/mysql.sock -e “select @@port;select * from db1.company”;

Enter password:

+——–+

| @@port |

+——–+

| 3317 |

+——–+

+—-+———+

| id | name |

+—-+———+

| 1 | alibaba |

+—-+———+

[[email protected]_idc_squid_1_11 logs]#

5.2从库验证:

[[email protected]_idc_squid_1_11 logs]# /usr/local/mysql56s1/bin/mysql -uroot -p -P3327 –socket=/usr/local/mysql56s1/mysql.sock -e “select @@port;select * from db1.company”;

Enter password:

+——–+

| @@port |

+——–+

| 3327 |

+——–+

+—-+———+

| id | name |

+—-+———+

| 1 | alibaba |

+—-+———+

[[email protected]_idc_squid_1_11 logs]#

6,读写分离模式

6.1然后修改mycat的schema.xml:

balance为1:让全部的readHost及备用的writeHost参与select的负载均衡。

switchType为2:基于MySQL主从同步的状态决定是否切换。

heartbeat:主从切换的心跳语句必须为show slave status。

有配置读节点:

时间: 2024-10-20 14:32:23

mycat读写分离与主从切换的相关文章

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

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

MyCat的读写分离与主从切换。

1. 读写分离优缺点 优点:减轻主库的压力,缺点:主库宕机数据的一至性. 2. 准备两台主机(虚拟机就好了) master:192.168.104.86 slave:192.168.104.96 mysql数据库安装就不说了,自己找. mysql版本号:5.6.28 mycat版本号:mycat-1.5.1-RELEASE-20160405120037 3. 主从环境 master上建立复制账号 mysql>GRANT REPLICATION SLAVE ON *.* TO   IDENTIFI

使用Mycat实现MySQL的分库分表、读写分离、主从切换

Mycat及MySQL实例部署情况:Mycat:IP:10.20.8.57,Port:3310/3311MySQL :db1-M1,IP:10.20.8.126,Port:3306db1-M2,IP:10.20.8.126,Port:3307db2-M1,IP:10.25.80.7,Port:3307架构图如下: 配置Mycatserver.xml: <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server x

redis的主从复制,读写分离,主从切换

当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能. redis提供了一个master,多个slave的服务. 准备三个redis服务,依次命名文件夹子master,slave1,slave2.这里为在测试机上,不干扰原来的redis服务,我们master使用6000端口. 配置文件(redis.conf) master配置修改端口: port 6000 requirepass 123456

Redis哨兵模式(sentinel)部署记录(主从复制、读写分离、主从切换)

部署环境: CentOS7.5  192.168.94.11 (master) 192.168.94.22 (slave0) 192.168.94.33 (slave1) 192.168.94.44 (slave2) 所有节点都需要安装redis+sentinel [[email protected] ~]# tar xf redis-4.0.11.tar.gz -C /usr/local/src/ [[email protected] ~]# cd /usr/local/src/redis-4

Redis(5)-----初识Redis-----主从复制.读写分离,主从切换(哨兵机制)

当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能. https://www.cnblogs.com/jaycekon/p/6237562.html 一,主从分离(读写分离,主从复制) 首先我们默认已经安装了redis,然后复制master,slave1,slave2三个redis的文件.并把redis.conf拷贝到多个redis文件夹中来.不干扰原来的redis服务,我们master使用

[转]Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中.sentinel是redis高可用的解决方案,sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的

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

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