1. 程式人生 > >mysql-proxy實現讀寫分離:

mysql-proxy實現讀寫分離:

一:mysql主從資料庫的配置
要求:配置主

從複製: server2 主 172.25.28.2
server3 從 172.25.28.3
二:安裝配置mysql-proxy

[root@server1 /]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit -C /usr/local/
[root@server1 local]# ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy  ##簡化路徑
[root@server1 local]# mkdir /usr/local/mysql-proxy/conf
[root@server1 local]# mkdir /usr/local/mysql-proxy/log

[roo[email protected] local]# vim mysql-proxy/conf/mysql-proxy.conf ##編譯配置檔案

[mysql-proxy]
daemon=true   #打入後臺
user=root     #
keepalive=true
plugins=proxy,admin
log-level=info    #日誌級別
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log  ##proxy日誌地址
proxy-address=172.25.28.1:3306 #本機ip地址 proxy-backend-addresses=172.25.28.2:3306 ##backend主 注意addresses proxy-read-only-backend-addresses=172.25.28.3:3306 ##backend從 proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua ##lua指令碼地址 admin-address=172.25.28.1:4041 ##proxy的管理使用者adminiphe埠
admin-username=admin admin-password=westos admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua #admin的lua指令碼地址;

更改lua指令碼
[[email protected] local]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/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 = false
        }

開啟proxy控制

[[email protected] local]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

檢視日誌狀態:

[[email protected] mysql-proxy]#  /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
[[email protected] mysql-proxy]#cat  log/mysql-proxy.log
2017-10-21 13:15:54: (message) chassis-unix-daemon.c:136: [angel] we try to keep PID=1409 alive
2017-10-21 13:15:54: (critical) plugin proxy 0.8.5 started
2017-10-21 13:15:54: (critical) plugin admin 0.8.5 started
2017-10-21 13:15:54: (critical) network-socket.c:492: bind(172.25.28.1:3306) failed: Address already in use (98)
2017-10-21 13:15:54: (critical) chassis-mainloop.c:270: applying config of plugin proxy failed
2017-10-21 13:15:54: (critical) mysql-proxy-cli.c:599: Failure from chassis_mainloop. Shutting down.
2017-10-21 13:15:54: (message) Initiating shutdown, requested from mysql-proxy-cli.c:600
2017-10-21 13:15:54: (message) shutting down normally, exit code is: 1
2017-10-21 13:15:54: (critical) chassis-unix-daemon.c:189: [angel] PID=1380 died on signal=11 (it used 2 kBytes max) ... waiting 3min before restart
2017-10-21 13:15:54: (message) chassis-unix-daemon.c:176: [angel] PID=1409 exited normally with exit-code = 1 (it used 1 kBytes max)
2017-10-21 13:15:54: (message) Initiating shutdown, requested from mysql-proxy-cli.c:273
2017-10-21 13:15:54: (message) shutting down normally, exit code is: 1
2017-10-21 13:15:56: (message) chassis-unix-daemon.c:136: [angel] we try to keep PID=1410 alive
2017-10-21 13:15:56: (critical) plugin proxy 0.8.5 started
2017-10-21 13:15:56: (critical) plugin admin 0.8.5 started
2017-10-21 13:15:56: (message) proxy listening on port 172.25.28.1:3306
2017-10-21 13:15:56: (message) added read/write backend: 172.25.28.2:3306
2017-10-21 13:15:56: (message) added read-only backend: 172.25.28.3:3306
2017-10-21 13:15:56: (message) admin-server listening on port 172.25.28.1:4041
[[email protected] mysql-proxy]# 

根據日誌可以檢視已經控制到mysql

過濾埠:

[root@server1 mysql-proxy]# netstat -anltp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      936/sshd            
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1012/master         
tcp        0      0 172.25.28.1:4041            0.0.0.0:*                   LISTEN      1410/mysql-proxy    
tcp        0      0 172.25.28.1:3306            0.0.0.0:*                   LISTEN      1410/mysql-proxy    
tcp        0      0 172.25.28.1:53135           172.25.28.2:3306            TIME_WAIT   -                   
tcp        0      0 172.25.28.1:22              172.25.28.250:55476         ESTABLISHED 1072/sshd           
tcp        0      0 172.25.28.1:53137           172.25.28.2:3306            TIME_WAIT   -                   
tcp        0      0 :::22                       :::*                        LISTEN      936/sshd            
tcp        0      0 ::1:25                      :::*                        LISTEN      1012/master         

z在master(server1)端給zpy使用者許可權:

mysql> grant all on test.* to [email protected]'%' identified by 'zpy';
Query OK, 0 rows affected (0.00 sec)

下來我們開始檢測:
在mysql安裝lsof:

[root@server2 ~]# yum install -y lsof

重新開一臺裝置:

[[email protected] mysql10.21]# mysql -h 172.25.28.1 -u zpy -p   ##通過訪問proxy,直接轉到mysql
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.1.71-log Source distribution

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

如上每登陸一次,使用lsof觀察3306 埠,連線一次

[root@server2 ~]# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  1411 mysql   11u  IPv4   9514      0t0  TCP *:mysql (LISTEN)
mysqld  1411 mysql   31u  IPv4  10201      0t0  TCP 172.25.28.2:mysql->172.25.28.1:53132 (ESTABLISHED)

當連線數大於2(lua指令碼中設定的時);即啟動了讀寫分離機制:
我們可以登陸admin p’roxy管理使用者檢視:

[[email protected] mysql10.21]# mysql -h 172.25.28.1 -u admin -pwestos -P 4041;
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.99-agent-admin

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> select * from backends;
+-------------+------------------+---------+------+------+-------------------+
| backend_ndx | address          | state   | type | uuid | connected_clients |
+-------------+------------------+---------+------+------+-------------------+
|           1 | 172.25.28.2:3306 | up      | rw   | NULL |                 0 |
|           2 | 172.25.28.3:3306 | unknown | ro   | NULL |                 0 |
+-------------+------------------+---------+------+------+-------------------+
2 rows in set (0.00 sec)

MySQL [(none)]> Bye
[[email protected] mysql10.21]# 

當然我們也可以使用上一篇所用的關閉I/O執行緒,然後寫入資料最後在兩端檢視不同;;

相關推薦

mysql-proxy實現分離

一:mysql主從資料庫的配置 要求:配置主 從複製: server2 主 172.25.28.2 server3 從 172.25.28.3 二:安裝配置mysql-proxy [root@server1 /]# ta

Mysql-proxy實現分離

讀寫分離,基本的原理是讓主資料庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從資料庫處理SELECT查詢操作。資料庫複製被用來把事務性操作導致的變更同步到叢集中的從資料庫。資料庫的“寫”(寫10000條資料到oracle可能要3分鐘)操作是比較耗時

MySQL Proxy實現分離

工作圖:   MySQL Proxy有一項強大功能是實現“讀寫分離”,基本原理是讓主資料庫處理寫方面事務,讓從庫處理SELECT查詢。 Amoeba for MySQL是一款優秀的中介軟體軟體,同樣可以實現讀寫分離,負載均衡等功能,並且穩定性也高於MySQL Proxy,

mysql-proxy 實現分離

實驗環境: 系統:reddhat6.5 mysql 版本:mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar mysql-proxy:mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz 下載連結 http:

mysql+mysql_proxy實現分離

mysql-_proxymysql讀寫分離需要基於主從架構實現 mysql主從配置:http://hongchen99.blog.51cto.com/12534281/1917137 mysql-proxy:用於實現mysql主從分離,基於主從架構讀寫分離存在的最大問題就是主從同步延遲 安裝my

MySQL主從(MySQL proxy Lua分離設置,一主多從同步配置,分庫分表方案)

否則 count user username 2個 ons 基礎 zxvf 路徑 Mysql Proxy Lua讀寫分離設置一.讀寫分離說明讀寫分離(Read/Write Splitting),基本的原理是讓主數據庫處理事務性增、改、刪操作(INSERT、UPDATE、DE

mysql+mycat實現分離

-- sys prop lse 版本 text oss 機制 mys centos7 master slave mycat1.6 client 192.168.41.10 192.168.41.11 192.168.41.12 192.168.41.13

mysql proxy 資料庫分離字符集亂碼

  mysql proxy 資料庫讀寫分離字符集亂碼    解決辦法 在對應配置後端資料庫伺服器的配置.cnf中加入如下程式碼 init-connect='SET NAME UTF8' skip-character-set-client-handshake cha

mysql proxy搭建分離

rhel 6.10 主伺服器 :  192.168.2.121   rac01 從伺服器 :  192.168.2.122   rac02 排程伺服器: 192.168.2.123   rac03 --建立目錄,

MySQL - MyCat 實現分離

前言         MyCat是一個徹底開源的,面向企業應用開發的大資料庫叢集,支援事務、ACID、可以替代MySQL的加強版資料庫.其功能有可以視為MySQL叢集的企業級資料庫,用來替代昂貴的Oracle叢集.融合了記憶體快取技術、NoSQL技術、HDFS大資料的

mysql資料庫實現分離

1.mysql讀寫分離背景 在專案中使用mysql資料庫,所有的增刪改查操作都在主庫處理,隨著查詢訪問量的增加,單庫處理的壓力驟增,為了防止主庫故障,使用一主多從的方式,通過讀寫分離,把所有的查詢處理都放到從伺服器上,減少單點故障導致整個服務掛掉的情況。 2.mysql讀寫分離的實現

mycat+mysql叢集:實現分離,分庫分表

1.mycat文件:https://github.com/MyCATApache/Mycat-doc       官方網站:http://www.mycat.org.cn/2.mycat的優點:配置簡單,靈活可實現讀寫分離可利用多種規則實現分庫分表心跳機制,自動踢出故障機組

mysql jdbc 實現分離

這種方式直接在程式碼級別實現了mysql 讀寫分離 很簡單,只需要改一下配置檔案,就搞定了,是不是很嗨? jdbc.driverClassName=com.mysql.jdbc.ReplicationDriver jdbc.url=jdbc:mysql

Docker配置mysql主從實現分離

1. 獲取mysql映象獲取映象$ sudo docker pull mysql 檢視映象$ sudo docker images REPOSITORY TAG IMAGE ID CREATED

SpringBoot2.0.3+Mybatis+Mysql+druid實現分離+事務

       mysql支援一主多從,即在寫庫的資料庫發生變動時,會同步到所有從庫,只是同步過程中,會有一定的延遲(除非業務中出現,立即寫立即讀,否則稍微的延遲是可以接收的)。        當資料庫有主從之分了,那應用程式碼也應該讀寫分離了。這時候的事務就不像單個數據

MySQL+MyCat實現分離和主備熱切換

配置MyCat的schema.xml檔案 <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <tab

黃聰Mysql主從配置,實現分離

大型網站為了軟解大量的併發訪問,除了在網站實現分散式負載均衡,遠遠不夠。到了資料業務層、資料訪問層,如果還是傳統的資料結構,或者只是單單靠一臺伺服器扛,如此多的資料庫連線操作,資料庫必然會崩潰,資料丟失的話,後果更是 不堪設想。這時候,我們會考慮如何減少資料庫的聯接,一方面採用優秀的程式碼框架,進行程式碼的優

使用spring實現分離mysql主從複製)五一主多從的實現

很多實際使用場景下都是採用“一主多從”的架構的,使用輪詢演算法實現,目前只需要修改DynamicDataSource即可。   1.1. 實現 import java.lang.reflect.Field; import java.util.ArrayList; impo

mysql實現分離中介軟體MySQL Proxy

MySQL Proxy是一個處於你的client端和MySQL server端之間的簡單程式,它可以監測、分析或改變它們的通訊。它使用靈活,沒有限制,常見的用途包括:負載平衡,故障、查詢分析,查詢過濾和修改等等。 MySQL Proxy就是這麼一箇中間層代理,簡單的說,MySQL Proxy就是一個連線池,

Mysql主從配置,實現分離

windows安裝 建議 xid 分布式 唯一標識 -1 在線下載 命令 進行 大型網站為了軟解大量的並發訪問,除了在網站實現分布式負載均衡,遠遠不夠。到了數據業務層、數據訪問層,如果還是傳統的數據結構,或者只是單單靠一臺服務器扛,如此多的數據庫連接操作,數據庫必然會崩潰,