国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
基于mysql-proxy實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)的讀寫(xiě)分離

在我們的業(yè)務(wù)系統(tǒng)中,隨著業(yè)務(wù)的增長(zhǎng),數(shù)據(jù)庫(kù)的壓力也隨之產(chǎn)生,特別對(duì)于查詢多于寫(xiě)入的業(yè)務(wù)環(huán)境下,迫切需要對(duì)讀操作和寫(xiě)操作分離開(kāi)來(lái),這篇博文,主要描述mysql官方提供的mysql-proxy軟件來(lái)實(shí)現(xiàn)讀寫(xiě)分離[其實(shí)主要是通過(guò)lua腳本實(shí)現(xiàn)的],再結(jié)合mysql的主從復(fù)制,可以提升數(shù)據(jù)庫(kù)的并發(fā)負(fù)載能力。但其穩(wěn)定性較差,不建議使用,如果公司可以對(duì)lua腳本的讀寫(xiě)分離重新定制開(kāi)發(fā),倒可以嘗試,從途牛的招聘來(lái)看,途牛可能用的這一套,僅是推測(cè)。

附上簡(jiǎn)要原理圖:

下面描述一下實(shí)驗(yàn)環(huán)境:

mysql-proxy:192.168.1.104

mysql1:192.168.1.104(master -- w)

mysql2:192.168.1.102(slave -- r)

mysql3:192.168.1.100(slave -- r)

為能看到讀寫(xiě)分離的效果,我這里就不配置數(shù)據(jù)庫(kù)之間的主從關(guān)系,僅做mysql-proxy的配置[這里采用編譯安裝]

1.編譯安裝需要安裝如下幾個(gè)軟件:[以下幾個(gè)軟件我都解壓放在/tmp下]

glib,libenent,lua,pkg-config,mysql-proxy

軟件共享下載地址:http://www.kuaipan.cn/file/id_119710994921422889.htm

2.安裝pkg-config-0.23.tar.gz

  1. [root@centos tmp]# yum -y install gcc-c++.x86_64  
  2. [root@centos tmp]# tar -xf pkg-config-0.23.tar.gz  
  3. [root@centos tmp]# cd pkg-config-0.23  
  4. [root@centos pkg-config-0.23]# ./configure  
  5. [root@centos pkg-config-0.23]# make  
  6. [root@centos pkg-config-0.23]# make install  
  7. # 確保PKG_CONFIG_PATH環(huán)境變量包含了相關(guān)的pkg-config配置文件路徑:  
  8. [root@centos pkg-config-0.23]# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  

3.安裝libevent-1.4.11-stable.tar.gz

  1. [root@centos tmp]# tar -xf libevent-1.4.11-stable.tar.gz  
  2. [root@centos tmp]# cd libevent-1.4.11-stable  
  3. [root@centos libevent-1.4.11-stable]# ./configure  
  4. [root@centos libevent-1.4.11-stable]#make  
  5. [root@centos libevent-1.4.11-stable]#make install  

4.安裝glib-2.20.0.tar.bz2

  1. [root@centos tmp]# tar -xf glib-2.20.0.tar.bz2  
  2. [root@centos tmp]# cd glib-2.20.0  
  3. [root@centos glib-2.20.0]# ./configure  
  4. [root@centos glib-2.20.0]#make  
  5. [root@centos glib-2.20.0]#make install  

5.安裝lua-5.1.4.tar.gz

  1. [root@centos lua-5.1.4]# yum -y install readline-devel.x86_64  
  2. [root@centos tmp]# tar -xf lua-5.1.4.tar.gz  
  3. [root@centos tmp]#cd lua-5.1.4  
  4. # 如果你的服務(wù)器是64位的,這時(shí)要調(diào)整一下Makefile:vi src/Makefile,在CFLAGS里加上-fPIC,否則會(huì)出錯(cuò)  
  5. # 接下來(lái)不用執(zhí)行常見(jiàn)的configure,直接make,如下:  
  6. [root@centos lua-5.1.4]# make linux  
  7. [root@centos lua-5.1.4]# make install  
  8. # 復(fù)制相應(yīng)文件到指定目錄  
  9. [root@centos lua-5.1.4]# cp etc/lua.pc /usr/local/lib/pkgconfig/lua5.1.pc  

6.安裝mysql,我這里的mysql使用rpm安裝mysql-devel[我這里已經(jīng)安裝好了,這一步我省略了]

  1. 注:編譯安裝完成后,要聲明PATH變量,這樣可以保證系統(tǒng)能找到mysql_config,后面編譯mysql-proxy會(huì)用到它  
  2. export PATH=$PATH:/usr/local/mysql/bin  
  3. 同時(shí),還要保證系統(tǒng)能找到mysql庫(kù)文件:  
  4. vi /etc/ld.so.conf  
  5. 加入/usr/local/mysql/lib目錄  
  6. 執(zhí)行:/sbin/ldconfig /etc/ld.so.conf  

7.安裝mysql-proxy-0.8.3.tar.gz

  1. [root@centos tmp]# tar -xf mysql-proxy-0.8.3.tar.gz  
  2. [root@centos tmp]# cd mysql-proxy-0.8.3  
  3. [root@centos mysql-proxy-0.8.3]# ./configure  
  4. [root@centos mysql-proxy-0.8.3]# make  
  5. [root@centos mysql-proxy-0.8.3]# make install  
  6. # 創(chuàng)建相應(yīng)目錄  
  7. [root@centos mysql-proxy-0.8.3]# mkdir -p /usr/local/mysql-proxy/share/doc/mysql-proxy  
  8. # 復(fù)制讀寫(xiě)分離腳本 和 管理接口腳本  
  9. [root@centos mysql-proxy-0.8.3]#cp /tmp/mysql-proxy-0.8.3/lib/rw-splitting.lua /usr/local/mysql-proxy/share/doc/mysql-proxy/  
  10. [root@centos mysql-proxy-0.8.3]#cp /tmp/mysql-proxy-0.8.3/lib/admin.lua /usr/local/mysql-proxy/share/doc/mysql-proxy/  
  11. # 手動(dòng)啟動(dòng)mysql-proxy測(cè)試  
  12. [root@centos ~]# mysql-proxy --daemon --log-level=debug --log-file=/var/log/mysql-proxy.log \  
  13. > --plugins="proxy" --proxy-backend-addresses="192.168.1.104:3306" \  
  14. > --proxy-read-only-backend-addresses="192.168.1.102:3306" \  
  15. > --proxy-read-only-backend-addresses="192.168.1.102:3307" \  
  16. > --proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua" \  
  17. > --plugins=admin \  
  18. > --admin-username="admin" \  
  19. > --admin-password="admin" \  
  20. > --admin-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua"  
  21.   
  22. #/* --daemon 采用daemon方式啟動(dòng)  
  23. #/* --proxy-backend-addresses=** 指定讀寫(xiě)都可以的mysql數(shù)據(jù)庫(kù)的IP地址和端口  
  24. #/* --proxy-read-only-backend-addresses=**指定只讀mysql數(shù)據(jù)庫(kù)的IP地址和端口#/* --proxy-lua-script=** 指定讀寫(xiě)分離腳本的位置  
  25. #/* --admin-username=** 指定mysql-proxy管理的用戶  
  26. #/* --admin-password=** 指定mysql-proxy管理用戶的密碼  
  27. #/* --admin-lua-script=** 指定mysql-proxy管理接口lua腳本的位置  
  28. #/* --log-level=debug 定義log日志級(jí)別,由高到低分別有(error|warning|info|message|debug)  
  29. #/* --log-file=** 定義log日志文件路徑  
  30. #/* --admin-address=:4041 指定mysql proxy的管理端口,在這里,表示本機(jī)的4041端口[可以省略]  
  31. #/* --proxy-address=:3307 指定mysql proxy的監(jiān)聽(tīng)端口(默認(rèn)4040),也可以用 127.0.0.1:3307表示[可以省略],此接口是提供給應(yīng)用訪問(wèn)數(shù)據(jù)庫(kù)的地址和端口  

8.啟動(dòng)數(shù)據(jù)庫(kù)[記的關(guān)閉防火墻,不然會(huì)有問(wèn)題,也可以添加防火墻策略]

  1. [root@client102 ~]# mysqld_multi start  
  2. [root@client102 ~]# mysqld_multi report  
  3. Reporting MySQL servers  
  4. MySQL server from group: mysqld3306 is running  
  5. MySQL server from group: mysqld3307 is running  
  6. # 登陸數(shù)據(jù)庫(kù) 授予mysql-proxy服務(wù)器的訪問(wèn)  
  7. [root@client102 ~]# mysql -uroot -S /usr/local/mysql/mysqld3306.sock -p  
  8. mysql> GRANT all privileges ON *.* TO 'kongzhong'@'192.168.1.104' IDENTIFIED BY 'kongzhong';  
  9. mysql> flush privileges;  
  10. [root@client102 ~]# mysql -uroot -S /usr/local/mysql/mysqld3307.sock -p  
  11. mysql> GRANT all privileges ON *.* TO 'kongzhong'@'192.168.1.104' IDENTIFIED BY 'kongzhong';  
  12. mysql> flush privileges;  
  13. [root@centos lib]# /etc/init.d/mysqld start  
  14. [root@centos lib]# mysql -u root -p  
  15. mysql> GRANT all privileges ON *.* TO 'kongzhong'@'192.168.1.104' IDENTIFIED BY 'kongzhong';  
  16. mysql> flush privileges;  

9.登陸測(cè)試

  1. # 這里是mysql-proxy服務(wù)器所在的iP地址和提供給外面的訪問(wèn)端口[使用任何一臺(tái)提供mysql登陸功能的機(jī)器,記得關(guān)閉防火墻]  
  2. [root@client102 ~]# mysql -ukongzhong -p -h192.168.1.104 --port=4040  
  3. # 正常登陸基本上就證明mysql-proxy已經(jīng)配置成功  
  4. # 測(cè)試的話,使用下面的語(yǔ)句,但需要反復(fù)測(cè)試,沒(méi)有壓力是沒(méi)法測(cè)出讀寫(xiě)分離效果的  
  5. [root@client102 ~]# mysql -ukongzhong -p -h192.168.1.104 --port=4040 -e "select * from mysql.user"  
  6. [root@client102 ~]# mysql -ukongzhong -p -h192.168.1.104 --port=4040 -e "create database kongzhong"  
  7. # 管理接口[此接口也僅能執(zhí)行這一條命令,查看讀寫(xiě)分離狀態(tài)]  
  8. [root@client102 ~]# mysql -h192.168.1.104 --port=4041 -uadmin -p  
  9. mysql> select * from backends;  
  10. +-------------+--------------------+---------+------+------+-------------------+  
  11. | backend_ndx | address | state | type | uuid | connected_clients |  
  12. +-------------+--------------------+---------+------+------+-------------------+  
  13. | 1 | 192.168.1.104:3306 | up | rw | NULL | 0 |  
  14. | 2 | 192.168.1.102:3306 | unknown | ro | NULL | 0 |  
  15. | 3 | 192.168.1.102:3307 | unknown | ro | NULL | 0 |  
  16. +-------------+--------------------+---------+------+------+-------------------+  
  17. 注意: 在測(cè)試讀寫(xiě)分離的時(shí)候,我們可以分布測(cè)試,比如先測(cè)試讀的語(yǔ)句,查看讀寫(xiě)狀態(tài)是否UP ,然后在測(cè)試寫(xiě)的語(yǔ)句,反反復(fù)復(fù)多測(cè)試幾次才能看出效果,本人在測(cè)試的時(shí)候也出現(xiàn)過(guò)讀的狀態(tài)不能up 解決辦法是 多測(cè)試即便就出來(lái)了。  
  18. # 因?yàn)槲覀儸F(xiàn)在還沒(méi)有寫(xiě)啟動(dòng)腳本,所以只能手動(dòng)殺掉進(jìn)程  
  19. [root@centos mysql-proxy]# killall mysql-proxy  

10.配置啟動(dòng)腳本和啟動(dòng)配置文件

  1. # mysql-proxy啟動(dòng)腳本配置  
  2. [root@centos run]# vim /etc/init.d/mysql-proxy  
  3. # 腳本內(nèi)容如下  
  4. #!/bin/sh  
  5. # Source function library.  
  6. . /etc/rc.d/init.d/functions  
  7. # PROXY_PATH 這里需要指向你mysql-proxy命令所在的路徑  
  8. PROXY_PATH=/usr/local/bin  
  9. prog="mysql-proxy"  
  10. # Source networking configuration.  
  11. . /etc/sysconfig/network  
  12. # Check that networking is up.  
  13. [ ${NETWORKING} = "no" ] && exit 0  
  14. # Set default mysql-proxy configuration.  
  15. PROXY_OPTIONS="--daemon"  
  16. PROXY_PID=/var/run/mysql-proxy.pid  
  17. # Source mysql-proxy configuration.  
  18. if [ -f /etc/sysconfig/mysql-proxy ] ; then  
  19. . /etc/sysconfig/mysql-proxy  
  20. fi  
  21. PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH  
  22. # By default it's all good  
  23. RETVAL=0  
  24. # See how we were called.  
  25. case "$1" in  
  26. start)  
  27. # Start daemon.  
  28. echo -n $"Starting $prog: "  
  29. daemon $NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS --pid-file $PROXY_PID  
  30. RETVAL=$?  
  31. echo  
  32. if [ $RETVAL = 0 ]; then  
  33. touch /var/lock/subsys/mysql-proxy  
  34. fi  
  35. ;;  
  36. stop)  
  37. # Stop daemons.  
  38. echo -n $"Stopping $prog: "  
  39. killproc $prog  
  40. RETVAL=$?  
  41. echo  
  42. if [ $RETVAL = 0 ]; then  
  43. rm -f /var/lock/subsys/mysql-proxy  
  44. rm -f $PROXY_PID  
  45. fi  
  46. ;;  
  47. restart)  
  48. $0 stop  
  49. sleep 3  
  50. $0 start  
  51. ;;  
  52. condrestart)  
  53. [ -e /var/lock/subsys/mysql-proxy ] && $0 restart  
  54. ;;  
  55. status)  
  56. status mysql-proxy  
  57. RETVAL=$?  
  58. ;;  
  59. *)  
  60. echo "Usage: $0 {start|stop|restart|status|condrestart}"  
  61. RETVAL=1  
  62. ;;  
  63. esac  
  64. exit $RETVAL  
  65.   
  66. # 寫(xiě)配置文件 啟動(dòng)腳本會(huì)讀取此配置文件:  
  67. [root@centos run]# vim /etc/sysconfig/mysql-proxy  
  68. # 文件內(nèi)容如下[此內(nèi)容需寫(xiě)在一行,不可主從換行,不然會(huì)有錯(cuò)]
  69. PROXY_OPTIONS="--daemon --log-level=debug --log-file=/var/log/mysql-proxy.log --plugins=proxy --proxy-backend-addresses=192.168.1.104:3306 --proxy-read-only-backend-addresses=192.168.1.102:3306 --proxy-read-only-backend-addresses=192.168.1.102:3307 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --plugins=admin --admin-username=admin --admin-password=admin --admin-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua"  
  70. # 賦予腳本執(zhí)行權(quán)限  
  71. [root@centos run]# chmod +x /etc/init.d/mysql-proxy  
  72. # 測(cè)試腳本使用:  
  73. [root@centos run]# /etc/init.d/mysql-proxy start  
  74. Starting mysql-proxy: [ OK ]  
  75. [root@centos run]# netstat -tulnap|grep mysql  
  76. tcp 0 0 0.0.0.0:4040 0.0.0.0:* LISTEN 5454/mysql-proxy  
  77. tcp 0 0 0.0.0.0:4041 0.0.0.0:* LISTEN 5454/mysql-proxy  
  78. [root@centos run]# /etc/init.d/mysql-proxy stop  
  79. Stopping mysql-proxy: [ OK ]  
  80. # 以上mysql-proxy就配置好了,讀寫(xiě)分離的效果需要有壓力,大家需要反復(fù)測(cè)試,才能在管理接口上看到  
  81. # mysql的主從搭建,這里就不配置,各位可以參考上面的文章,如果有疑問(wèn),可在下面留言反饋。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MySQL Proxy實(shí)現(xiàn)讀寫(xiě)分離及負(fù)載均衡
360公司開(kāi)源Atlas快速上手安裝配置
Mysql-proxy主從搭建讀寫(xiě)分離全過(guò)程
MySQL主從(MySQL proxy Lua讀寫(xiě)分離設(shè)置,一主多從同步配置,分庫(kù)分表方案)
MySQL讀寫(xiě)分離介紹及搭建
mysql-proxy搭建讀寫(xiě)分離(王興華)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服