4.1實戰案例——構建讀寫分離的資料庫集群
使用Mycat作為資料庫中間件服務構建讀寫分離的資料庫集群
使用一臺虛擬機部署Mycat資料庫中間件服務,將用戶提交的讀寫操作識別分發給相應的資料庫
節點,這樣將用戶的訪問操作、資料庫的讀與寫操作分給3臺主機,只有資料庫集群的主節點接
收增、刪、改SQL陳述句,從節點接收查詢陳述句,分擔了主節點的查詢壓力
基礎準備
使用CentOS 7.2系統,創建3臺虛擬機進行實驗,
其中2臺虛擬機db1和db2部署MariaDB資料庫服務,搭建主從資料庫集群;一臺作為主節點,負
責寫入資料庫資訊;另一臺作為從節點,負責讀取資料庫資訊,
基礎環境配置
修改主機名
# hostnamectl set-hostname mycat
# hostnamectl set-hostname db1
# hostnamectl set-hostname db2
修改完之后使命令生效
# bash
編輯hosts檔案(mycat,db1,db2)
# vi /etc/hosts

安裝JDK環境(mycat)
安裝java環境
# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
查看java版本
# java -version

部署MariaDB主從資料庫集群服務
安裝MariaDB服務(db1和db2)
# yum install -y mariadb mariadb-server
啟動服務并設定開機自啟
# systemctl start mariadb
# systemctl enable mariadb
初始化MariaDB資料庫(db1和db2)
初始化MariaDB資料庫,并設定MariaDB資料庫root訪問用戶的密碼為123456
# mysql_secure_installation
還沒有設定根密碼,直接回車

設定根密碼,yes

洗掉匿名用戶,yes

不允許遠程登陸,no

洗掉測驗資料庫并訪問它,yes

現在重新加載特權表,yes

配置資料庫集群主節點(db1)
編輯組態檔
# vi /etc/my.cnf

log_bin = mysql-bin 記錄操作日志
binlog_ignore_db = mysql 不同步MySQL系統資料庫
server_id = 12 資料庫集群中的每個節點ip都要不同,一般使用ip最后段的數字
編輯完成后重啟服務
# systemctl restart mariadb
關閉防火墻
# systemctl stop firewalld
開放資料庫權限(db1)
登錄資料庫
# mysql -uroot -p123456
授權在任何客戶端機器上可以以root用戶登錄到資料庫
> grant all privileges on *.* to root@'%' identified by "123456";
創建一個用戶,并賦予從節點同步主節點資料庫的權限
> grant replication slave on *.* to 'user'@'db2' identified by '123456';
配置同步(db2)
登錄資料庫
# mysql -uroot -p123456
配置連接資訊
> change master to master_host='db1',master_user='user',master_password='123456';
開啟從服務
> start slave;
查看從服務狀態
> show slave status\G;

驗證主從資料庫的同步功能
創建庫表資料(db1)
創建庫test
> create database test;
在庫test中創建表company
> use test
> create table company(id int not null primary key,name varchar(50),addr varchar(255));
插入表資料
> insert into company values(1,"facebook","usa");
查看表資料
> select * from company;

查詢是否同步(db2)
查詢資料庫
> show databases;

查詢表company
> select * from test.company;

部署mycat讀寫分離中間件服務
安裝mycat服務(mycat)
將軟體包上傳到mycat的/root目錄下,將軟體包解壓
# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
賦予權限
# chown -R 777 /usr/local/mycat/
添加系統變數,并生效變數
# echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile
# source /etc/profile
編輯邏輯庫組態檔(mycat)
在檔案中定義一個邏輯庫
# vi /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="USERDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema>
<dataNode name="dn1" dataHost="localhost1" database="test" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" dbType="mysql" dbDriver="native" writeType="0" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="172.16.51.18:3306" user="root" password="123456">
<readHost host="hostS1" url="172.16.51.30:3306" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
保存并退出
注釋:
sqlMaxLimit 配置默認查詢數量
database 為真實資料庫名
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="0" 所有寫操作發送到配置的第一個writeHost,第一個掛了需要切換到還生存的第二個writeHost,重新啟動后已切換后的為準,切換記錄在組態檔dnindex.properties中
writeType="1" 所有寫操作都隨機的發送到配置的writeHost
修改組態檔權限(mycat)
修改schema.xml的用戶權限
# chown root:root /usr/local/mycat/conf/schema.xml
編輯訪問用戶(mycat)
修改root用戶的訪問密碼與資料庫
# vi /usr/local/mycat/conf/server.xml
修改內容

洗掉內容
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
保存并退出
啟動服務(mycat)
啟動資料庫中間件服務
# /bin/bash /usr/local/mycat/bin/mycat start
查看虛擬機埠開放情況(8066和9066)
# netstat -ntpl
驗證資料庫集群服務讀寫分離功能
查詢資料庫資訊(mycat)
安裝服務
# yum install -y mariadb mariadb-client
登錄資料庫
# mysql -h127.0.0.1 -P8066 -uroot -p123456
查看邏輯庫
> show databases;

> use USERDB
> show tables;

查看表company
> select * from company;

添加表資料(mycat)
在表中添加一條資料
> insert into company values(2,"bastetball","usa");

查看表資訊
> select * from company;

驗證讀寫操作分離(mycat)
查詢對資料庫讀寫操作的分離資訊
# mysql -h127.0.0.1 -P9066 -uroot -p123456 -e 'show @@datasource;'

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/136593.html
標籤:Linux
上一篇:ubuntu安裝redis
