MySQL ---- 讀寫分離
一:原理
-
讀寫分離就是隻在主服務器上寫,只在從服務器上讀
-
主數據庫處理事務性查詢,而 從數據庫處理select查詢
-
數據庫複製被用來把事務性查詢導致的變更同步到集羣中的從數據庫
二:Amoeba的定義
- Amoeba是一個以MySQL爲底層數據存儲,並對應用提供MySQL協議接口的proxy。它集中地響應應用的請求,依據用戶事先設置的規則,將SQL請求發送到特定的數據庫上執行。基於此可以實現負載均衡、讀寫分離、高可用性等需求。
- Amoeba相當於一個SQL請求的路由器,目的是爲負載均衡、讀寫分離、高可用性提供機制,而不是完全實現它們。需要結合使用MySQL的 Replication等機制來實現副本同步等功能。
安裝包自行下載 :
複製這段內容後打開百度網盤手機App,操作更方便哦 鏈接:https://pan.baidu.com/s/1kRkbem91iPxeQ-bZUObTxg 提取碼:bg88
三:實驗配置
1、環境說明
-
準備三臺Mysql服務器 (一臺主服務器 ,一臺從服務器)
-
一臺Amoeba ,用來實現讀寫分離
-
一臺客戶機作爲驗證
Mysql 主從複製與讀寫功能是密切相關的,通過主從複製來實現數據同步,再通過讀寫分離來提升數據庫的併發負載能力。
2、實驗步驟
- 配置Amoeba 服務器
[root@localhost ~]# hostnamectl set-hostname amoeba
[root@localhost ~]# su '修改主機名'
[root@amoeba ~]# systemctl stop firewalld.service
[root@amoeba ~]# setenforce 0 ‘關閉防火牆’
[root@amoeba ~]# mkdir /abc
[root@amoeba ~]# mount.cifs //192.168.10.24/share /abc ‘掛載軟件包’
- 安裝管理jdk
[root@amoeba abc]# cp jdk-6u14-linux-x64.bin /usr/local/ ‘複製jdk-6u...到/usr/local下’
[root@amoeba abc]# cd /usr/local/ ‘查看是否複製到’
[root@amoeba local]# ./jdk-6u14-linux-x64.bin ‘執行jdk’
yes 輸入之後,等待片刻,安裝完成就可以了。
- 爲了便於管理,將jdk包名重新命名
[root@amoeba local]# mv jdk1.6.0_14/ /usr/local/jdk1.6
- 修改profile 文件
[root@amoeba local]# 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
- 使環境變量生效
[root@amoeba local]# source /etc/profile
- 創建amoeba 目錄
[root@amoeba local]# mkdir /usr/local/amoeba
- 解壓amoeba 軟件包
[root@amoeba abc]# tar zvxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
- 給權限, 驗證是否安裝成功
[root@amoeba abc]# chmod -R 755 /usr/local/amoeba/
[root@amoeba abc]# /usr/local/amoeba/bin/amoeba
amoeba start|stop ‘表示安裝成功’
- 在三臺裝有mysql 服務器上添加權限,允許amoeba訪問
mysql> grant all on *.* to test@'192.168.34.%' identified by '123';
- 在amoeba服務器上配置讀寫分離功能
[root@amoeba abc]# cd /usr/local/amoeba/conf
[root@amoeba conf]# vim amoeba.xml
[root@amoeba conf]# vim dbServers.xml
- 啓動amoeba ,將進程放到後臺,時間較長 需等待
[root@amoeba conf]# /usr/local/amoeba/bin/amoeba start &
四:在客戶端(client)測試
1、修改主機名 ,關閉防火牆
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname client
[root@localhost ~]# su
2、直接安裝mysql服務
[root@client ~]# yum install mysql -y
3、連接amoeba服務器
[root@client ~]# mysql -u amoeba -p123 -h 192.168.34.182 -P8066
4、在主、從服務器上查看,可以看到info 表
5、關閉兩臺從服務器,查看狀態,是兩個 NO
6、關閉服務之後,在客戶機的info表中插入一條信息,可以在主服務器中查看到
7、在從服務器和客戶端查看不到表信息, 從而實現了讀寫分離
8、在兩臺從服務中各添加一條數據
9、在客戶端查看info 表內容,挨個讀取表中信息
在客戶端連接數據庫後寫入的數據只有主服務器記錄,從服務器並不會記錄。開啓主從同步(複製)的情況下,從服務器會向主服務器同步。 (由於做了主從同步,每臺從服務器的數據和主服務器是一樣的)。在高併發請求時,實現了負載均衡,保證數據的安全性,服務器的高效運行。