mysql+mycat實現讀寫分離

來源:互聯網
上載者:User

標籤:情況下   ges   pos   bdr   master   users   driver   簡單的   system   

centos7

master slave mycat1.6 client
192.168.41.10 192.168.41.11 192.168.41.12 192.168.41.13

實驗環境關閉自己的防火牆
配置所有主機hosts檔案:

1、master(41.10):
vim /etc/my.cnf

systemctl restart mysqld \重啟服務讀取設定檔參數
1)配置複製使用者以及root使用者權限

2、slave(41.11)
配置/etc/my.cnf設定檔

systemctl restart mysqld
mysql> change master to master_host=‘192.168.41.10‘,master_user=‘myslave‘,master_password=‘123.com‘,master_log_file=‘mysql-bin.000002‘,master_log_pos=1334;
mysql> start slave ;
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql> grant all on . to [email protected]‘%‘ identified by ‘123.com‘;
mysql> flush privileges;
回到master主機建立test庫
mysql> create database test;
3、配置mycat(41.12)
1)部署mycat
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
[[email protected] ~]# tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local
2)載入環境變數
[[email protected] ~]# vi /etc/profile
.....
export PATH=$PATH:/usr/local/java/bin
export JAVA_HOME=/usr/local/java
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:/usr/local/mycat/bin
[[email protected] ~]# source /etc/profile
3)配置serve.xml
[[email protected] ~]# cd /usr/local/mycat/conf/
[[email protected] conf]# vim server.xml

......
<user name="root">
<property name="password">123.com</property>
<property name="schemas">test</property>

            &lt;!-- 表級 DML 使用權限設定 --&gt;            &lt;!--                        &lt;privileges check="false"&gt;                    &lt;schema name="TESTDB" dml="0110" &gt;                            &lt;table name="tb01" dml="0000"&gt;&lt;/table&gt;                            &lt;table name="tb02" dml="1111"&gt;&lt;/table&gt;                    &lt;/schema&gt;            &lt;/privileges&gt;                        --&gt;    &lt;/user&gt;    &lt;user name="user"&gt;            &lt;property name="password"&gt;user&lt;/property&gt;            &lt;property name="schemas"&gt;test&lt;/property&gt;            &lt;property name="readOnly"&gt;true&lt;/property&gt;    &lt;/user&gt;

</mycat:server>
4)配置schema.xml
[[email protected] conf]# vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">    </schema>    <dataNode name="dn1" dataHost="host01" database="test" />    <dataHost name="host01" maxCon="1000" minCon="10" balance="1"                      writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">            <heartbeat>show slave status</heartbeat>            <writeHost host="hostM1" url="192.168.41.10:3306" user="root" password="123.com">            <readHost host="hostS1" url="192.168.41.11:3306" user="root" password="123.com"/>            </writeHost>    </dataHost>            </mycat:schema>
  balance?屬性負載平衡類型,目前的取值有 4 種:

balance="0", 不開啟讀寫分離機制,所有讀操作都發送到當前可用 的writeHost 上。 balance="1",全部的 readHost 與 stand by writeHost 參與 select 語句的負載平衡,簡單的說,當雙主雙從模式(M1 ->S1 , M2->S2,並且 M1 與 M2 互為主備),正常情況下, M2,S1,S2 都參與 select 語句的負載平衡。 balance="2",所有讀操作都隨機的在 writeHost、 readhost 上分發。 balance="3", 所有讀請求隨機的分發到 wiriterHost 對應的 readhost 執行,writerHost 不負擔讀壓力,注意 balance=3 只在 1.4 及其以後版本有, 1.3 沒有。

writeType?屬性,負載平衡類型,目前的取值有 3 種:
writeType="0", 所有寫操作發送到配置的第一個 writeHost,第一個掛了切到還生存的第二個writeHost,重新啟動後已切換後的為準,切換記錄在設定檔中:dnindex.properties . writeType="1",所有寫操作都隨機的發送到配置的 writeHost。 writeType="2",沒實現。

switchType?屬性
-1 表示不自動切換 1 預設值,自動切換 2 基於MySQL 主從同步的狀態決定是否切換

5)啟動mycat伺服器
[[email protected] logs]# mycat start
[[email protected] logs]# tailf wrapper.log #觀察開機記錄,便於排錯
[[email protected] logs]# ss -anpt | grep java
LISTEN 0 1 127.0.0.1:32000 : users:(("java",pid=40133,fd=4))
LISTEN 0 50 :::50632 ::: users:(("java",pid=40133,fd=51))
LISTEN 0 100 :::9066 :::
users:(("java",pid=40133,fd=69))
LISTEN 0 50 :::33782 ::: users:(("java",pid=40133,fd=53))
LISTEN 0 50 :::1984 :::
users:(("java",pid=40133,fd=52))
LISTEN 0 100 :::8066 :::* users:(("java",pid=40133,fd=73))

4、用戶端(41.13)驗證讀寫分離

   ①登入到串連連接埠

[[email protected] ~]# mysql -h 192.168.41.12 -P 8066 -uroot -p123.com
mysql> show databases;
+----------+
| DATABASE |
+----------+
| test |
+----------+
1 row in set (0.01 sec)

mysql> use test
Database changed
mysql> create table tb (id int);
Query OK, 0 rows affected (0.03 sec)

mysql> insert into tb values (1);
Query OK, 1 row affected (0.05 sec)

mysql> select * from tb;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.02 sec)
②登入管理連接埠
[[email protected] ~]# mysql -P9066 -uroot -p123.com -h 192.168.41.12
mysql> show @@datasource ;
+----------+--------+-------+--------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME | TYPE | HOST | PORT | W/R | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+--------+-------+--------------+------+------+--------+------+------+---------+-----------+------------+
| dn1 | hostM1 | mysql | 192.168.1.12 | 3306 | W | 0 | 10 | 1000 | 49 | 0 | 2 |
| dn1 | hostS1 | mysql | 192.168.1.10 | 3306 | R | 0 | 6 | 1000 | 44 | 2 | 0 |
+----------+--------+-------+--------------+------+------+--------+------+------+---------+-----------+------------+
從管理連接埠觀察兩主機負載變化,發現READ_LOAD在hostS1為2, WRITE_LOAD在hostM1為2,說明讀寫分離已經實現

mysql+mycat實現讀寫分離

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.