MySQL-ProxySQL中間件(一)| ProxySQL基本概念

目錄

MySQL-ProxySQL中間件(一)| ProxySQL基本概念: https://www.cnblogs.com/SQLServer2012/p/10972593.html
? ? MySQL-ProxySQL中間件(二)| Admin Schemas介紹:https://www.cnblogs.com/SQLServer2012/p/10972761.html

ProxySQL

ProxySQL作為一款強大的中間件為MySQL的架構提供了有力的支持。
目前可以很好的支持 Master Slave\ MGR \ PXC等,并提供連接池、讀寫分離、日志記錄等功能,當然還有很多其他實用功能,這里不一一列舉了。
本文都是基礎概念,基本出自官方文檔,官方已經解釋的非常清晰,我就不太多加工,匯總一些實用的分享給大家。

安裝

ProxySQL安裝非常簡單

連接ProxySQL

ProxySQL默認管理端口6032,默認需要127.0.0.1來進入,進入方式和連接MySQL方式一致:?

ProxySQL 運行機制

RUNTIME

RUNTIME表示處理請求的線程使用的ProxySQL的內存數據結構。
runtime variables 包含了:
1.? ? Global variables的實際值
2.? ? 將后端的服務器列表分組到hostgroup中。
3.? ? 讓MySQL 的User們可以連接proxysql
注意:runntime層數據,誰都不能直接修改,必須通過下一層來提交修改。

MEMORY

MEMORY(有時也稱為main)表示通過MySQL兼容接口公開的內存數據庫。 用戶可以將MySQL客戶端連接到此接口,并查詢各種ProxySQL配置表/數據庫。???
通過此接口可用的配置表是:

mysql_servers - ProxySQL連接到的后端服務器列表

mysql_users - 連接到ProxySQL的用戶及其憑據列表。 請注意,ProxySQL也將使用相同的憑據連接到后端服務器!

mysql_query_rules - 將流量路由到各種后端服務器時評估的查詢規則列表。 這些規則還可以重寫查詢,甚至可以緩存已執行查詢的結果。

global_variables - 代理配置使用的全局變量列表,可在運行時調整。

DISK?和?CONFIG FILE

DISK表示磁盤上的SQLite3數據庫,默認位置為$(DATADIR)/proxysql.db。 在重新啟動時,未保留的內存中配置將丟失。 因此,將配置保留在DISK中非常重要。? ?

啟動過程

如果找到數據庫文件(proxysql.db),ProxySQL將從proxysql.db初始化其內存中配置。 因此,磁盤被加載到MEMORY中,然后加載到RUNTIME中。?
如果找不到數據庫文件(proxysql.db)且存在配置文件(proxysql.cfg),則解析配置文件并將其內容加載到內存數據庫中,然后將其保存在proxysql.db中并在加載到RUNTIME。?
請務必注意,如果找到proxysql.db,則不會解析配置文件。 也就是說,在正常啟動期間,ProxySQL僅從持久存儲的磁盤數據庫初始化其內存配置。

? ? 配置文件有4個變量,即使存在proxysql.db,也始終會從配置文件里去解析:

? ? ? ? 1.? ??datadir:

? ? ? ? ? ? ? ?定義了ProxySQL datadir的路徑,其中存儲了數據庫文件,日志和其他文件

? ? ? ? 2.? ??restart_on_missing_heartbeats(1.4.4中的新增內容):

? ? ? ? ? ? ? ?如果MySQL線程錯過了restart_on_missing_heartbeats心跳,則proxysql將引發SIGABRT信號并重新啟動。 默認值為10。?

? ??? ??? ??? ??詳情請見:https://github.com/sysown/proxysql/wiki/Watchdog。

? ? ? ? 3.? ??execute_on_exit_failure(1.4.4中的新增內容):

? ? ? ? ? ? ? ?如果設置,ProxySQL父進程將在每次ProxySQL崩潰時執行定義的腳本。 建議使用此設置生成警報或記錄事件。?

? ??? ??? ??? ??請注意,在崩潰的情況下,proxysql能夠在幾毫秒內重新啟動,因此其他監視工具可能無法檢測到正常故障。

? ? ? ? 4.? ??errorlog(2.0.0中的新增內容):

? ? ? ? ? ? ? ?如果設置,ProxySQL將使用定義的文件作為錯誤日志。 如果未傳遞此類變量,則errolog將位于datadir / proxysql.log中

初始化啟動過程(或--initial)

在初始啟動時,將從配置文件中填充內存和運行時配置。 此后,配置將保留在ProxySQL的嵌入式SQLite數據庫中。?
通過使用--initial標志運行proxysql可以強制重新發生初始配置,這會將SQLite數據庫文件重置為其原始狀態(即配置文件中定義的狀態)并重命名現有的SQLite數據庫文件?
如果需要回滾(如果需要,檢查已定義的數據目錄中的舊文件)。

重新加載啟動(或--reload)

? ??如果使用--reload標志執行proxysql,它會嘗試將配置文件中的配置與數據庫文件的內容合并。 之后,ProxySQL將繼續啟動程序。

? ??如果配置文件和數據庫文件的參數存在沖突,則無法保證ProxySQL將成功管理合并,用戶應始終驗證合并結果是否符合預期。

核心配置表

在運行時修改配置是通過ProxySQL的MySQL管理端口(默認為6032)完成的。?
連接到它后,您將看到一個與MySQL兼容的接口,用于查詢各種與ProxySQL相關的表:
mysql> show tables;
+-------------------+
| tables            |
+-------------------+
| mysql_servers     |
| mysql_users       |
| mysql_query_rules |
| global_variables  |
| mysql_collations  |
| debug_levels      |
+-------------------+

?

? ??每個這樣的表都有明確的定義:

? ??? ??mysql_servers:? ??? ??包含要連接的ProxySQL的后端服務器列表

? ??? ??mysql_users:? ? ? ?? ??包含ProxySQL將用于向后端服務器進行身份驗證的用戶列表

? ??? ??mysql_query_rules:? ??包含用于緩存,路由或重寫發送到ProxySQL的SQL查詢的規則

? ??? ??global_variables:? ??? ??包含在服務器初始配置期間定義的MySQL變量和管理變量

? ??? ??debug_levels:? ? ? ? ?? ??僅用于調試ProxySQL的手動構建

在不同層級間移動配置信息

為了將配置持久化到磁盤或將配置加載到運行時,可以使用一組不同的管理命令,這些命令可以通過管理界面執行。?
一旦理解了三層中的每一層的使用方式,語義都應該清楚。?
連同每個命令的說明,每個命令旁邊都有一個編號選項。 該數字對應于下圖中列出的箭頭

?

要重新配置MySQL用戶,請執行以下命令之一:

[1]? ??LOAD MYSQL USERS FROM MEMORY / LOAD MYSQL USERS TO RUNTIME

? ??將MySQL用戶從MEMORY加載到RUNTIME數據結構,反之亦然

?

[2]? ??SAVE MYSQL USERS TO MEMORY / SAVE MYSQL USERS FROM RUNTIME

? ??將MySQL用戶從RUNTIME保存到MEMORY

?

[3]? ??LOAD MYSQL USERS TO MEMORY / LOAD MYSQL USERS FROM DISK

? ??將持久化的MySQL用戶從磁盤數據庫加載到MEMORY

?

[4]? ??SAVE MYSQL USERS FROM MEMORY / SAVE MYSQL USERS TO DISK

? ??將MySQL用戶從MEMORY中保存到DISK

?

[5]? ??LOAD MYSQL USERS FROM CONFIG

? ??從配置文件加載用戶到MEMORY

? ??常用的命令參考:

LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;LOAD ADMIN VARIABLES TO RUNTIME;
SAVE ADMIN VARIABLES TO DISK;注意:關鍵字MEMORY/RUNTIME 都支持縮寫:
MEM for MEMORY
RUN for RUNTIME

?

故障排除

請注意,只有在將值加載到運行時才會進行最終驗證。?
可以設置一個值,該值在保存到內存時不會引發任何類型的警告或錯誤,甚至可以保存到磁盤。
但是,當執行加載到運行時,會自動將更改恢復為先前已經保存的狀態。?
如果發生這種情況,應該檢查定義的錯誤日志文件:
例如:
[WARNING] Impossible to set variable monitor_read_only_interval with value "0". Resetting to current "1500".? ??

常用的一些命令技巧

1.? ??限制ProxySQL到后端MySQL的連接數通過權重,來控制ProxySQL到后端MySQL的訪問量

權重只作用在同一個hostgroup中有效

?

2.? ??自動回避復制延遲較大的節點

如果服務器將max_replication_lag設置為非零值,則Monitor模塊會定期檢查復制延遲? ??
下圖中,當172.16.0.3的復制延遲超過了30秒會自動回避,設置max_replication_lag = 0,代表不檢查復制延遲 。
注意,max_replication_lag主要來源Seconds_Behind_Master,該參數判斷延遲準確性不高,顧個人建議為參考功能。

3.? ??Master Slave,將Master作為Slave的備用讀節點

在下面的示例中,如果我們將HG1配置為提供讀請求,則99.95%的請求將發送到172.16.0.2和172.16.0.3,而0.05%的請求將正常發送到172.16.0.1。?
如果172.16.0.2和172.16.0.3不可用,172.16.0.1將獲取所有讀取請求。

? ?注意:max_replication_lag僅適用于從節點。 如果服務器未啟用復制,則Monitor不會執行任何操作。

4.? ??優雅的禁用后端Server

要正常禁用后端服務器,需要將其狀態更改為OFFLINE_SOFT。?
不會影響當前的活動事務和連接,但不會向該節點發送新流量。

5.? ??立即禁用后端Server

要立即禁用后端服務器,需要將其狀態更改為OFFLINE_HARD。 所有當前請求將立即終止,并且不會發送新請求。
172.18.0.1 設置了OFFLINE_HARD 會立刻中斷當前的請求。

6.? ? 重新啟用脫機/禁用后端Server

要在離線后端重新啟用,將其狀態更改回ONLINE就可以了

7.? ??刪除后端Server

注意:
在內部,刪除后端或將其設置為OFFLINE_HARD的方式相同。?
當執行LOAD MYSQL SERVERS TO RUNTIME時,Hostgroup_Manager將檢測到后端服務器已被刪除,并在內部將其標記為OFFLINE_HARD。? ?

8.? ??將明文密碼轉換成Hash密碼,配置到ProxySQL中的mysql_users表?

mysql_users表,支持明文密碼和Hash密碼的寫入,但生產環境,我們還是建議用Hash密碼。
將明文密碼轉換Hash密碼有兩種方式:
1.? ? 通過PASSWORD()
該函數生成Hash密碼,但該函數ProxySQL是不支持的,需要在MySQL數據庫里自行生成,再粘貼加密后的密碼插入到ProxySQL中。
2.? ? 通過變量:admin-hash_passwords(推薦)
此參數默認開啟,明文密碼存放到MEMORY的mysql_user中,一旦load到RUNTIME會自動HASH加密。
然后再SAVE回MEMORY/DISK即可完成明文到Hash密碼的轉換

9.? ??限制User和ProxySQL之間的連接數

10.? ??同個事務內的SQL,禁止被路由到不同節點上

啟動事務后,可能會根據查詢規則將某些查詢發送到其他主機組。 為了防止這種情況發生,可以開啟transaction_persistent
? ??
還有很多沒有總結,一點點來,基礎知識梳理完成,會對核心功能再進行測試說明,希望對需要的同學有幫助

轉載于:https://www.cnblogs.com/SQLServer2012/p/10972593.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387636.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387636.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387636.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

01 ftp上傳簡單示例服務端

import json import socket import structserver socket.socket() server.bind((127.0.0.1,8001)) server.listen() conn,addr server.accept()#首先接收文件的描述信息的長度 struct_data_len conn.recv(4) data_len struct.unpack(i,struct_data_len)[0]# 通過文件信息的…

標簽td設置隱藏(hidden)

這樣設置這個td就不會被其他的td給擠掉了! 還有一種方法就是把tr標簽的solid設置為0px 這個方法把td標簽的left,right,bottom,top的邊框的solid全部設置為0px;轉載于:https://www.cnblogs.com/tranquilityMan/p/10972811.html

Windows Server 2008 NFS

打開Windows Server 2008的Dos運行窗口(不是powershell),然后鍵入: servermanagercmd.exe -install FS-NFS-Services 安裝完畢之后,就要把NFS的存貯映射到Windows Server 2008上某個盤符以供使用,但為了…

金融反欺詐模型----項目實戰--機器學習

機器學習:從源數據清洗到特征工程建立談金融反欺詐模型訓練 本文旨在通過一個完整的實戰例子,演示從源數據清洗到特征工程建立,再到模型訓練,以及模型驗證和評估的一個機器學習的完整流程。由于初識機器學習,會比較多的…

快餐文化短視頻源碼行業競爭激烈,短視頻發展任重道遠

隨著移動互聯技術的興起,形式多樣的短視頻源碼軟件為受眾開辟了短視頻時代,賦予視頻以新的時代內涵。梨視頻、美拍、快手、抖音等APP充斥了人們的生活,因此不少人群對視頻軟件產生了依賴感。短視頻源碼APP行業發展至今,產品和營運…

Win7下如何掛載NFS共享目錄

NFS是Unix中廣泛使用的文件共享協議,在Linux下得到了傳承,使用簡單,讀寫性能強大。過去Windows與Linux共享文件夾需要使用Samba(CIFS)協議,雖然定制性更高,但設置和使用都比較繁瑣。Windows 7加…

使用Chrome瀏覽器自動下載文件并保存到指定的文件路徑(使用Selenium更改Chrome默認下載存儲路徑)...

https://blog.csdn.net/zbj18314469395/article/details/81207268轉載于:https://www.cnblogs.com/person008/p/10980964.html

vue 源碼學習(一) 目錄結構和構建過程簡介

Flow vue框架使用了Flow作為類型檢查,來保證項目的可讀性和維護性。vue.js的主目錄下有Flow的配置.flowconfig文件,還有flow目錄,指定了各種自定義類型。 在學習源碼前可以先看下Flow的語法 官方文檔 目錄結構 vue.js源碼主要在src下 src ├─…

count慢的問題解決

SELECT count(*) FROM (SELECT DISTINCT DMPNN.ID AS NEED_ID, V2 VDMPSX, DMPNN.DMP_NUM AS DMPNN_NUM, DTT.TASK_ID AS TASK_ID, /*任務ID*/ (SELECT NVL(TO_CHAR(workload),) FROM DMP_ALLOCATION_NEED_RESULT dnr WHERE dnr.anr_id DTT.Anr_Id ) GUIBANWORKLOAD, …

SpringBoot + MyBatis(注解版),常用的SQL方法

一、新建項目及配置 1.1 新建一個SpringBoot項目&#xff0c;并在pom.xml下加入以下代碼 <dependency>    <groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.1</vers…

項目進行JVM調優 Jconsole

最近對公司的項目進行JVM調優&#xff0c;使用了JDK自帶的jconsole查看Tomcat運行情況&#xff0c;記錄下配置以便以后參考&#xff1a; 首先&#xff0c;修改Tomcat的bin目錄下的catalina.bat文件&#xff0c;在JAVA_OPTS變量中添加下面四行&#xff0c;即可 set JAVA_OPTS %J…

ECharts 點擊非圖表區域的點擊事件不觸發問題

1. 通過 myChart.getZr().on(click, fn) 監聽整個圖表的點擊事件&#xff0c;注冊回調 myChart.getZr().on(click, () > {//拿到index即可取出被點擊數據的所有信息console.log(clickIndex) }) 2. 在 tooltip 的 formatter 函數中&#xff0c;每次調用都記錄下需要的參數&am…

強大的django-debug-toolbar,django項目性能分析工具

強大的django-debug-toolbar,django項目性能分析工具 給大家介紹一個用于django中debug模式下查看網站性能等其他信息的插件django-debug-toolbar 首先安裝 pip install django-debug-toolbar 接下來在自己django項目中的settings中添加配置 INSTALLED_APPS [debug_toolbar,]M…

個人作業——軟件工程實踐總結

一、請回望暑假時的第一次作業&#xff0c;你對于軟件工程課程的想象 1&#xff09;對比開篇博客你對課程目標和期待&#xff0c;“希望通過實踐鍛煉&#xff0c;增強計算機專業的能力和就業競爭力”&#xff0c;對比目前的所學所練所得&#xff0c;在哪些方面達到了你的期待和…

利用jdk自帶的運行監控工具JConsole觀察分析Java程序的運行 Jtop

利用jdk自帶的運行監控工具JConsole觀察分析Java程序的運行 原文鏈接 一、JConsole是什么 從Java 5開始 引入了 JConsole。JConsole 是一個內置 Java 性能分析器&#xff0c;可以從命令行或在 GUI shell 中運行。您可以輕松地使用 JConsole&#xff08;或者&#xff0c;它更高端…

java版電子商務spring cloud分布式微服務b2b2c社交電商:服務容錯保護(Hystrix斷路器)...

斷路器斷路器模式源于Martin Fowler的Circuit Breaker一文。“斷路器”本身是一種開關裝置&#xff0c;用于在電路上保護線路過載&#xff0c;當線路中有電器發生短路時&#xff0c;“斷路器”能夠及時的切斷故障電路&#xff0c;防止發生過載、發熱、甚至起火等嚴重后果。在分…

微信小程序頁面跳轉、邏輯層模塊化

一、頁面的跳轉 微信小程序的頁面跳轉函數方法有兩個&#xff0c;另外還有兩種模塊跳轉方式。 函數跳轉&#xff1a; 1.wx.navigateTo(OBJECT)&#xff1a; wx.navigateTo({url: test?id1})//保留當前頁面&#xff0c;跳轉到應用內的某個頁面&#xff0c;使用wx.navigateBack可…

java內存溢出分析工具:jmap使用實戰

java內存溢出分析工具&#xff1a;jmap使用實戰 在一次解決系統tomcat老是內存撐到頭&#xff0c;然后崩潰的問題時&#xff0c;使用到了jmap。 1 使用命令 在環境是linuxjdk1.5以上&#xff0c;這個工具是自帶的&#xff0c;路徑在JDK_HOME/bin/下 jmap -histo pid>a.log…

Oracle加密解密

Oracle內部有專門的加密包&#xff0c;可以很方便的對內部數據進行加密&#xff08;encrypt&#xff09;和解密&#xff08;decrypt&#xff09;. 介紹加密包之前&#xff0c;先簡單說一下Oracle基本數據類型——RAW類型。 RAW&#xff0c;用于保存位串的數據類型&#xff0c;類…

條件變量 sync.Cond

sync.Cond 條件變量是基于互斥鎖的&#xff0c;它必須有互斥鎖的支撐才能發揮作用。 sync.Cond 條件變量用來協調想要訪問共享資源的那些線程&#xff0c;當共享資源的狀態發生變化的時候&#xff0c;它可以用來通知被互斥鎖阻塞的線程條件變量的初始化離不開互斥鎖&#xff0c…