亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3697 | 回復(fù): 0
打印 上一主題 下一主題

mysql-proxy實現(xiàn)數(shù)據(jù)庫的讀寫分離 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-23 03:19 |只看該作者 |倒序瀏覽
                       64位CentOS 5.6安裝Mysql Proxy 0.8.2

在生成Mysql的M-S結(jié)構(gòu)后,為了實現(xiàn)讀寫分離,需要使用Mysql Proxy。目前Mysql Proxy的版本為0.8.2,先從mysql.com下載源碼包到/support/目錄下。

Mysql Proxy安裝之前有先決條件,如下:
•    libevent 1.x 或更高
•    glib2 2.6.0 或更高
•    lua 5.1.x 或更高
•    pkg-config
•    libtool 1.5 或更高
•    MySQL 5.0.x 或更高的開發(fā)庫

先yum安裝必須的庫,同時解決pkg-config、libtool和Mysql開發(fā)庫,由于mysql-proxy實際并不需要在本機上運行mysql實例,所以用yum安裝。

1.yum -y install gcc gcc-c++ autoconf mysql-devel libtool pkgconfig ncurses ncurses-devel

libevent安裝libevent-2.0.13版本,從此處可以下載:
http://monkey.org/~provos/libevent-2.0.13-stable.tar.gz
運行腳本:
# tar xvf libevent-2.0.13-stable.tar.gz
# cd libevent-2.0.13-stable
# ./configure
# make && make install

glib2安裝glib-2.18.4版本,最新版本安裝報錯,從此處可以下載:
http://ftp.gnome.org/pub/gnome/sources/glib/2.18/glib-2.18.4.tar.gz
運行腳本:
# tar xvf glib-2.18.4.tar.gz
# cd glib-2.18.4
# ./configure
# make && make install

lua安裝5.1.4版本,安裝之前需要先安裝readline 6.1,不然會報錯缺少頭文件:
readline 6.1下載:
ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz
lua 5.1.4下載:
http://www.lua.org/ftp/lua-5.1.4.tar.gz

運行腳本:
# tar xvf readline-6.1.tar.gz   
# cd readline-6.1
# ./configure
# make && make install
#應(yīng)用ldconfig –v
# ldconfig –v

# lua
# tar xvf lua-5.1.4.tar.gz
# cd lua-5.1.4
# 64位系統(tǒng),需在CFLAGS里加上-fPIC  
# vim src/Makefile
CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS)
# make linux
# make install

# pkg-config 環(huán)境變量
# cp etc/lua.pc /usr/local/lib/pkgconfig/ 
# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 

以上操作完成了先決條件的安裝,接下來是Mysql Proxy安裝,下載完后運行:
# tar xvf mysql-proxy-0.8.2.tar.gz
# cd mysql-proxy-0.8.2
# ./configure
# make && make install

接下來:
# cp lib/rw-splitting.lua /usr/local/lib/
# cp lib/admin.lua /usr/local/lib/

到這里MySQL-proxy已基本安裝完成,接下來,測試:

1.1 設(shè)置說明
Master服務(wù)器: 192.168.20.9
Slave服務(wù)器: 192.168.192.168.20.10
Proxy服務(wù)器: 192.168.20.12

1.2 mysql-proxy選項說明
# mysql-proxy --help-all
管理功能選項:
--admin-address=host:port 指定一個mysqo-proxy的管理端口, 缺省是4041;
--admin-username=<string> username to allow to log in
--admin-password=<string> password to allow to log in
--admin-lua-script=<filename> script to execute by the admin plugin
代理功能選項:
-P, --proxy-address=<host:port> 是mysql-proxy 服務(wù)器端的監(jiān)聽端口, 缺省是4040;
-r, --proxy-read-only-backend-addresses=<host:port> 只讀Slave的地址和端口, 缺省為不設(shè)置;
-b, --proxy-backend-addresses=<host:port> 遠程Master地址和端口, 可設(shè)置多個做failover和load balance, 缺省是127.0.0.1:3306;
--proxy-skip-profiling 關(guān)閉查詢分析功能, 缺省是打開的;
--proxy-fix-bug-25371 修正 mysql的libmysql版本大于5.1.12的一個#25371號bug;
-s, --proxy-lua-script=<file> 指定一個Lua腳本來控制mysql-proxy的運行和設(shè)置, 這個腳本在每次新建連接和腳本發(fā)生修改的的時候?qū)⒅匦抡{(diào)用;
其他選項:
--defaults-file=<file>配置文件, 可以把mysql-proxy的參數(shù)信息置入一個配置文件里;
--daemon mysql-proxy以守護進程方式運行
--pid-file=file 設(shè)置mysql-proxy的存儲PID文件的路徑
--keepalive try to restart the proxy if it crashed, 保持連接啟動進程會有2個, 一號進程用來監(jiān)視二號進程, 如果二號進程死掉自動重啟proxy.

1.3數(shù)據(jù)庫準(zhǔn)備工作
1) 安裝半同步補丁(建議)
讀寫分離不能回避的問題之一就是延遲, 可以考慮Google提供的SemiSyncReplication補丁.
2) 給用戶授權(quán)
在Master/Slave建立一個測試用戶, 因為以后客戶端發(fā)送的SQL都是通過mysql-proxy服務(wù)器來轉(zhuǎn)發(fā), 所以要確?梢詮膍ysql-proxy服務(wù)器上登錄MySQL主從庫.
mysql> grant all privileges on *.* to 'u_test'@'192.168.20.12' identified by 'u_test' with grant option;
3) 在Master建立測試表
mysql> create table db_test.t_test (col varchar(10));
mysql> insert into db_test.t_test values ('testA');
mysql> select * from db_test.t_test;
+-------+
| col   |
+-------+
| testA |
+-------+

1.4 mysql-proxy啟動
1) 修改讀寫分離lua腳本
默認(rèn)最小4個最大8個以上的客戶端連接才會實現(xiàn)讀寫分離, 現(xiàn)改為最小1個最大2個:
# vi +40 /usr/local/lib/rw-splitting.lua
------------------------------------------------------
-- connection pool
if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 1,
                max_idle_connections = 2,
                is_debug = true
        }      
end
------------------------------------------------------
這是因為mysql-proxy會檢測客戶端連接, 當(dāng)連接沒有超過min_idle_connections預(yù)設(shè)值時, 不會進行讀寫分離, 即查詢操作會發(fā)生到Master上.

2) 啟動mysql-proxy
建議使用配置文件的形式啟動, 注意配置文件必須是660權(quán)限, 否則無法啟動. 如果有多個Slave的話, proxy-read-only-backend-addresses參數(shù)可以配置多個以逗號分隔的IP:Port從庫列表.
# killall mysql-proxy
# vi /etc/mysql-proxy.cnf

[mysql-proxy]
admin-username=zhaoyf
admin-password=iamzhaoyf
admin-lua-script=/usr/local/lib/admin.lua
proxy-backend-addresses=192.168.20.9:3306
proxy-read-only-backend-addresses=192.168.20.10:3306
proxy-lua-script=/usr/local/lib/rw-splitting.lua
log-file=/var/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true

# chmod 660 /etc/mysql-proxy.cnf
# mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
# ps -ef | grep mysql-proxy | grep -v grep
root      1869     1  0 18:16 ?        00:00:00 /usr/local/mysql-proxy/libexec/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
root      1870  1869  0 18:16 ?        00:00:00 /usr/local/mysql-proxy/libexec/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf


1.5 客戶端連接測試
1) 先停止Slave的復(fù)制進程
mysql> stop slave;
2) 連接Proxy端口, 插入數(shù)據(jù)
# mysql -uu_test –pu_test -h192.168.20.12 -P4040 -Ddb_test
mysql> insert into db_test.t_test values ('testB');
mysql> select * from db_test.t_test;
+-------+
| col   |
+-------+
| testA |
| testB |
+-------+

3) 多開幾個客戶端, 連接Proxy端口, 查詢數(shù)據(jù)
# mysql -uu_test –pu_test -h192.168.20.12 -P4040 -Ddb_test
mysql> select * from db_test.t_test;
+-------+
| col   |
+-------+
| testA |
+-------+

如果查詢不到上步新插入的數(shù)據(jù), 說明連接到了Slave, 讀寫分離成功. 在同一線程再插入數(shù)據(jù)并驗證:
mysql> insert into db_test.t_test values ('testC');
mysql> select * from db_test.t_test;
+-------+
| col   |
+-------+
| testA |
+-------+

發(fā)現(xiàn)insert操作成功, 但是select不出剛插入的數(shù)據(jù), 說明同一線程也讀寫分離成功. 從日志中可以驗證:
[root@localhost ~]# tail /var/log/mysql-proxy.log
2011-08-30 16:25:44: (message) Initiating shutdown, requested from mysql-proxy-cli.c:604
2011-08-30 16:25:44: (message) shutting down normally, exit code is: 0
2011-08-30 16:25:57: (debug) chassis-unix-daemon.c:121: we are the child: 4092
2011-08-30 16:25:57: (message) mysql-proxy 0.8.2 started
2011-08-30 16:25:57: (debug) max open file-descriptors = 1024
2011-08-30 16:25:57: (message) proxy listening on port :4040
2011-08-30 16:25:57: (message) chassis-unix-daemon.c:136: [angel] we try to keep PID=4092 alive2011-08-30 16:25:57: (message) added read/write backend: 192.168.20.9:3306

2011-08-30 16:25:57: (message) added read-only backend: 192.168.20.10:3306
2011-08-30 16:25:57: (debug) chassis-unix-daemon.c:157: waiting for 4092


參考文檔:http://blog.csdn.net/changerlove/article/details/6167790
http://hi.baidu.com/edeed/blog/item/b302f21f7488a77af624e484.html
http://hi.baidu.com/niupeiyuan/blog/item/be3335a48e2c7ee19052eec4.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP