天天看點

建構讀寫分離資料庫

基礎環境

關閉防火牆selinux

systemctl stop firewalld

setenforce 0

(1)修改主機名

# hostnamectl set-hostname db1

# hostnamectl set-hostname db2

# hostnamectl set-hostname mycat

(2)修改主機映射檔案

[root@db1 ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.200.33 db1

192.168.200.44 db2

192.168.200.55 mycat

(3)配置yum源

[root@db1 ~]# cat /etc/yum.repos.d/local.repo

[mariadb]

name=mariadb

baseurl=file:///opt/gpmall-repo

gpgcheck=0

enabled=1

[centos]

name=centos

baseurl=file:///opt/centos

mycat節點

1.安裝java環境

# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y

2.關閉防火牆

iptables -F

iptables -X

iptables -Z

iptables-save

db1和db2節點安裝mariadb服務

# yum install mariadb mariadb-server -y

# systemctl start mariadb && systemctl enable mariadb

初始化mariadb資料庫并設定密碼123456

# mysql_secure_installation

配置主節點db1虛拟機的資料庫配置檔案my.cnf

# vi /etc/my.cnf

[mysqld]

log_bin = mysql-bin #記錄記錄檔

binlog_ignore_db = mysql #不同步 MySQL 系統資料庫

server_id = 18 #資料庫叢集中的每個節點 id 都要不同,一

般使用 IP 位址的最後段的數字,例如 172.16.51.18,server_id 就寫 18

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mariadb/mariadb.log

pid-file=/var/run/mariadb/mariadb.pid

重新開機服務

systemctl restart mariadb

開放主節點db1的資料庫權限

在主節點 db1 虛拟機上使用 mysql 指令登入 MariaDB 資料庫,授權在任何用戶端機器上

可以以 root 使用者登入到資料庫。

# mysql -uroot -p123456

grant all privileges on *.* to root@'%' identified by "123456";

在主節點 db1 資料庫上建立一個 user 使用者讓從節點 db2 連接配接,并賦予從節點同步主節點

資料庫的權限,指令如下:

grant replication slave on *.* to 'user'@'db2' identified by '123456';

配置從節點db2同步主節點db1

change master to

master_host='db1',master_user='user',master_password='123456';

配置完畢主從資料庫之間的連接配接資訊之後,開啟從節點服務。使用 show slave status\G; 命 令并檢視從節點服務狀态,如果 Slave_IO_Running 和 Slave_SQL_Running 的狀态都為 YES,從節點服務開啟成功。

start slave;

show slave status\G;

驗證主從資料庫的同步功能

db1的資料庫

create database test;

use test

 create table company(id int not null primary key,name varchar(50),addr

varchar(255));

insert into company values(1,"facebook","usa");

db2資料庫驗證

show databases;

select * from test.company;

mycat節點讀寫分離中間件

安裝 Mycat 服務

# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C

/usr/local/

賦予目錄權限

# chown -R 777 /usr/local/mycat/

在/etc/profile 系統變量檔案中添加 Mycat 服務的系統變量,并生效變量。

# echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile

# source /etc/profile

[root@mycat ~]# cat /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>

[root@mycat ~]# chown root:root /usr/local/mycat/conf/schema.xml

**編輯 mycat 的通路使用者 修改/usr/local/mycat/conf/目錄下的 server.xml 檔案,修改 root 使用者的通路密碼與資料庫, 密碼設定為 123456,通路 Mycat 的邏輯庫為 USERDB,指令如下:

[root@mycat ~]# cat /usr/local/mycat/conf/server.xml

在配置檔案的最後部分,

<user name="root">

<property name="password">123456</property>

<property name="schemas">USERDB</property>

删除如下:

<user name="user">

<property name="password">user</property>

<property name="schemas">TESTDB</property>

<property name="readOnly">true</property>

</user>

啟動mycat服務

[root@mycat ~]# /bin/bash /usr/local/mycat/bin/mycat star

netstat -ntlp

驗證資料庫叢集服務讀寫分離功能 (1)用 Mycat 服務查詢資料庫資訊 先在 Mycat 虛拟機上使用 Yum 安裝 mariadb-client 服務。

[root@mycat ~]# yum install -y MariaDB-client

在 Mycat 虛拟機上使用 mysql 指令檢視 Mycat 服務的邏輯庫 USERDB,因為 Mycat 的邏 輯庫 USERDB 對應資料庫 test(在部署主從資料庫時已安裝),是以可以檢視庫中已經建立的 表 company。指令如下。

[root@mycat ~]# mysql -h127.0.0.1 -P8066 -uroot -p123456

use USERDB

show tables;

insert into company values(2,"bastetball","usa");

select * from company;

驗證 Mycat 服務對資料庫讀寫操作分離

[root@mycat ~]# mysql -h127.0.0.1 -P9066 -uroot -p123456 -e 'show @@datasource;'