156 lines
5.9 KiB
Markdown
156 lines
5.9 KiB
Markdown
|
You can implement **ProxySQL** on an existing **MariaDB** setup, including an already running master-slave replication configuration. The process involves setting up **ProxySQL** as a proxy layer between your application and the MariaDB servers, and configuring it to route queries intelligently (e.g., read queries to slaves, write queries to the master).
|
|||
|
|
|||
|
Here’s how you can integrate **ProxySQL** with an existing **MariaDB master-slave replication setup**:
|
|||
|
|
|||
|
### Step-by-Step Process to Integrate ProxySQL with Existing MariaDB Setup
|
|||
|
|
|||
|
#### 1. **Verify the Existing MariaDB Setup**
|
|||
|
|
|||
|
Ensure you have the following:
|
|||
|
|
|||
|
- **MariaDB master-slave replication** working.
|
|||
|
- Your **master server** (e.g., `master-db-server`) is accepting write queries.
|
|||
|
- Your **slave servers** (e.g., `slave1-db-server`, `slave2-db-server`) are replicating the data from the master and can handle read queries.
|
|||
|
|
|||
|
If your master-slave replication is set up correctly and you can write to the master and read from the slaves, you can move to the next steps.
|
|||
|
|
|||
|
#### 2. **Install ProxySQL**
|
|||
|
|
|||
|
You can install ProxySQL on a separate server or on the same server as your application. ProxySQL will sit between your application and MariaDB, acting as a load balancer for database queries.
|
|||
|
|
|||
|
##### Install ProxySQL on Ubuntu/Debian:
|
|||
|
|
|||
|
```bash
|
|||
|
sudo apt-get update
|
|||
|
sudo apt-get install proxysql
|
|||
|
```
|
|||
|
|
|||
|
##### Install ProxySQL using Docker:
|
|||
|
|
|||
|
```bash
|
|||
|
docker pull proxysql/proxysql
|
|||
|
docker run -d -p 6033:6033 -p 6032:6032 proxysql/proxysql
|
|||
|
```
|
|||
|
|
|||
|
#### 3. **Connect to ProxySQL Admin Interface**
|
|||
|
|
|||
|
ProxySQL has an admin interface available on port `6032` by default. You’ll need to connect to it to configure the servers and query rules.
|
|||
|
|
|||
|
```bash
|
|||
|
mysql -u admin -p -h 127.0.0.1 -P 6032
|
|||
|
```
|
|||
|
|
|||
|
By default, the admin user is `admin`, and the password is `admin`.
|
|||
|
|
|||
|
#### 4. **Configure the Master and Slave Servers in ProxySQL**
|
|||
|
|
|||
|
Now, you will configure ProxySQL to know about your **MariaDB master** and **slave** servers.
|
|||
|
|
|||
|
1. **Define the servers** in ProxySQL's `mysql_servers` table. Each server is assigned a **hostgroup**. The **master** will be in hostgroup `0`, and the **slaves** will be in hostgroup `1`.
|
|||
|
|
|||
|
```sql
|
|||
|
-- Define the master server
|
|||
|
INSERT INTO mysql_servers (hostgroup_id, hostname, port)
|
|||
|
VALUES (0, 'master-db-server', 3306);
|
|||
|
|
|||
|
-- Define the slave servers
|
|||
|
INSERT INTO mysql_servers (hostgroup_id, hostname, port)
|
|||
|
VALUES (1, 'slave1-db-server', 3306);
|
|||
|
INSERT INTO mysql_servers (hostgroup_id, hostname, port)
|
|||
|
VALUES (1, 'slave2-db-server', 3306);
|
|||
|
```
|
|||
|
|
|||
|
2. **Apply the changes**:
|
|||
|
|
|||
|
```sql
|
|||
|
LOAD MYSQL SERVERS TO RUNTIME;
|
|||
|
SAVE MYSQL SERVERS TO DISK;
|
|||
|
```
|
|||
|
|
|||
|
#### 5. **Create Query Rules for Routing Queries**
|
|||
|
|
|||
|
Next, you need to create rules that define how ProxySQL should route queries:
|
|||
|
|
|||
|
- **Read queries** (`SELECT`) should go to the **slave** servers.
|
|||
|
- **Write queries** (`INSERT`, `UPDATE`, `DELETE`) should go to the **master** server.
|
|||
|
|
|||
|
```sql
|
|||
|
-- Route SELECT queries to slaves (hostgroup 1)
|
|||
|
INSERT INTO mysql_query_rules (active, match_pattern, destination_hostgroup)
|
|||
|
VALUES (1, '^SELECT', 1);
|
|||
|
|
|||
|
-- Route INSERT, UPDATE, DELETE queries to the master (hostgroup 0)
|
|||
|
INSERT INTO mysql_query_rules (active, match_pattern, destination_hostgroup)
|
|||
|
VALUES (1, '^(INSERT|UPDATE|DELETE)', 0);
|
|||
|
|
|||
|
-- Reload the query rules to apply them
|
|||
|
LOAD MYSQL QUERY RULES TO RUNTIME;
|
|||
|
SAVE MYSQL QUERY RULES TO DISK;
|
|||
|
```
|
|||
|
|
|||
|
#### 6. **Set Up the Application to Use ProxySQL**
|
|||
|
|
|||
|
Now that ProxySQL is configured, modify your application's database connection settings to connect to **ProxySQL** instead of directly connecting to the MariaDB servers.
|
|||
|
|
|||
|
Change your application’s database configuration (hostname or connection string) to point to ProxySQL’s IP address and port `6033` (the MySQL protocol port used by ProxySQL):
|
|||
|
|
|||
|
For example, if ProxySQL is running on `192.168.1.100`, your database configuration should look like this:
|
|||
|
|
|||
|
```plaintext
|
|||
|
host=192.168.1.100; port=6033; user=dbuser; password=dbpassword; database=yourdatabase;
|
|||
|
```
|
|||
|
|
|||
|
Now, ProxySQL will:
|
|||
|
|
|||
|
- Route **read queries** (`SELECT`) to the **slave servers**.
|
|||
|
- Route **write queries** (`INSERT`, `UPDATE`, `DELETE`) to the **master server**.
|
|||
|
|
|||
|
#### 7. **Test the Setup**
|
|||
|
|
|||
|
You can now test if the queries are being routed correctly:
|
|||
|
|
|||
|
1. Run a `SELECT` query from your application, and verify it gets routed to one of the **slave servers**.
|
|||
|
2. Run an `INSERT`, `UPDATE`, or `DELETE` query, and verify it gets routed to the **master server**.
|
|||
|
|
|||
|
You can check ProxySQL's internal tables to see the status of servers and query rules:
|
|||
|
|
|||
|
```sql
|
|||
|
-- Check the list of servers
|
|||
|
SELECT * FROM mysql_servers;
|
|||
|
|
|||
|
-- Check the query rules
|
|||
|
SELECT * FROM mysql_query_rules;
|
|||
|
```
|
|||
|
|
|||
|
#### 8. **Monitor ProxySQL**
|
|||
|
|
|||
|
You can monitor ProxySQL's performance and traffic using the admin interface or by querying its runtime state.
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
```sql
|
|||
|
-- Show server status
|
|||
|
SELECT * FROM stats_mysql_connection_pool;
|
|||
|
|
|||
|
-- Show query rules
|
|||
|
SELECT * FROM mysql_query_rules;
|
|||
|
```
|
|||
|
|
|||
|
#### 9. **Optional: Set Up ProxySQL for High Availability**
|
|||
|
|
|||
|
If you want **ProxySQL** to be highly available (HA), you can set up **ProxySQL in a clustered configuration**. ProxySQL supports replication for its configuration database, so you can run multiple ProxySQL instances and synchronize them.
|
|||
|
|
|||
|
For high availability:
|
|||
|
|
|||
|
- Use **ProxySQL replication** to replicate the configuration across multiple ProxySQL instances.
|
|||
|
- Use a **load balancer** (e.g., **HAProxy**) to distribute traffic to the ProxySQL instances.
|
|||
|
|
|||
|
### Conclusion
|
|||
|
|
|||
|
Yes, you can integrate **ProxySQL** with an existing **MariaDB** setup. ProxySQL will:
|
|||
|
|
|||
|
- **Automatically route read and write queries** to the appropriate servers (slaves for reads, master for writes).
|
|||
|
- Help **scale horizontally** by directing traffic to slave servers for read operations and using the master for writes.
|
|||
|
|
|||
|
This setup should work well for your existing MariaDB master-slave configuration without requiring any changes to the database itself, just the addition of ProxySQL to act as an intermediary between your application and the database.
|