真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

對mycat讀寫分離主從切換策略的調(diào)研

    當從庫宕機后,讀請求會全部轉(zhuǎn)移到主庫上,對業(yè)務(wù)無影響。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了準格爾免費建站歡迎大家使用!

2、當主庫宕機后

    目前,我們的writehost只設(shè)置了一個主庫,當主庫宕機后,通過mycat的 讀寫請求會全部報錯,如下所示:

   讀請求:

MySQL> select * from t1;
ERROR  1184  (HY000): 拒絕連接

    寫請求:

mysql> insert into t1 values ( 2 );
ERROR  1184  (HY000): 拒絕連接

3、設(shè)置多個writehost,實現(xiàn)主庫宕機后,寫請求自動切換到從庫

    上面看到,如果只設(shè)置一個writehost,主庫宕機后,并不會自動切換,所有的 讀寫請求全部受影響。

    為了解決這個我們,我們可以設(shè)置多個writehost,當主庫宕機后,自動把寫請求切換到從節(jié)點。

    我們的生產(chǎn)環(huán)境是一主一從,我們可以把兩個節(jié)點都設(shè)置為writehost,這樣如果writehost1(主庫)宕機后,mycat會自動把 請求全部轉(zhuǎn)移到writehost2(從庫)上。

    原來配置:

[root @demo -init conf]# cat  schema.xml
"1.0" ?>
" schema.dtd" >
" http://io.mycat/" >
     "db1"  checkSQLschema= "false"  sqlMaxLimit= "500"  dataNode= "dn1" >
     "dn1"  dataHost= "localhost1"  database= "db1"  />
     "localhost1"  maxCon= "1000"  minCon= "10"  balance= "3"  writeType= "0"  dbType= "mysql"  dbDriver= "native"  switchType= "-1"  slaveThreshold= "100" >
         select user()
        
     "hostM1"  url= " 192.168.174.30:3306"  user= "root"  password= "123456" >
     "hostS1"  url= " 192.168.174.30:3307"  user= "root"  password= "123456"  />
    
    

  修改后配置:

[root @demo -init conf]# cat  schema.xml
"1.0" ?>
" schema.dtd" >
" http://io.mycat/" >
     "db1"  checkSQLschema= "false"  sqlMaxLimit= "500"  dataNode= "dn1" >
     "dn1"  dataHost= "localhost1"  database= "db1"  />
     "localhost1"  maxCon= "1000"  minCon= "10"  balance= "3"  writeType= "0"  dbType= "mysql"  dbDriver= "native"  switchType= "1"  slaveThreshold= "100" >
         select user()
        
     "hostM1"  url= " 192.168.174.30:3306"  user= "root"  password= "123456" >
     "hostS1"  url= " 192.168.174.30:3307"  user= "root"  password= "123456"  />
    
     "hostM2"  url= " 192.168.174.30:3307"  user= "root"  password= "123456" />
    

   就改了兩處:

  a)把 switchType="-1"改成 switchType="1";

        說明: switchType:

"allinmd-mysql-3"  url= " 192.168.174.30:3307"  user= "root"  password= "123456" />

    這樣配置后,當主庫宕機后,寫請求就會自動轉(zhuǎn)移到從庫上,從而保證業(yè)務(wù)正??捎?。

4、當原主庫恢復(fù)后的處理

     當原主庫恢復(fù)后,它將不能納入mycat的管理(blance=3)。也就是說,原主庫恢復(fù)后,mycat不會把寫請求發(fā)送到原主庫。這是由conf/dnindex.properties來決定的。

    下面是mycat官方文檔的說明,摘錄在這。

     正常情況下,Mycat 會將第一個 writeHost 作為寫節(jié)點,所有的 DML SQL 會發(fā)送給此節(jié)點,若 Mycat 開啟了讀寫分離,則查詢節(jié)點會根據(jù)讀寫分離的策略發(fā)readHost(+writeHost)上執(zhí)行,當一個 dataHost 里面配置了兩個或多個 writeHost 的情況下,如果第一個 writeHost 宕機,則 Mycat 會在默認的3 次心跳檢查失敗后,自動切換到下一個可用的 writeHost 執(zhí)行 DML SQL 語句,并在 conf/dnindex.properties文件里記錄當前所用的 writeHost 的 index(第一個為 0,第二個為 1,依次類推),注意,此文件不能刪除和擅自改變,除非你深刻理解了它的作用以及你的目的。
     那么問題來了,當原來配置的 MySQL 寫節(jié)點宕機恢復(fù)以后,怎么重新加入 Mycat,要不要恢復(fù)為原來的寫節(jié)點?關(guān)于這個問題,我們也曾與 DBA 討論很久,最終的建議方案是,保持現(xiàn)有狀態(tài)不變,改旗易幟,恢復(fù)后的MySQL 節(jié)點作為從節(jié)點,跟隨新的主節(jié)點,重新配置主從同步,原先跟隨該節(jié)點做同步的其他節(jié)點也同樣換帥,重新配置同步源,這些節(jié)點的數(shù)據(jù)手完成同步以后,再加入 Mycat 里。目前 1.3 版本的 Mycat 還沒有實現(xiàn)監(jiān)控MySQL 主從同步狀態(tài)的功能,因此這個過程里,DBA 可以先修改 MySQL 的密碼,讓 Mycat 無法鏈接故障服務(wù)器,等同步完成以后,恢復(fù)密碼,這樣 Mycat 就自動重新將修復(fù)好的 Mycat 納管進來了。

     也就是說,當主庫恢復(fù)后,需要手工重新配置主從同步。

5、讀寫分離的條件

   讀寫分離必須滿足如下條件,讀操作才能發(fā)往從節(jié)點執(zhí)行。

  a)必須在schema.xml中配置readHost, 而且balance配置不為0。
  b)SQL語句為select 或者show。
  c)   在非事務(wù)中。當然,也可以通過注釋/#mycat:db_type=slave, ... / 強制發(fā)從。

   下面我們測試一下在事務(wù)中和在非事務(wù)中,select的表現(xiàn)。

     先說明一下我的環(huán)境,3306是主庫,3307是從庫。

    1、在 非事務(wù)中,可以看到通過mycat查詢的是3307 從庫的數(shù)據(jù):

mysql> select * from t1;   //查到的是從庫數(shù)據(jù)
+------+
| id   |
+------+
3307  |
+------+
1  row in set ( 0.00  sec)

   2、在 事務(wù)中,可以看到通過mycat查詢的是3306 主庫的數(shù)據(jù):

mysql> begin;
Query OK,  0  rows affected ( 0.00  sec)
 
mysql> select * from t1;  //查到的是主庫數(shù)據(jù)
+------+
| id |
+------+
3306  |
+------+
1  row in set ( 0.00  sec)

   3、使用 注解,讓 事務(wù)中的查詢, 強制讀從庫

mysql> begin;
Query OK,  0  rows affected ( 0.00  sec)
 
mysql> select * from t1;   //看到select 在事務(wù)中讀了主庫
+------+
| id |
+------+
3306  |
+------+
1  row in set ( 0.00  sec)
 
mysql>  /*!mycat:db_type=slave*/ select * from t1;     //看到加了注解后,select 在事務(wù)中讀了從庫
+------+
| id |
+------+
3307  |
+------+
1  row in set ( 0.01  sec)
 
mysql> select * from t1;   //看到select 在事務(wù)中讀了主庫
+------+
| id |
+------+
3306  |
+------+
1  row in set ( 0.00  sec)

6、官方建議的mycat讀寫分離架構(gòu)

對mycat讀寫分離主從切換策略的調(diào)研


網(wǎng)站標題:對mycat讀寫分離主從切換策略的調(diào)研
網(wǎng)頁URL:http://weahome.cn/article/pdgspe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部