MYSQL 之 讀寫分離

一、讀寫分離的概述

  • 讀寫分離是高性能數據庫集羣的一種方式,其本質是將訪問壓力分散到集羣中的多個節點,但是沒有分散存儲壓力。
  • 業務服務器將寫操作發給數據庫主機,將讀操作發給數據庫從機通過主從複製的方式來同步數據,再通過讀寫分離來提升數據庫的併發負載能力。
    在這裏插入圖片描述

1.1、讀寫分離的基本原理

  • 數據庫服務器搭建主從集羣,一主一從、一主多從都可以。

  • 數據庫主機負責讀寫操作,從機只負責讀操作。

  • 數據庫主機通過複製將數據同步到從機,每臺數據庫服務器都存儲了所有的業務數據。

二、怎麼實現讀寫分離?

2.1、環境準備和安裝包

注意:配置過程需要的安裝包,需要的可以去我的百度雲下載,我的 Mysql手工編譯版本是 5.7。
百度雲鏈接爲:https://pan.baidu.com/s/1DZIVX46wKWoW1ak-IGkzKA
提取碼:fohm

  • 讀寫分離是在主從複製的基礎上進行配置的,所以先搭建主從複製再搭建讀寫分離。

  • 準備五臺centos7虛擬機,其中三臺搭建 Mysql服務器(一臺爲主服務器,其餘兩臺爲從服務器)

  • Mysql配置可參考我的之前博客,LNMP架構中Mysql的安裝。博客鏈接爲:MySQL版本5.7的安裝

  • 一臺虛擬機用來做 Amoeba,實現讀寫分離。

  • 一臺做應用客戶端,進行操作驗證。

  • 我的服務器IP地址:

主服務器master 192.168.220.136
從服務器slave1 192.168.220.164
從服務器slave2 192.168.220.159
Amoeba服務器 192.168.220.130
客戶端 192.168.220.171

主從複製的具體操作我在這裏就不多介紹,可以看我上篇博客,鏈接爲:Mysql 之主從複製

在上篇博客中我用一臺主服務器和一臺從服務器,這裏再加一臺從服務器,從服務器的配置沒有改變,只有server-id需要改爲23,只要與之前的id不同。
在這裏插入圖片描述

2.2、實驗操作

2.2.1、Amoeba的配置

1、關閉防火牆,掛載本地共享文件夾,把 jdk 安裝包放在 /usr/local目錄下

systemctl stop firewalld  
setenforce 0

//用samba共享本地文件夾
mount.cifs //192.168.10.34/share /mnt
cd /mnt/mysql/
cp jdk-6u14-linux-x64.bin /usr/local/

在這裏插入圖片描述
2、安裝 jdk 包

//.bin是二進制文件,可直接執行
cd /usr/local/
./jdk-6u14-linux-x64.bin 
一直空格出現圖中問句時,輸入yes 按enter即可

在這裏插入圖片描述
爲了方便管理,重命名 jdk。

cd /usr/local/
mv jdk1.6.0_14/ jdk1.6

在這裏插入圖片描述
3、修改 profile 文件,配置環境變量

vim /etc/profile
//在最後一行插入下面代碼
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile   //加載生效

4、先創建一個文件,存放解壓內容,解壓 amoeba包。

mkdir /usr/local/amoeba

cd /mnt/mysql
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

在這裏插入圖片描述
給Amoeba加755權限,並驗證安裝是否成功。

chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba

在這裏插入圖片描述

2.2.2、Mysql服務器

在三臺 mysql 服務器上添加權限,開放給 Amoeba 訪問
登錄數據庫

mysql -uroot -pabc123
grant all on *.* to test@'192.168.220.%' identified by '123.com';
允許test用戶通過ip爲192.168.220網段,從任意終端輸入123.com的密碼進行訪問

在這裏插入圖片描述

2.2.3、讀寫分離實現配置

回到Amoeba服務器,配置讀寫分離功能。

1、修改amoeba.xml文件

cd /usr/local/amoeba/conf
vim amoeba.xml
//1、修改30行和32行
30 <property name="user">amoeba</property>
32 <property name="password">123123</property>

//2、117行--去掉註釋
(<!-- -->爲註釋符號)
<property name="defaultPool">master</ property>
<property name="writePool">master</ property>
<property name="readPool">slaves</ property>

在這裏插入圖片描述
在這裏插入圖片描述
2、修改配置文件夾下的dbServers.xml文件

vim dbServers.xml

//26-29行:去掉註釋,設置登錄用戶名和密碼
<property name="schema">mysql</property>  
<property name="user">test</property>
<property name="password">123.com</property>

在這裏插入圖片描述

//45行--主服務器地址
<dbServer name="master"  parent="abstractServer">
<property name="ipAddress">192.168.220.136</property>

//從服務器slave1,修改好名稱和對應IP地址
<dbServer name="slave1"  parent="abstractServer">
<property name="ipAddress">192.168.220.164</property>

//從服務器slave2,修改好名稱和對應IP地址。
配置文件只有兩個模塊,可以yy複製粘貼修改。
<dbServer name="slave2"  parent="abstractServer">
     <factoryConfig>
     <property name="ipAddress">192.168.220.159</property>
     </factoryConfig>
</dbServer>

//指定從服務器池
<dbServer name="slaves" virtual="true">
<property name="poolNames">slave1,slave2</property>

在這裏插入圖片描述
在這裏插入圖片描述
啓動Amoeba監控

/usr/local/amoeba/bin/amoeba start & 

在這裏插入圖片描述

2.3、客戶端驗證

1、yum安裝數據庫

yum install -y mysql

2、連接 amoeba 服務器

mysql -u amoeba -p 123123 -h 192.168.220.130 -P8066

創建一個名爲 test02 的庫,再創建一個叫 demo01 的表

MySQL [test02]> create table demo01 (
    -> id int(4) not null primary key,      
    -> name varchar(10) not null,           
    -> score decimal(4,1) not null);        
Query OK, 0 rows affected (0.03 sec)

在這裏插入圖片描述
我們在主服務器上,直接進入數據庫,就會發現也多了一個名爲 stu01 的表
在這裏插入圖片描述

三、總結

  • 讀寫分離擴展了讀操作,提高了併發吞吐量和負載能力。
  • 對數據庫進行寫的操作時,全部由主服務器承擔,用來避免數據的不同步。
  • 進行讀操作時,由從服務器slave來承擔,用來分擔數據庫的壓力。
發佈了72 篇原創文章 · 獲贊 32 · 訪問量 4935
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章