文章目錄
- 一、MySQL讀寫分離
- 1、概述
- 2、讀寫分離原理
- 3、讀寫分離存在的作用
- 4、常見MySQL讀寫分離分為兩種
- 二、搭建MySQL讀寫分離
- 1、安裝Java環境
- 2、amoeba安裝配置
- 2.1 創建新的目錄并解壓
- 2.2 賦予amoeba權限并開啟
- 3、配置Amoeba讀寫分離
- 3.1 開放權限
- 3.2 配置amoeba服務
- 三、測驗讀寫分離
- 1、客戶端測驗
- 1.1 快速安裝MySQL虛擬客戶端
- 2、測驗一:是否能通過amoeba登錄后端服務器進行SQL操作
- 3、測驗二:測驗mysql讀寫分離
- 4、測驗三:讀寫分離架構,對于“讀”的任務是怎么操作的測驗方式
一、MySQL讀寫分離
1、概述
- 在實際的生產環境中,如果對資料庫的讀和寫都在同一個資料庫服務器中操作,無論是安全性、高可用性還是高并發等各個方面都是完全不能滿足實際需求的
- 通過主從復制來同步資料,在通過讀寫分離來提升資料庫并發負載能力的方案來進行部署和實施
2、讀寫分離原理
- 讓主資料庫處理事務性增、刪、改,而從資料庫處理SELECT查詢操作
- 資料庫復制被用來把事務性操作導致的變更同步到集群中的從資料庫
3、讀寫分離存在的作用
- 因為資料庫的“寫”操作是比較耗時的
- 但是資料庫的“讀”(讀取10000條資料可能只需要5秒鐘)
- 所以讀寫分離解決的是資料庫的寫入,影響了查詢的效率
4、常見MySQL讀寫分離分為兩種
4.1 基于程式代碼內部實作
- 在代碼中根據select、insert進行路由分類,這類方法也是目前生產環境應用最廣泛的
- 優點是:性能好;因為在程式代碼中實作,不需要增加額外的設備為硬體開支;
- 缺點是:需要開發人員來實作
- 并不是所有的應用都是適合程式代碼中實作讀寫分離,想一些大型復雜的Java應用,如果在程式代碼中實作讀寫分離對代碼改動較大
4.2 基于中間代理層實作
- 代理一般位于客戶端和服務器之間,代理服務器接到客戶端請求后通過判斷后轉發到后端資料庫,
- 有一下代表程式:
①MySQL-Proxy:為MySQL開源專案,通過其自帶的lua腳本進行SQL判斷
②Atlas:是有奇虎360的Web平臺部基礎架構團隊開發維護的一個基于MySQL協議的資料中間層專案;
是在mysql-proxy 0.8.2版本的基礎上,對其進行了優化,增加了一些新的功能特性
360內部使用Atlas運行的mysql業務,每天承載的讀寫請求數達幾十億條,支持事務以及存盤程序
③Amoeba:由陳思儒開發,該程式由Java語言進行開發,阿里巴巴將其用于生產環境,但是不支持事務和存盤程序
Amoeba是一個非常容易使用,可移植性非常強的軟體,因此在生產環境中被廣泛用于資料庫的代理層
二、搭建MySQL讀寫分離
1、安裝Java環境
1.1 首選將源檔案拉入/opt目錄下
[root@amoeba local]# cp jdk-6u14-linux-x64.bin /usr/local/ #將可執行檔案復制到/usr/local目錄下
[root@amoeba local]# chmod +x jdk-6u14-linux-x64.bin #賦予權限
[root@amoeba local]# ./jdk-6u14-linux-x64.bin 執行該檔案

1.2 進入/etc/profile組態檔,添加組態檔

末行加入


2、amoeba安裝配置
2.1 創建新的目錄并解壓

2.2 賦予amoeba權限并開啟

3、配置Amoeba讀寫分離
3.1 開放權限



3.2 配置amoeba服務

進入 amoeba.xml組態檔


進入dbServers.xml修改資料庫組態檔,并重新開啟amoeba




三、測驗讀寫分離
1、客戶端測驗
1.1 快速安裝MySQL虛擬客戶端


2、測驗一:是否能通過amoeba登錄后端服務器進行SQL操作
2.1 首先在虛擬客戶端上進行mysql資料庫配置

2.2 進入master主服務器上查看更新

2.3 在slave從服務器上查看更新

3、測驗二:測驗mysql讀寫分離
3.1 關閉2臺從服務器stop slave;查看slave是否能獲取更新的資料


此時在客戶端插入新的內容



4、測驗三:讀寫分離架構,對于“讀”的任務是怎么操作的測驗方式
4.1 分別在slave1和slave2 school資料庫中插入不同的資料,查看兩個從服務器中在stop狀態下能否相互更新




4.2 分別在slave1和slave2 school資料庫中插入不同的資料,然后再使用客戶端進行select查詢



轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/289572.html
標籤:java
