基於Mycat進行讀寫分離


主機 IP
Master 192.168.100.23
Slave 192.168.100.26
Mycat 192.168.100.27

准備工作

所有主機關閉防火牆和selinux

systemctl stop firewalld
setenforce 0

mycat需要java7以上版本,這里java的版本是1.8,大體說一下步驟,首先下載java1.8的包,然后解壓移動到/usr/local,改名為java,然后修改/etc/profile,最后使其生效。

tar xf jdk-8u191-linux-x64.tar.gz
mv jdk1.8.0_191/ /usr/local/java
vim /etc/profile   #末尾添加這兩行
    export JAVA_HOME=/usr/local/java
    export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
[root@localhost ]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

下載mycat,上傳到服務器,解壓移動到/usr/local/,創建一個mycat用戶,並對mycat目錄下進行授權

useradd -M -s /sbin/nologin mycat
chown -R mycat:mycat /usr/local/mycat/
[root@localhost ~]# cd /usr/local/mycat/
[root@localhost mycat]# ll
總用量 16
drwxr-xr-x. 2 mycat mycat  190 1月   6 12:18 bin
drwxrwxrwx. 2 mycat mycat    6 2月  13 2019 catlet
drwxrwxrwx. 4 mycat mycat 4096 1月   7 11:44 conf
drwxr-xr-x. 2 mycat mycat 4096 1月   6 12:18 lib
drwxr-xr-x. 3 mycat mycat   75 1月   6 19:55 logs
drwxr-xr-x. 2 mycat mycat    6 1月   6 14:10 tmlogs
-rwxrwxrwx. 1 mycat mycat  185 2月  13 2019 version.txt
-rw-r--r--. 1 mycat mycat  665 1月   6 14:09 wrapper.log

若沒有logs目錄的話,可以手動創建一個,不然mycat啟動會報錯

Mycat除了做讀寫分離外還能做分庫分表的操作,這里只說一下讀寫分離的配置,主要就是修改conf下schema.xml和server.xml

cd /usr/local/mycat/conf
vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="aaa" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn01">
    </schema>
    <dataNode name="dn01" dataHost="dh1" database="aaa" />
    <dataHost name="dh1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native">
            <heartbeat>select user()</heartbeat>
            <writeHost host="master" url="192.168.100.23:3306" user="root" password="123456">
                <readHost host="slave" url="192.168.100.26:3306" user="root" password="123456"></readHost>
            </writeHost>
    </dataHost>
</mycat:schema>

schema標簽中的name指的是一個邏輯庫,個人建議和真實庫名相同;dataNode是節點,用的是dn01節點,與下面相對應

dataNode標簽中的name來定義節點名稱,dataHost是指采用的dh1主機,database是采用的庫名,這里是真實庫名,要有這個庫才可以
dataHost 標簽中定義了虛擬主機的名稱為dh1,balance=3是指的是開啟讀寫分離,writeHost 是負責寫的主機,子標簽readHost 是指的負責讀操作的主機,url格式為數據庫的IP:端口,后面是數據庫的連接賬號和密碼

server.xml文件配置比較簡單,只需要注意schemas要對應schema.xml文件中schema標簽中的name

[root@localhost conf]# vim server.xml
 <user name="root" defaultAccount="true">
                <property name="password">123456</property>
                <property name="schemas">aaa</property>

然后啟動mycat

[root@localhost mycat]# ./bin/mycat start
Starting Mycat-server...
netstat -lnpt
tcp6       0      0 :::8066                 :::*                    LISTEN      1573/java           
tcp6       0      0 :::9066                 :::*                    LISTEN      1573/java

9066為管理端口,8066為正常連接端口

在這里我出了一個錯 ,能看到aaa庫,但進去很慢,就算進去了,也看不到表,網上亂七八糟的,反正我是這樣做的,主從上都做了

mysql>use mysql;

mysql>update user set host = '%'  where user ='root';
select user,host from user,

mysql>select 'host','user' from user where user='root';

mysql>quit

然后就行了。
不過我估計是因為主庫沒創建mycat所登陸的用戶導致的

然后進行測試
master和slave的主從復制就不做了,本次只是看讀寫分離的效果

master
create databases aaa;
create table user(ID int(10),NAME int(10));
insert into user values('1','abc');
select * from aaa.user;
+------+------+
| ID   | NAME |
+------+------+
|    1 |    0 |
+------+------+
slave
create databases aaa;
create table user(ID int(10),NAME int(10));
insert into user values('2','2222');
select * from user;
+------+------+
| ID   | NAME |
+------+------+
|    2 | 2222 |
+------+------+
登錄進行讀寫分離測試
mysql -uroot -p123456 -P8066 -h192.168.100.27
select * from aaa.user;
+------+------+
| ID   | NAME |
+------+------+
|    2 | 2222 |
+------+------+
insert into aaa.user values('3','3333');
Query OK, 1 row affected (0.19 sec)
select * from aaa.user;
+------+------+
| ID   | NAME |
+------+------+
|    2 | 2222 |
+------+------+

但是查看Master

select * from aaa.user;
+------+------+
| ID   | NAME |
+------+------+
|    1 |    0 |
|    3 | 3333 |
+------+------+

完成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM