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

歡迎訪問 生活随笔!

生活随笔

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

数据库

amoeba mysql proxy_mysql-proxy和amoeba 分别实现Mariadb读写分离

發布時間:2023/12/18 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 amoeba mysql proxy_mysql-proxy和amoeba 分别实现Mariadb读写分离 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內容概覽:

1、mysql-proxy實現Mariadb讀寫分離

1、1 拓撲圖和環境介紹

1、2 mysql-proxy安裝

1、3 設置mysql-proxy

1、4 主節點添加mysql-proxy可訪問用戶

1、5 讀寫分離驗證

2、amoeba

2、1 amoeba工作原理圖

2、2 環境拓撲

2、3 配置JAVA環境

2、4 安裝配置amoeba

2、5 抓包驗證讀寫分離

1、Mysql-proxy實現Mariadb讀寫分離

MySQL Proxy就是這么一個中間層代理,簡單的說,MySQL Proxy就是一個連接池,負責將前臺應用的連接請求轉發給后臺的數據庫,并且通過使用lua腳本,可以實現復雜的連接控制和過濾,從而實現讀寫分離和負載平衡。對于應用來說,MySQL Proxy是完全透明的,應用則只需要連接到MySQL Proxy的監聽端口即可。當然,這樣proxy機器可能成為單點失效,但完全可以使用多個proxy機器做為冗余,在應用服務器的連接池配置中配置到多個proxy的連接參數即可。

MySQL Proxy更強大的一項功能是實現“讀寫分離”,基本原理是讓主數據庫處理事務性查詢,讓從庫處理SELECT查詢。數據庫復制被用來把事務性查詢導致的變更同步到集群中的從庫。

-——百度百科

Mysql-proxy官方地址:dev.mysql.com/downloads/mysql-proxy/

1、1 拓撲圖和環境介紹

主機名IP地址系統環境功能說明

Mysql-proxy172.16.4.100Centos6.6 64位接收用戶對后端數據庫的讀寫操作,并且將讀寫操作分別發往后端不同主機

Master172.16.4.136Mysql主庫,可以接收讀請求或者寫請求

Slave172.16.4.10Mysql從庫,只能接收讀請求,如果想寫入數據,需要從主庫復制

說明:Master和Slave的主從復制環境已經在實驗前配置完成,這里不提供配置。

1、2? mysql-proxy安裝:

在epel的yum源中提供了mysql-proxy的rpm包,直接配置epel的yum源使用yum安裝即可。[root@mysql-proxy?~]#?yum?install?mysql-proxy

但是rpm包安裝的mysql-proxy不知道什么原因沒有讀寫分離腳本(rw-splitting.lua),所以需要解壓源碼包復制一個讀寫分離腳本到/usr/lib64/mysql-proxy目錄下。[root@mysql-proxy?~]#?tar?xfmysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

[root@mysql-proxy?~]#?cdmysql-proxy-0.8.5-linux-el6-x86-64bit/share/doc/mysql-proxy/

[root@mysql-proxy?mysql-proxy]#?cp?rw-splitting.lua/usr/lib64/mysql-proxy/lua/

安裝后生成的文件[root@mysql-proxy?~]#?rpm?-ql?mysql-proxy

/etc/mysql-proxy.cnf?????????#mysql-proxy的配置文件

/etc/rc.d/init.d/mysql-proxy?#mysql-proxy啟動腳本

/usr/bin/mysql-proxy?????????#mysql-proxy的主程序

1、3 設置mysql-proxy

修改mysql-proxy配置文件,指明后端讀寫服務器,mysql-proxy的連接及管理相關配置即可[root@mysql-proxy?~]#?vim?/etc/mysql-proxy.cnf

[mysql-proxy]

daemon?=?true

pid-file?=?/var/run/mysql-proxy.pid

log-file?=?/var/log/mysql-proxy.log

log-level?=?debug

max-open-files?=?1024

plugins?=?admin,proxy

user?=?mysql-proxy

#

#Proxy?Configuration

proxy-address?=?0.0.0.0:3306??????????????????????????????#代理服務器監聽地址和端口

proxy-backend-addresses?=?172.16.4.136:3306???????????????#支持讀寫操作的后端

proxy-read-only-backend-addresses?=172.16.4.10:3306???????#只讀后端服務器,如果有多個節點使用逗號隔開

proxy-lua-script?=/usr/lib64/mysql-proxy/lua/rw-splitting.lua??#指定使用的讀寫分離腳本

#proxy-skip-profiling?=?true

#

#?Admin?Configuration

admin-address?=?0.0.0.0:4041??????#連接mysql-proxy的mysql界面端口

admin-lua-script?=/usr/lib64/mysql-proxy/lua/admin.lua??#指定使用的管理腳本

admin-username?=?admin?????????????#連接mysql-proxy的用戶名

admin-password?=?admin?????????????#連接mysql-proxy的密碼

設置完成啟動mysql-proxy[root@mysql-proxy?~]#?service?mysql-proxy?start

驗證3306端口是否啟動,如果啟動表示proxy工作正常[root@mysql-proxy?~]#?ss?-tnlp?|?grep?3306

LISTEN????0??????128???????????????????????*:3306?????????????????????*:*?????users:(("mysql-proxy",37922,11))

1、4 主節點添加mysql-proxy可訪問用戶

主節點設置允許root用戶遠程連接并設置密碼,否則mysql-proxy無法完成訪問。MariaDB?[(none)]>?GRANT?ALL?ON?*.*?TOroot@'172.16.%.%'?IDENTIFIED?BY?'proxy';

MariaDB?[(none)]>?FLUSH?PRIVILEGES;

說明:從節點不需要添加用戶,因為主節點創建完成從節點就自動復制過去了。

這時使用mysql命令,連接mysql-proxy節點就可以查看數據庫了[root@mysql-proxy?~]#?mysql?-uroot?-h172.16.4.100-p?-e?'SHOW?DATABASES;'

Enter?password:

+--------------------+

|?Database??????????|

+--------------------+

|?information_schema?|

|?hellodb???????????|

|?mysql?????????????|

|?performance_schema?|

|?test??????????????|

+--------------------+

1、5讀寫分離驗證

連接mysql-proxy驗證讀寫分離,帳號密碼端口等都在mysql-proxy.cnf中定義。[root@mysql-proxy?~]#?mysql?-uadmin?-padmin?-P4041?-h172.16.4.100

使用SELECT * FROM backends;命令查看后端節點,從類型判斷讀服務器(ro)和寫服務器(rw)mysql>?SELECT?*?FROM?backends;

+-------------+-------------------+---------+------+------+-------------------+

|?backend_ndx?|?address???????????|?state???|?type?|?uuid?|?connected_clients?|

+-------------+-------------------+---------+------+------+-------------------+

|???????????1|?172.16.4.136:3306?|?up??????|?rw???|?NULL?|?????????????????0?|

|???????????2|?172.16.4.10:3306??|?unknown?|?ro???|?NULL?|?????????????????0?|

+-------------+-------------------+---------+------+------+-------------------+

2?rows?in?set?(0.00?sec)

從節點status顯示unknown的原因是還沒有將請求發往到從節點,只要連接到proxy節點執行一個select操作就會顯示狀態為up;操作過程如下所示:[root@mysql-proxy?~]#?mysql?-uroot?-h172.16.4.100-p?-e?'SELECT?*?from?mysql.user;'

[root@mysql-proxy?~]#?mysql?-uadmin?-padmin?-P4041-h172.16.4.100

mysql>?SELECT?*?FROM?backends;

+-------------+-------------------+-------+------+------+-------------------+

|?backend_ndx?|?address???????????|?state?|?type?|?uuid?|connected_clients?|

+-------------+-------------------+-------+------+------+-------------------+

|???????????1|?172.16.4.136:3306?|?up????|?rw???|?NULL?|?????????????????0?|

|???????????2|?172.16.4.10:3306??|?up????|?ro??|?NULL?|?????????????????0?|

+-------------+-------------------+-------+------+------+-------------------+

2?rows?in?set?(0.00?sec)

設置完成關閉服務,以免影響后續amoeba實驗效果[root@mysql-proxy?~]#?service?mysql-proxy?stop

2、Amoeba

Amoeba(變形蟲)項目,該開源框架于2008年開始發布一款Amoeba forMysql軟件。這個軟件致力于MySQL的分布式數據庫前端代理層,它主要在應用層訪問MySQL的時候充當SQL路由功能,專注于分布式數據庫代理層(Database Proxy)開發。座落與Client、DB Server(s)之間,對客戶端透明。具有負載均衡、高可用性、SQL過濾、讀寫分離、可路由相關的到目標數據庫、可并發請求多臺數據庫合并結合。通過Amoeba你能夠完成多數據源的高可用、負載均衡、數據切片的功能,目前Amoeba已在很多企業的生產線上面使用。

2、1 Amoeba工作原理圖

Client通過連接JAVA、PHP開發的前端程序,由程序將數據庫請求發送到amoeba,amoeba將讀寫操作分發到不同的mysql數據庫。

2、2環境拓撲

環境還是使用mysql-proxy的環境,只不過mysql-proxy換成了amoeba,IP地址等配置均相同,

2、3 配置JAVA環境

Amoeba是根據JAVA語言研發的程序,如果想成功安裝amoeba就需要配置JAVA運行環境。[root@amoeba?~]#?rpm?-ivh?jdk-7u67-linux-x64.rpm

[root@amoeba?~]#?vim?/etc/profile.d/java.sh

export?JAVA_HOME=/usr/java/latest

export?PATH=$JAVA_HOME/bin:/$PATH

[root@amoeba?~]#?.?/etc/profile.d/java.sh

驗證,使用JAVA命令可以輸出版本,表示JAVA環境配置成功[root@amoeba?~]#?java?-version

java?version?"1.7.0_67"

Java(TM)?SE?Runtime?Environment?(build1.7.0_67-b01)

Java?HotSpot(TM)?64-Bit?Server?VM?(build?24.65-b04,mixed?mode)

2、4 安裝配置amoeba

解壓amoeba到安裝指定目錄,就完了[root@amoeba?~]#?mkdir?/usr/local/amoeba

[root@amoeba?~]#?tar?xf?amoeba-mysql-binary-2.2.0.tar.gz-C?/usr/local/amoeba/

Master節點添加用戶運行mysql-proxy遠程連接(mysql-proxy的時候已經添加過了,這里只是強調一下,如果沒有這個用戶amoeba是無法完成代理的)MariaDB?[(none)]>?GRANT?ALL?ON?*.*?TOroot@'172.16.%.%'?IDENTIFIED?BY?'proxy';

MariaDB?[(none)]>?FLUSH?PRIVILEGES;

Slave節點不需要添加用戶,因為主節點創建完成從節點就自動復制過去了。

修改amoeba的dbServers.xml文件,指定讀寫節點,設置client連接proxy的相關信息[root@amoeba?~]#?cat/usr/local/amoeba/conf/dbServers.xml

${defaultManager}

64

128

3306?????#指定后端服務器的端口

mydb???#指定默認連接的數據庫

root?????#指定數據庫用戶名

proxy??#指定數據庫密碼

500

500

10

600000

600000

true

true

true

??#定義寫數據庫,這里不是真正的定義,在后面的amoeba.xml中定義才生效

172.16.4.136???#定義寫服務器地址

?????#定義讀服務器

172.16.4.10???#定義讀服務器地址

1???#設置調度方式,1為負載,2為加權,3為高可用

master,slave??????#定義readPool池中的服務器,可以添加多個服務器,在后面的amoeba.xml統一調用

修改amoeba.xml設置讀寫分離相關配置[root@amoeba?~]#?cat/usr/local/amoeba/conf/amoeba.xml

3306?????#設置amoeba監聽的端口

0.0.0.0??#設置amoeba監聽的地址

${clientConnectioneManager}

128

64

root????????#設置連接后端服務器的帳號

proxy??#設置連接后端服務器的密碼

中間省略一大段內容……

${amoeba.home}/conf/functionMap.xml

1500

master???#設定默認數據庫

master????#設定寫數據庫

readPool???#設定讀數據庫

true

這個時候就可以使用/usr/local/amoeba/bin/amoeba這個腳本啟動amoeba了

但是啟動amoeba報錯,原因是棧太小了,最少228k[root@amoeba?~]#?/usr/local/amoeba/bin/amoeba?start

/usr/local/amoeba/bin/amoeba:?line?14:?uname:command?not?found

/usr/local/amoeba/bin/amoeba:?line?37:?dirname:command?not?found

The?stack?size?specified?is?too?small,?Specify?atleast?228k

Error:?Could?not?create?the?Java?Virtual?Machine.

Error:?A?fatal?exception?has?occurred.?Program?willexit.

解決方法:修改amoeba啟動文件的57行的-Xss的值為512k[root@amoeba?~]#?vim?/usr/local/amoeba/bin/amoeba

ULT_OPTS="-server?-Xms256m?-Xmx256m-Xss512k"

設置完成啟動amoeba[root@amoeba?~]#?/usr/local/amoeba/bin/amoeba?start

log4j:WARN?log4j?config?load?completed?fromfile:/usr/local/amoeba/conf/log4j.xml

2015-05-26?23:58:05,165?INFO??context.MysqlRuntimeContext?-?Amoeba?forMysql?current?versoin=5.1.45-mysql-amoeba-proxy-2.2.0

log4j:WARN?ip?access?config?load?completed?fromfile:/usr/local/amoeba/conf/access_list.conf

2015-05-26?23:58:05,558?INFO??net.ServerableConnectionManager?-?Amoeba?forMysql?listening?on?/0.0.0.0:3306.

2015-05-26?23:58:05,568?INFO??net.ServerableConnectionManager?-?AmoebaMonitor?Server?listening?on?/127.0.0.1:55854.

補充:啟動的時候可以加&表示在后臺運行,如下所示,這樣不會占用前臺

[root@amoeba?~]#?/usr/local/amoeba/bin/amoeba?start?&

這個時候amoeba就配置完成了

2、5 抓包驗證讀寫分離

連接amoeba寫入數據,驗證寫請求是否發往Master服務器[root@amoeba?~]#?mysql?-uroot?-pproxy?-h172.16.4.100

mysql>?create?database?test;

master抓包出現寫入的數據的sql語句[root@master?~]#?tcpdump?-i?eth0?-nn?-XX?tcp?port3306

03:33:16.418983?IP?172.16.4.100.39625?>172.16.4.136.3306:?Flags?[P.],?seq?25:52,?ack?59,?win?245,?options?[nop,nop,TSval?13988352?ecr?14759402],?length?27

0x0000:??000c?29ba?d792?000c?2922?c5c2?0800?4500??..).....)"....E.

0x0010:??004f?5103?4000?4006?8899?ac10?0464?ac10??.OQ.@.@......d..

0x0020:??0488?9ac9?0cea?98ee?7151?8c41?0a32?8018??........qQ.A.2..

0x0030:??00f5?c45d?0000?0101?080a?00d5?7200?00e1??...]........r...

0x0040:??35ea?1700?0000?0363?7265?6174?6520?6461??5......create.da

0x0050:??7461?6261?7365?2074?6573?7464?62?????????tabase.testdb

在amoeba查詢數據,驗證讀mysql>?SELECT?*?FROM?mysql.user;

Slave節點出現查詢請求,如果再次查詢可能在master節點出現,因為讀請求是負載均衡的[root@slave?~]#?tcpdump?-i?eth0?-nn?-XX?tcp?port3306

02:43:15.645879?IP?172.16.4.100.39625?>172.16.4.136.3306:?Flags?[P.],?seq?2565763465:2565763494,?ack?2353076083,?win336,?options?[nop,nop,TS?val?14201044?ecr?14967401],?length?29

0x0000:??000c?29ba?d792?000c?2922?c5c2?0800?4500??..).....)"....E.

0x0010:??0051?5108?4000?4006?8892?ac10?0464?ac10??.QQ.@.@......d..

0x0020:??0488?9ac9?0cea?98ee?7189?8c41?1773?8018??........q..A.s..

0x0030:??0150?cf76?0000?0101?080a?00d8?b0d4?00e4??.P.v............

0x0040:??6269?1900?0000?0353?454c?4543?5420?2a20??bi.....SELECT.*.

0x0050:??4652?4f4d?206d?7973?716c?2e75?7365?72????FROM.mysql.user

總結

以上是生活随笔為你收集整理的amoeba mysql proxy_mysql-proxy和amoeba 分别实现Mariadb读写分离的全部內容,希望文章能夠幫你解決所遇到的問題。

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