麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > 文庫 > 正文

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

2024-09-07 22:12:35
字體:
供稿:網(wǎng)友
      當(dāng)從庫宕機(jī)后,讀請(qǐng)求會(huì)全部轉(zhuǎn)移到主庫上,對(duì)業(yè)務(wù)無影響。
1、當(dāng)主庫宕機(jī)后
     目前,我們的writehost只設(shè)置了一個(gè)主庫,當(dāng)主庫宕機(jī)后,通過mycat的 讀寫請(qǐng)求會(huì)全部報(bào)錯(cuò),如下所示:
 
     讀請(qǐng)求:
 
mysql> select * from t1;
ERROR  1184  (HY000): 拒絕連接
    寫請(qǐng)求:
 
mysql> insert into t1 values ( 2 );
ERROR  1184  (HY000): 拒絕連接
2、設(shè)置多個(gè)writehost,實(shí)現(xiàn)主庫宕機(jī)后,寫請(qǐng)求自動(dòng)切換到從庫
    上面看到,如果只設(shè)置一個(gè)writehost,主庫宕機(jī)后,并不會(huì)自動(dòng)切換,所有的 讀寫請(qǐng)求全部受影響。
 
    為了解決這個(gè)我們,我們可以設(shè)置多個(gè)writehost,當(dāng)主庫宕機(jī)后,自動(dòng)把寫請(qǐng)求切換到從節(jié)點(diǎn)。
 
    我們的生產(chǎn)環(huán)境是一主一從,我們可以把兩個(gè)節(jié)點(diǎn)都設(shè)置為writehost,這樣如果writehost1(主庫)宕機(jī)后,mycat會(huì)自動(dòng)把 寫請(qǐng)求全部轉(zhuǎn)移到writehost2(從庫)上。
 
    原來配置:
 
[root @demo -init conf]# cat  schema.xml
<?xml version= "1.0" ?>
<!DOCTYPE mycat:schema SYSTEM  " schema.dtd" >
<mycat:schema xmlns:mycat= " http://io.mycat/" >
     <schema name= "db1"  checkSQLschema= "false"  sqlMaxLimit= "500"  dataNode= "dn1" ></schema>
     <dataNode name= "dn1"  dataHost= "localhost1"  database= "db1"  />
     <dataHost name= "localhost1"  maxCon= "1000"  minCon= "10"  balance= "3"  writeType= "0"  dbType= "mysql"  dbDriver= "native"  switchType= "-1"  slaveThreshold= "100" >
         <heartbeat>select user()</heartbeat>
         <!-- can have multi write hosts -->
     <writeHost host= "hostM1"  url= " 192.168.174.30:3306"  user= "root"  password= "123456" >
     <readHost  host= "hostS1"  url= " 192.168.174.30:3307"  user= "root"  password= "123456"  />
     </writeHost>
     </dataHost>
</mycat:schema>
  修改后配置:
 
[root @demo -init conf]# cat  schema.xml
<?xml version= "1.0" ?>
<!DOCTYPE mycat:schema SYSTEM  " schema.dtd" >
<mycat:schema xmlns:mycat= " http://io.mycat/" >
     <schema name= "db1"  checkSQLschema= "false"  sqlMaxLimit= "500"  dataNode= "dn1" ></schema>
     <dataNode name= "dn1"  dataHost= "localhost1"  database= "db1"  />
     <dataHost name= "localhost1"  maxCon= "1000"  minCon= "10"  balance= "3"  writeType= "0"  dbType= "mysql"  dbDriver= "native"  switchType= "1"  slaveThreshold= "100" >
         <heartbeat>select user()</heartbeat>
         <!-- can have multi write hosts -->
     <writeHost host= "hostM1"  url= " 192.168.174.30:3306"  user= "root"  password= "123456" >
     <readHost  host= "hostS1"  url= " 192.168.174.30:3307"  user= "root"  password= "123456"  />
     </writeHost>
     <writeHost host= "hostM2"  url= " 192.168.174.30:3307"  user= "root"  password= "123456" />
     </dataHost>
</mycat:schema>
   就改了兩處:
 
  a)把 switchType="-1"改成 switchType="1";
 
        說明: switchType:
 
<writeHost host= "allinmd-mysql-3"  url= " 192.168.174.30:3307"  user= "root"  password= "123456" />
    這樣配置后,當(dāng)主庫宕機(jī)后,寫請(qǐng)求就會(huì)自動(dòng)轉(zhuǎn)移到從庫上,從而保證業(yè)務(wù)正??捎?。
 
3、當(dāng)原主庫恢復(fù)后的處理
     當(dāng)原主庫恢復(fù)后,它將不能納入mycat的管理(blance=3)。也就是說,原主庫恢復(fù)后,mycat不會(huì)把寫請(qǐng)求發(fā)送到原主庫。這是由conf/dnindex.properties來決定的。
 
    下面是mycat官方文檔的說明,摘錄在這。
 
     正常情況下,Mycat 會(huì)將第一個(gè) writeHost 作為寫節(jié)點(diǎn),所有的 DML SQL 會(huì)發(fā)送給此節(jié)點(diǎn),若 Mycat 開啟了讀寫分離,則查詢節(jié)點(diǎn)會(huì)根據(jù)讀寫分離的策略發(fā)readHost(+writeHost)上執(zhí)行,當(dāng)一個(gè) dataHost 里面配置了兩個(gè)或多個(gè) writeHost 的情況下,如果第一個(gè) writeHost 宕機(jī),則 Mycat 會(huì)在默認(rèn)的3 次心跳檢查失敗后,自動(dòng)切換到下一個(gè)可用的 writeHost 執(zhí)行 DML SQL 語句,并在 conf/dnindex.properties文件里記錄當(dāng)前所用的 writeHost 的 index(第一個(gè)為 0,第二個(gè)為 1,依次類推),注意,此文件不能刪除和擅自改變,除非你深刻理解了它的作用以及你的目的。
     那么問題來了,當(dāng)原來配置的 MySQL 寫節(jié)點(diǎn)宕機(jī)恢復(fù)以后,怎么重新加入 Mycat,要不要恢復(fù)為原來的寫節(jié)點(diǎn)?關(guān)于這個(gè)問題,我們也曾與 DBA 討論很久,最終的建議方案是,保持現(xiàn)有狀態(tài)不變,改旗易幟,恢復(fù)后的MySQL 節(jié)點(diǎn)作為從節(jié)點(diǎn),跟隨新的主節(jié)點(diǎn),重新配置主從同步,原先跟隨該節(jié)點(diǎn)做同步的其他節(jié)點(diǎn)也同樣換帥,重新配置同步源,這些節(jié)點(diǎn)的數(shù)據(jù)手完成同步以后,再加入 Mycat 里。目前 1.3 版本的 Mycat 還沒有實(shí)現(xiàn)監(jiān)控MySQL 主從同步狀態(tài)的功能,因此這個(gè)過程里,DBA 可以先修改 MySQL 的密碼,讓 Mycat 無法鏈接故障服務(wù)器,等同步完成以后,恢復(fù)密碼,這樣 Mycat 就自動(dòng)重新將修復(fù)好的 Mycat 納管進(jìn)來了。
 
     也就是說,當(dāng)主庫恢復(fù)后,需要手工重新配置主從同步。
 
4、讀寫分離的條件
   讀寫分離必須滿足如下條件,讀操作才能發(fā)往從節(jié)點(diǎn)執(zhí)行。
 
  a)必須在schema.xml中配置readHost, 而且balance配置不為0。
  b)SQL語句為select 或者show。
  c)   在非事務(wù)中。當(dāng)然,也可以通過注釋/#mycat:db_type=slave, ... / 強(qiáng)制發(fā)從。
 
   下面我們測(cè)試一下在事務(wù)中和在非事務(wù)中,select的表現(xiàn)。
 
     先說明一下我的環(huán)境,3306是主庫,3307是從庫。
 
   在 非事務(wù)中,可以看到通過mycat查詢的是3307 從庫的數(shù)據(jù):
 
mysql> select * from t1;   //查到的是從庫數(shù)據(jù)
+------+
| id   |
+------+
|  3307  |
+------+
1  row in set ( 0.00  sec)
  在 事務(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)
   使用 注解,讓 事務(wù)中的查詢, 強(qiáng)制讀從庫:
 
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)

(編輯:武林網(wǎng))

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲va久久久噜噜噜久久男同 | 免费看综艺策驰影院 | 一区二区三区欧美在线 | 国产精品自在线拍 | 中文字幕精品亚洲 | 一级电影在线观看 | 久久国产中文 | 黄色电影免费提供 | 免费看a级片 | 国产亚洲精品久久午夜玫瑰园 | 国产精品久久久久久久久久久久久久久久 | 久久久久91视频 | 性毛片视频 | 亚洲天堂ww | 国产乱淫a∨片免费观看 | 自拍偷拍999 | 精品久久久久久综合日本 | 操操插插 | 国产一区二区在线免费观看 | 精品久久久一二三区播放播放播放视频 | 亚洲一区二区三区高清视频 | 毛片av网址 | 欧美性激情视频 | 色人阁五月天 | 国产毛片在线 | 精品伊人| 成人精品免费看 | 国产九色在线观看 | 亚洲午夜激情网 | 国产成人自拍小视频 | 国产精品免费小视频 | 久久国产精品小视频 | 欧美日韩高清不卡 | 亚州欧美在线 | 免费小毛片 | av电影在线网站 | 99国语露脸久久精品国产ktv | 中文字幕网在线 | 成人毛片视频免费 | 91在线观看 | 久草在线资源观看 |