日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

java读取mysql配置文件_Linux运维:MySQL读写分离解决方案

發布時間:2025/3/12 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java读取mysql配置文件_Linux运维:MySQL读写分离解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一次性付費進群,長期免費索取教程,沒有付費教程。

進微信群回復公眾號:微信群;QQ群:460500587

?教程列表?見微信公眾號底部菜單 |??本文底部有推薦書籍?

微信公眾號:計算機與網絡安全

ID:Computer-network

在MMM集群架構中,通過提供虛擬的讀、寫IP地址,將數據庫的讀寫功能分離出來,但是這僅僅設定了讀、寫的VIP地址,并沒有真正實現業務系統中所說的讀、寫分離功能,因為應用程序不可能在需要讀的時候就去找可讀的VIP,在寫的時候就去找可寫的VIP,要解決這個問題,可由兩種方法來實現。

第一種實現讀、寫分離的方式是通過修改程序,將讀、寫操作提取出來,并分別在程序的連接池中設定可讀、可寫的VIP地址,這種方法要修改業務系統的程序,實現起來相對比較困難,如果是新開發的程序,可以在開發時就預留這樣的接口,而如果程序已經在運行,修改的難度是相當大的,采用這種方法基本行不通。

第二種實現讀、寫分離的方法是通過一個數據庫透明代理,也就是在業務系統和數據庫之間提供一個代理接口,由這個接口來完成業務系統讀、寫請求的分發,將讀操作分發到后端只讀的數據庫服務器上,而將寫請求分發到后端可寫的數據庫服務器上。常見的讀、寫分離軟件有Amoeba和MySQL-Proxy。

MySQL-Proxy是MySQL官方推出的一個處在業務系統和MySQL數據庫之間的程序,這個代理可以用來分析、監控和變換通信數據,但是MySQL官方建議不要將MySQL-Proxy用于生產環境。事實上,MySQL-Proxy確實很不穩定,它的讀、寫分離功能都是通過一個lua腳本來實現的,而這個腳本bug很多,所以不建議通過MySQL-Proxy來實現讀、寫分離功能,不過可以作為線下測試使用。

Amoeba是一個開源項目,致力于MySQL的分布式數據庫前端代理層,它主要在應用層訪問MySQL的時候充當SQL路由器功能,具有負載均衡、高可用性、SQL過濾、讀寫分離等功能,通過Amoeba可以實現數據源的高可用、負載均衡、數據切片等功能。本文介紹Amoeba作為MySQL讀、寫分離代理接口的實現過程。

1、通過Amoeba實現MySQL讀寫分離

(1)MMM整合Amoeba應用架構

在實際的應用環境中,Amoeba可與簡單的MySQL主從復制架構進行整合,實現讀與寫的分離操作。但是這樣存在安全性問題,例如MySQL的Master節點出現故障或者任何一個Slave節點故障,那么Amoeba并不能自動屏蔽這些故障的MySQL節點,可能會導致前端應用程序無法讀取數據庫的情況。為了解決這個問題,Amoeba經常與MMM集群架構一起使用,這樣如果任意MySQL節點故障,MMM集群就能自動屏蔽故障節點,從而保證Amoeba一直能夠連接到正常的MySQL節點。這里要介紹的Amoeba應用環境就是在MMM集群的基礎上構建的,整個架構如圖1所示。

圖1? MMM整合Amoeba應用架構

此架構其實就是在MMM集群架構的基礎上增加了Amoeba Server服務器,這樣前端所有應用程序的請求都將提交到Amoeba Server上,然后Amoeba Server根據自身的讀、寫配置參數將讀請求分配到可讀的每個MySQL節點,而將寫請求分配到可寫的MySQL節點上。這個架構由于在底層使用了MMM集群,因此,Amoeba Server不用擔心會將請求分配到一個故障的MySQL節點,因為MMM集群會自動轉移故障節點到健康節點上。

(2)Amoeba的安裝

這里下載的是amoeba-mysql-3.0.5-RC-distribution.zip。Amoeba的安裝非常簡單,直接解壓即可使用,這里將Amoeba解壓到/usr/local/amoeba目錄下,這樣就完成安裝了。

Amoeba框架是基于Java SE1.5開發的,因此,還需要安裝Java環境,建議使用Java SE1.5以上的JDK版本,這里使用的JDK版本為jdk1.6.0_25。將JDK安裝到/usr/local/目錄下,然后設置Java環境變量,信息如下:

export JAVA_HOME= /usrk/local/jdk1.6.0_25?

export? CLASSPATH=.:$JAVA_HOME/jre/lib//rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar?

export?PATH=$JAVA_HOME/bin:$PATH

將這些內容添加到系統的/etc/profile文件中即可完成Java環境的設置。

(3)配置Amoeba

Amoeba的配置文件在本環境下位于/usr/local/amoeba/conf目錄。配置文件比較多,但是僅僅使用讀、寫分離功能,只需配置二個文件即可,分別是dbServers.xml和amoeba.xml,如果需要配置IP訪問控制,還需要修改access_list.conf文件。下面首先介紹dbServers.xml文件的配置,內容如下:

${defaultManager}64128

3306 #設置Amoeba要連接的mysql數據庫的端口,默認是3306

testzhu #缺省數據庫,當連接amoeba時,操作表必須顯式的指定數據庫名,即采用dbname.tablename的方式,不支持 use dbname指定缺省庫,因為操作會調度到各個后端dbserver

test1 #設置amoeba連接后端數據庫服務器的賬號和密碼,因此需要在所有后端數據庫上創建該用戶,并授權amoeba服務器可連接

111111 #連接密碼

500 #最大連接數,默認500500 #最大空閑連接數1 #最新空閑連接數600000600000truetruetrue

#設置一個后端可寫的dbServer,這里定義為writedb,這個名字可以任意命名,后面還會用到

192.168.1.129 #設置后端可寫dbserver

#設置后端可讀dbserver

192.168.1.118 #后端可讀dbserver的IP

……

這樣Amoeba就配置完成了。

(4)設置Amoeba登錄數據庫權限

這里假定Amoeba服務器的IP地址為192.168.88.35,在MMM集群的所有MySQL節點上執行如下操作,為Amoeba訪問MMM集群中所有MySQL數據庫節點授權:

mysql>GRANT ALL ON repldb.* TO 'ixdba'@'192.168.88.35' IDENTIFIED BY 'xxxxxx';

mysql>flush privileges;

(5)啟動Amoeba

在Amoeba服務器上執行如下命令,啟動Amoeba:

[root@amoebaserver bin]# /usr/local/amoeba/bin/launcher

2019-10-24 18:46:37 [INFO] Project Name=Amoeba-MySQL, PID=22474, starting...

log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml

2019-10-24 18:50:21,668 INFO context.MysqlRuntimeContext - Amoeba for Mysq ?current versoin=5.1.45-mysql-amoeba-proxy-3.0.4-BETA

log4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf

2019-10-24 18:50:22,852 INFO net.ServerableConnectionManager - Server listening on 0.0.0.0/0.0.0.0:8066.

[root@cloud0 bin]# netstat -unlpt | grep java
tcp 0 0 :::8066 :::*?LISTEN 22474/java

由此可知Amoeba啟動正常。

(6)測試Amoeba實現讀、寫分離和負載均衡

要測試Amoeba實現讀、寫分離和負載均衡功能,需要在MMM集群的所有MySQL節點開啟MySQL的查詢日志。查詢日志可以記錄數據庫中建立的客戶端連接和執行的語句。開啟方法很簡單,在MySQL配置文件/etc/my.cnf中添加如下內容:

log=/var/log/mysql_query_log

當然,mysql_query_log文件要事先存在,并且對MySQL用戶可寫。

為了測試方便,這里在每個MySQL節點的test庫中創建一張表,表的名字為mmm_test,例如在Master1節點,創建表的過程如下:

mysql>use test;

mysql>create table mmm_test(id int,email varchar(60));

mysql>insert into?mmm_test(id,email) values(100,'this is 192.168.88.20');

上面的操作是在mmm_test表的email字段中插入一條記錄“this is 192.168.88.20”,而字符串“this is 192.168.88.20”就是個IP標識,這樣做的目的是區分多個MySQL節點不同IP地址的情況。接著在Master2節點同樣執行上面的SQL操作,所不同的是mmm_test表email字段的內容修改為“this is 192.168.88.21”。依此類推,分別在Slave1和Slave2節點執行相同的操作。

接著,在遠程MySQL客戶端通過Amoeba配置文件中指定的用戶名、密碼、端口以及Amoeba服務器的IP地址連接MySQL數據庫,操作過程如圖2所示。

圖2? 測試Amoeba實現讀操作的負載均衡功能

從圖2可以看出,客戶端連接到的Server version為5.1.45-mysql-amoeba-proxy-3.0.4-BETA,可見客戶端連接的是Amoeba實例而不是MySQL實例,而從下面的查詢test庫中mmm_test表的內容來看,Amoeba依次將4次select請求均衡地分配到MMM集群中4個可讀MySQL節點上,由此可知,Amoeba實現了讀操作的負載均衡。

下面繼續進行SQL測試,創建兩個表mmm_test1和mmm_test2,操作過程如下:

mysql>create table mmm_test1(id int,email varchar(60));

Query OK,0 rows affected(0.04 sec)

mysql>create table mmm_test2(id int,email varchar(60));

Query OK,0 rows affected(0.04 sec)

mysql>insert into mmm_test1(id,email) values(101,'mmm_test1@126.com');

Query OK,1 rows affected(0.02 sec)

mysql>drop table mmm_test2;

Query OK,0 rows affected(0.10 sec)

為了確定創建的兩個表是否已經正常同步到MMM集群的其他節點,可分別登錄每個MySQL節點進行查詢,接著還要確定MySQL的寫操作是否分配到可寫的節點Master1,可通過查看每個MySQL節點的查詢日志。Master1節點的MySQL查詢日志信息如圖3所示。

圖3? Master1節點MySQL查詢日志

Master2節點的MySQL查詢日志信息如圖4所示。

圖4? Master2節點MySQL查詢日志

其他節點的信息基本類似,這里不一一列出。從MySQL的查詢日志中可以進一步驗證Amoeba實現了讀負載均衡,而寫操作在Master1節點執行了。雖然Master2節點也有相關寫操作的日志,但這是MySQL的復制線程執行的寫操作,因為除了Master1,其他MySQL節點都是read_only狀態,是無法執行寫操作的。

2、通過Keepalived構建高可用的Amoeba服務

在上面介紹的MMM整合Amoeba應用方案中,雖然通過Amoeba實現了MySQL的讀、寫分離,但是這個架構并不完美,因為還存在Amoeba服務器單點故障,也就是說當Amoeba出現故障后,業務系統將無法訪問MySQL服務。要解決這個問題其實非常簡單,通過Keepalived給Amoeba做高可用即可,通過Keepalived實現Amoeba高可用并實現MySQL集群讀、寫分離的架構如圖5所示。

圖5? 通過Keepalived實現Amoeba高可用并實現MySQL集群讀、寫分離架構

微信公眾號:計算機與網絡安全

ID:Computer-network

【推薦書籍】

總結

以上是生活随笔為你收集整理的java读取mysql配置文件_Linux运维:MySQL读写分离解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。