HighLoad++ 2017
Зал «Кейптаун», 8 ноября, 14:00
Тезисы:
http://www.highload.ru/2017/abstracts/3114.html
ProxySQL aims to be the most powerful proxy in the MySQL ecosystem. It is protocol-aware and able to provide high availability (HA) and high performance with no changes in the application, using several built-in features and integration with clustering software. During this session we will quickly introduce its main features, so to better understand how it works. We will then describe multiple use case scenarios in which ProxySQL empowers large MySQL installations to provide HA with zero downtime, read/write split, query rewrite, sharding, query caching, and multiplexing using SSL across data centers.
2. Who we are
• Alkin Tezuysal
Sr. Technical Manager, Percona
@ask_dba, https://www.linkedin.com/in/askdba/
• René Cannaò
MySQL SRE, Dropbox / ProxySQL
@proxysql
4. Other Sessions
• 156. Inexpensive Datamasking for MySQL with
ProxySQL — Data Anonymization for Developers /
Rene Cannao (ProxySQL)
• 273. ProxySQL, MaxScale, MySQL Router and other
database traffic managers / Petr Zaitsev (Percona)
5. Top 5 reasons to use ProxySQL
• Improve database operations.
• Understand and solve performance issues.
• Create a proxy layer to shield the database.
• Add High-Availability to database topology.
• Empower the DBAs with great tool.
7. Use case overview - Scalability
Connection Pooling
and Multiplexing
Add connection
pooling layer
Reduce
connection
thread overhead
Read / Write Split
More scalability
for any MySQL
topology
Must for any
heavy workloads
Read / Write
Sharding
Effortless
sharding
implementation
Without Dev.
support and cost
savings
8. Use case overview - High Availability
Seamless Failover
Gracef
ul failover
support
Query rerouting
Load Balancing
Allows easy
scaling
For better
utilization of
servers
Cluster Aware
Supports
PXC/Galera
implementations
Small footprint
for big gain
9. Use case overview - Advanced
Queries
Query caching Cache frequently
used data
Adds another
cache layer
Query rewrite Add SQL
flexibility
Faster problem
solving
Query blocking Add database
aware firewall
Without App.
support
10. Use case overview - Advanced
Queries
Query mirroring
Audit, Analyze,
Review, Cache
Warming
Allow
benchmarking on
live data
Query throttling
Set prioritization
for important
queries
Allows manual
intervention to
problem queries
Query timeout Add another
timeout layer
Flexible query
level timeout
11. Use case overview - Manageability
Admin Utility Authentication
support
Limit user access
to database pool
Runtime
reconfiguration
On the fly
modifications
Configure
database without
restart or
downtime
Monitoring Stats collection
and reporting
Investigate
database
workload
12. Scalability with ProxySQL -
Connection Pooling
• Any application without persistent connection to database
• PHP applications to be specific without built in connection pool
Application MySQLProxySQL
• Reduces number of new connections to the database
13. Scalability with ProxySQL -
Connection Pooling and SSL
https://www.percona.com/blog/2017/09/19/proxysql-improves-mysql-ssl-connections/
14. Scalability with ProxySQL –
Connection Multiplexing
• Any application with persistent connection to database
• Java applications to be specific with built in connection pools
Application
Pool
MySQL
• Reduce connections similar to Aurora
• Tested performed with 300K database connections
Application
PoolApplication
Pool
ProxySQL
15. Advanced Queries with ProxySQL –
Filter ORM useless requests
• PING
• SELECT 1
• USE schemaname
• SET autocommit=0
• ROLLBACK
• SET NAMES
They drastically increase latency
16. Advanced Queries with ProxySQL –
Filter ORM useless requests
https://www.percona.com/blog/2017/09/01/life360-used-proxysql-lower-database-load/
Hundreds of millions of PINGs per day, down to 0
17. Scalability with ProxySQL -
Read/Write Split
• On the fly Read / Write implementation
• Use read_only flag to switch traffic
Application
MySQL Master
• Load balancing made easy
MySQL
Slave
Write hostgroups
Read hostgroups MySQL
Slave
18. Scalability with ProxySQL – User and
schema level sharding
• Granular sharding per username and schema
• Backend pooling based on user activity to specific schema
Application
User A
ProxySQL
• Use advanced sharding to parallelize queries
• Scale beyond the sharding per host limitations.
https://www.percona.com/blog/2016/08/30/mysql-sharding-with-proxysql/
Application
User B
MySQL
Master
MySQL
Slave
MySQL
Master
MySQL
Slave
MySQL
Master
MySQL
Slave
19. MySQL SlaveMySQL Master
High Availability with ProxySQL –
Seamless failover
• Neither VIP setup nor service discovery needed
• Use read_only flag to switch traffic
Application
Pool
MySQL Master
• Integration with other HA Managers
Application
PoolApplication
Pool
ProxySQL
20. High Availability with ProxySQL –
Improve Multi DC implementation
• No connection pools latency on SSL connections.
• Costly delays across the water.
MySQL MasterProxySQL
MySQL Master
ProxySQL
Application
DC1
DC2
21. High Availability with ProxySQL –
Adoption to Clustering
• PXC / Galera / Group Replication MySQL
ProxySQL
•
ProxySQL
Application
Node 1
Application
Application
MySQL
Node 2
MySQL
Node 3
22. Advanced Queries with ProxySQL –
Caching
• Improve performance on read intensive workloads
• Reduce slave provisioning
Application A
ProxySQL
• Improved query cache over default implementation
• Query aware caching over general caching
Application B
MySQL
Master
MySQL
Slave
MySQL
Slave
MySQL
Slave
Cache
MySQL
Slave
MySQL
Slave
23. Advanced Queries with ProxySQL –
Query Timeout
• Built in query killer a.k.a query sniper
• Adjustable threshold based on query rule
Application A
ProxySQL
• No idle or long running queries
Application B
MySQL
Master
MySQL
Slave
MySQL
Slave
MySQL
Slave
Query
Timeouts
MySQL
Slave
MySQL
Slave
24. Advanced Queries with ProxySQL –
Firewall
• Protect database from unwanted traffic
• Stop unwanted user, account , application (new code)
Application A
ProxySQL
• Fast modification to database behavior
• Added protection for DDOS and other attacks.
Application B
Query
Blocking
MySQL
Master
MySQL
Slave
MySQL
Master
MySQL
Slave
MySQL
Master
MySQL
Slave
25. Advanced Queries with ProxySQL –
Query rewrite engine
• Most wanted feature by DBAs
• Rewrite queries overloading the database on the fly.
Application A
ProxySQL
• Simply buy time until application can be modified
Application B
MySQL
Master
MySQL
Slave
MySQL
Slave
MySQL
Slave
Query
Rewriting
MySQL
Slave
MySQL
Slave
26. Advanced Queries with ProxySQL –
Query retry
• Server failures or maintenance do not loose a query.
• Fails over and resubmits the query to another host.
Application A
ProxySQL
• Improved operation and new way of handling slaves.
Application B
MySQL
Master
MySQL
Slave
MySQL
Slave
MySQL
Slave
Query
Retry
MySQL
Slave
MySQL
Slave
27. Advanced Queries with ProxySQL –
Query routing
• Selective routing based on importance.
• Use metrics based on stats_mysql_query_digest and decide
Application A
ProxySQL
• Go beyond read/write split.
Application B
MySQL
Master
MySQL
Slave
MySQL
Slave
MySQL
Slave
Query
Routing
MySQL
Slave
MySQL
Slave
28. Advanced Queries with ProxySQL –
Query mirroring
• Mirror incoming queries to different back ends
• Use it for audit, analytics, cache warming, benchmarking.
Application A
ProxySQL
Application B
Query
Mirroring
MySQL
Master
Host A
Host B
MySQL
Slave
MySQL
Master
MySQL
Slave
30. Clustered ProxySQL at scale
Tested with:
● 8 app servers with 3k clients’ connections each (24k total)
● 4 middle layer proxysqls processing 4k connections each from local
proxysqls (16k total)
● 256 backends/shard (meaning 256 routing rules) processing 600
connections each (150k total)
Single ProxySQL was tested with up to 1MM connections
At today, ProxySQL is able to process up to 750k QPS
31. Advanced Queries with ProxySQL
Query caching Query Timeout
Query Retry
Query Blocking
Query Routing
and Mirroring