mycat读写别离与主从切换51CTO博客 - 乐橙lc8

mycat读写别离与主从切换51CTO博客

2019年03月04日14时49分03秒 | 作者: 小蕊 | 标签: 主从,切换,节点 | 浏览: 2768


什么是mycat,以及mycat的长处和特性本文不做赘述,本文持续本着实战的情绪,来共享一些个人对mycat的根底功用实践。本文mycat的读写别离和主从切换的环境为mysql主从环境。

怎么装置mysql数据库能够参阅:

怎么构建mysql主从环境能够参阅:


本文的环境信息:

192.168.1.248 slave

192.168.1.250 master


主从装备完成后,Slave_IO_Running和Slave_SQL_Running状况都为yes

mysql> start slave;
Query OK, 0 rows affected (0.02 sec)
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.250
                  Master_User: mysync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 429
               Relay_Log_File: HE1-relay-bin.000002
                Relay_Log_Pos: 592
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes


创立mycat用到的dataNode对应的数据库及mycat用到的数据库用户

mysql> grant all privileges on *.* to mycat@% identified by MANAGER;
Query OK,0 rows affected (0.01 sec)
 
mysql> flush privileges;
Query OK,0 rows affected (0.00 sec)
 
mysql> create database db1;
Query OK,1 row affected (0.00 sec)
 
mysql> create database db2;
Query OK,1 row affected (0.01 sec)
 
mysql> create database db3;
Query OK,1 row affected (0.01 sec)


装备环境变量

[root@HE3 ~]# echo export PATH=$PATH:/usr/local/mycat/bin >>/etc/profile

[root@HE3 ~]# echo export MYCAT_HOME=/usr/local/mycat >> /etc/profile

[root@HE3 ~]# source /etc/profile


装备/etc/my.cnf中添加参数并重启数据库效劳

lower_case_table_names=1



装置jdk7

[root@HE3 ~]# rpm -ivh jdk-7u79-linux-x64.rpm

Preparing...                # [100%]

   1:jdk                    # [100%]

Unpacking JAR files...

rt.jar...

jsse.jar...

charsets.jar...

tools.jar...

localedata.jar...

jfxrt.jar...


装置mycat

[root@HE3 ~]# tar xvf Mycat-server-1.5.1-RELEASE-20160816173057-linux.tar.gz -C /usr/local

[root@HE3 ~]# groupadd mycat -g 910

[root@HE3 ~]# useradd  mycat -g 910

[root@HE3 ~]# chown -R mycat:mycat /usr/local/mycat


修正必要的装备并发动

[root@HE3 ~]# cd  /usr/local/mycat/conf

[root@HE3 conf]# vim schema.xml

装备table,来决议table分片对应哪个dataNode仍是global表,以及分片规矩和片键


修正第43行的dataHost标签中的writeHost的url  10.10.10.250及用户名mycat和暗码MANAGER



发动mycat

[root@HE3 bin]# cd /usr/local/mycat/bin

[root@HE3 bin]# mycat start

Starting Mycat-server...


调查wrapper.log文件中提示发动成功即可

[root@HE3 bin]# cd /usr/local/mycat/log





装备mycat

[root@HE3 conf]# vi /usr/local/mycat/conf/schema.xml

由于要涉及到试验主节点失利,write节点指向原从节点,所以要把主从节点都设置成writeHost

有关读写别离分发规矩的相关dataHost标签特点balance值:

负载均衡类型,现在取值有3种:

(1) balance="0", 不敞开读写别离机制,一切读操作都发送到当时可用的writeHost上。

(2) balance="1",悉数的readHost与stand by writeHost 参加select句子负载均衡,简略的说,当双主双从形式(M1->S1,M2->S2,而且M1与M2互为主备),正常情冴下,M2,S1,S2 都参加select句子的负载

均衡。(类似于balance=3,读操作只分发到除了真实的主节点之外的一切节点)

(3) balance="2",一切读操作都随机的在 writeHost、 readhost 上分发。(常用些,在一切主从节点上分发读恳求)

(4) balance="3",一切读恳求随机的分发到 writeHost 对应的readhost履行,writeHost不担负读压

力,留意 balance=3 叧在 1.4 及其今后版别有,1.3 没有。(常用些,只在从节点上分发读恳求)

 

注:业务内的sql,默许走写节点,以注释/*balance*/最初,则会依据balance值决议

 

在本例中balance值设置为1,可是这个场景设置成3作用应该是相同的

 

有关主从(读写人物)切换设置特点规矩的相关dataHost标签特点switchType值:

(1)-1表明不主动切换

(2)1默许值,主动切换

(3)2根据mysql主从同步的状况决议是否切换

(4)3根据cluster的切换,心跳句子要改成show status like wsrep%,这个里边装备的都是writehost

 

在本例中switchType值设置为1,表明主动切换,某些对主从数据共同要求较高的场景,主张运用2判别主从状况后再切换,或许运用galera cluster确保各节点数据共同然后将此值设置为3

 

切换的触发条件为主节点mysql效劳溃散或中止(暂时是这么了解的,希望修改的同学能给我回答一下)。

 

slaveThreshold 主从的推迟在多少秒以内,则把读恳求分发到这个从节点,不然不往这个节点分发,假定出产环境能忍受的主从延时为60秒,则设置此值为60,此例中设置值为100

 

有关写恳求是否分发到多个写节点规矩的相关dataHost标签特点writeType值:

(1) 值0表明只分发到当时的主节点

(2) 值1表明分发到一切设定为writeHost的节点,不引荐运用,如同现在版别现已废弃

 

此例中writeType值运用默许值0,写恳求只分发到主节点,不会分发到其他的writeHost上



这儿咱们改变45行的心跳检测为show slave status,来便利之后咱们的读写别离校验


验证读写别离作用

写操作


主节点上:

mysql> show global status like %Com_in%;
++-+
| Variable_name      | Value |
++-+
| Com_insert         | 13    |
| Com_insert_select  | 0     |
| Com_install_plugin | 0     |
++-+
3 rows in set (0.00 sec)


从节点上:

mysql> show global status like %Com_in%;
++-+
| Variable_name      | Value |
++-+
| Com_insert         | 13    |
| Com_insert_select  | 0     |
| Com_install_plugin | 0     |
++-+
3 rows in set (0.00 sec)


写入insert:

mysql> insert into travelrecord(id,name)values(10000005,ddd);
Query OK, 1 row affected (0.00 sec)

能够看到几回刺进的成果都落到了节点192.168.1.250也就是master上

也能够运用show global status like ‘Com_insert’;检查主从mysql上的insert恳求,假如两者都添加,阐明恳求分发到了主上,并仿制到了从上,假如恳求分发到了从上,那么就不会仿制到主上,成果就是主上的这个状况变量不会添加,只要从上的这个状况变量会添加。



读操作

履行select之前

主节点:

mysql> show global status like Com_select;
+-+-+
| Variable_name | Value |
+-+-+
| Com_select    | 1334  |
+-+-+
1 row in set (0.00 sec)

从节点:

mysql> show global status like Com_select;
+-+-+
| Variable_name | Value |
+-+-+
| Com_select    | 385   |
+-+-+
1 row in set (0.00 sec)


履行select句子:

mysql> select * from travelrecord where id=1;
++++
| id | name | age  |
++++
|  1 | aaa  | NULL |
++++
1 row in set (0.00 sec)

 

主节点:

mysql> show global status like Com_select;
+-+-+
| Variable_name | Value |
+-+-+
| Com_select    | 1334  |
+-+-+
1 row in set (0.00 sec)

从节点:

mysql> show global status like Com_select;
+-+-+
| Variable_name | Value |
+-+-+
| Com_select    | 386   |
+-+-+
1 row in set (0.00 sec)



都落在了hostS1也就是slave上

 

多测几回也是以上的作用,阐明契合了balance=1的作用,读恳求分发到了除主节点以外的节点(即从节点)。








验证主动切换

中止当时主节点mysql效劳

[root@HE3 conf]# cat dnindex.properties 
#update
#Mon Sep 12 00:28:33 PDT 2016
localhost1=0
[root@HE3 conf]# /etc/init.d/mysqld stop
Shutting down MySQL............ SUCCESS!


 

调查dnindex.properties文件内容是否改变

[root@HE3 conf]# cat dnindex.properties 
#update
#Mon Sep 12 18:32:28 PDT 2016
localhost1=1


 

当时可用节点只剩下原从节点,希望成果是之后的写入操作悉数落到原从节点,验证:

mysql> insert into travelrecord values(3,helei,25);
ERROR 1064 (HY000): partition table, insert must provide ColumnList
mysql> insert into travelrecord(id,name,age) values(3,helei,25);
Query OK, 1 row affected (0.37 sec)

 

登录原从节点,调查数据改变:

mysql> use db1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-+
| Tables_in_db1 |
+-+
| travelrecord  |
+-+
1 row in set (0.00 sec)
mysql> select * from travelrecord;
+-+-++
| id      | name  | age  |
+-+-++
|       1 | aaa   | NULL |
|       2 | asd   | NULL |
|       3 | helei |   25 |
| 5000000 | bbb   |   11 |
+-+-++
4 rows in set (0.00 sec)


 

阐明此刻写入节点现已切换为装备好的第二个writeHost,也就是原从节点,此刻假如想要将原失利节点重新加入集群,需求重做主从,将原主节点作为从节点加入到集群中,mycat无需重启,对前端应用是通明的。


版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章