ProxySQL读写分离从配置到使用
在美团点评DBProxy读写分离使用说明文章中已经说明了使用目的,本文介绍ProxySQL的使用方法以及和DBProxy的性能差异。具体的介绍可以看官网的相关说明,并且这个中间件也是percona推的一款中间件。其特性和其他读写分离的中间件差距不大,具体的会在文中介绍。本文大致简单的介绍在使用过程中的一些说明,也可以看官方的wiki获得使用帮助。
环境:
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04Codename: trusty
下载
percona站点:
https://www.percona.com/downloads/proxysql/
github/官网:
https://github.com/sysown/proxysql/releases
我们首先看一下自己的环境:
master:172.16.16.35:3306slave:172.16.16.35:3307slave:172.16.16.34:3307
MHA manager在172.16.16.34,配置文件如下:
[root@localhost bin]# cat /etc/masterha/app1.cnf [server default] manager_log=/var/log/mha/app1/manager.log manager_workdir=/var/log/mha/app1.log master_binlog_dir=/home/mysql/db3306/log/master_ip_failover_script=/usr/local/bin/master_ip_failover master_ip_online_change_script=/usr/local/bin/master_ip_online_change password=123456ping_interval=1remote_workdir=/tmp repl_password=123456repl_user=root report_script=/usr/local/bin/send_report shutdown_script=""ssh_user=root user=root [server1] hostname=172.16.16.35port=3306[server2] candidate_master=1check_repl_delay=0hostname=172.16.16.34port=3306[server3] hostname=172.16.16.35port=3307
[root@localhost bin]# sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm[root@localhost bin]# yum install proxysql
Installed: proxysql.x86_64 0:1.3.7-1.1.el6 Complete!
[root@localhost bin]# find / -name proxysql/var/lib/proxysql/var/run/proxysql/etc/rc.d/init.d/proxysql/usr/bin/proxysql
[root@localhost bin]# cat /etc/proxysql-admin.cnf # proxysql admin interface credentials. export PROXYSQL_USERNAME="admin"export PROXYSQL_PASSWORD="admin"export PROXYSQL_HOSTNAME="localhost"export PROXYSQL_PORT="6032" # PXC admin credentials for connecting to pxc-cluster-node. export CLUSTER_USERNAME="admin"export CLUSTER_PASSWORD="admin"export CLUSTER_HOSTNAME="localhost"export CLUSTER_PORT="3306" # proxysql monitoring user. proxysql admin script will create this user in pxc to monitor pxc-nodes. export MONITOR_USERNAME="monitor"export MONITOR_PASSWORD="monit0r" # Application user to connect to pxc-node through proxysql export CLUSTER_APP_USERNAME="proxysql_user"export CLUSTER_APP_PASSWORD="passw0rd" # ProxySQL read/write hostgroup export WRITE_HOSTGROUP_ID="10"export READ_HOSTGROUP_ID="11" # ProxySQL read/write configuration mode. export MODE="singlewrite"
[root@localhost bin]# proxysql-admin --config-file=/etc/proxysql-admin.cnf --enable This script will assist with configuring ProxySQL (currently only Percona XtraDB cluster in combination with ProxySQL is supported) ProxySQL read/write configuration mode is singlewrite ProxySQL is not running; please start the proxysql service
[root@localhost bin]# service proxy proxy proxysql proxysql-admin proxysql_galera_checker proxysql_node_monitor [root@localhost bin]# service proxysql start Starting ProxySQL: DONE![root@localhost bin]# mysql -uadmin -padmin -h127.0.0.1 -P6032 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1Server version: 5.7.14 (ProxySQL Admin Module) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
[root@localhost bin]# find / -name proxysql.cnf/etc/proxysql.cnf
[root@localhost bin]# mysql -uadmin -padmin -h127.0.0.1 -P6032 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2Server version: 5.7.14 (ProxySQL Admin Module) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases;+-----+---------+-------------------------------+ | seq | name | file | +-----+---------+-------------------------------+ | 0 | main | | | 2 | disk | /var/lib/proxysql/proxysql.db | | 3 | stats | | | 4 | monitor | | +-----+---------+-------------------------------+4 rows in set (0.00 sec) mysql> use admin Database changed mysql> show tables;+--------------------------------------+ | tables | +--------------------------------------+ | global_variables | | mysql_collations | | mysql_query_rules | | mysql_replication_hostgroups | | mysql_servers | | mysql_users | | runtime_global_variables | | runtime_mysql_query_rules | | runtime_mysql_replication_hostgroups | | runtime_mysql_servers | | runtime_mysql_users | | runtime_scheduler | | scheduler | +--------------------------------------+13 rows in set (0.00 sec)
mysql> insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(100,'172.16.16.35',3306,1,1000,10,'test'); Query OK, 1 row affected (0.00 sec) mysql> insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(101,'172.16.16.34',3306,1,1000,10,'test'); Query OK, 1 row affected (0.00 sec) mysql> insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(101,'172.16.16.35',3307,1,1000,10,'test'); Query OK, 1 row affected (0.00 sec) mysql> select * from mysql_servers;+--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ | hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | +--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ | 100 | 172.16.16.35 | 3306 | ONLINE | 1 | 0 | 1000 | 10 | 0 | 0 | test | | 101 | 172.16.16.34 | 3306 | ONLINE | 1 | 0 | 1000 | 10 | 0 | 0 | test | | 101 | 172.16.16.35 | 3307 | ONLINE | 1 | 0 | 1000 | 10 | 0 | 0 | test | +--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+3 rows in set (0.00 sec)
mysql> insert into mysql_replication_hostgroups values(100,101,'masterha') ; Query OK, 1 row affected (0.00 sec) mysql> select * from mysql_replication_hostgroups;+------------------+------------------+----------+ | writer_hostgroup | reader_hostgroup | comment | +------------------+------------------+----------+ | 100 | 101 | masterha | +------------------+------------------+----------+1 row in set (0.00 sec)
mysql> GRANT SUPER, REPLICATION CLIENT ON *.* TO 'proxysql'@'172.16.16.%' IDENTIFIED BY 'proxysql'; Query OK, 0 rows affected, 1 warning (0.09 sec) mysql> flush privileges; Query OK, 0 rows affected (0.10 sec)
mysql> set mysql-monitor_username='proxysql'; Query OK, 1 row affected (0.00 sec) mysql> set mysql-monitor_password='proxysql'; Query OK, 1 row affected (0.00 sec) mysql> load mysql variables to runtime; Query OK, 0 rows affected (0.00 sec) mysql> save mysql variables to disk; Query OK, 74 rows affected (0.02 sec)
mysql> insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent) values('root','123456',1,100,1); Query OK, 1 row affected (0.00 sec) mysql> select * from mysql_users;+----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ | username | password | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections | +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ | root | 123456 | 1 | 0 | 100 | NULL | 0 | 1 | 0 | 1 | 1 | 10000 | +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+1 row in set (0.00 sec)
mysql> load mysql servers to runtime; Query OK, 0 rows affected (0.01 sec) mysql> save mysql servers to disk; Query OK, 0 rows affected (0.08 sec) mysql> load mysql users to runtime; Query OK, 0 rows affected (0.00 sec) mysql> save mysql users to disk; Query OK, 0 rows affected (0.03 sec)
mysql> INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT.*FOR UPDATE$',100,1); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT',101,1); Query OK, 1 row affected (0.00 sec) mysql> LOAD MYSQL QUERY RULES TO RUNTIME; Query OK, 0 rows affected (0.00 sec) mysql> SAVE MYSQL QUERY RULES TO DISK; Query OK, 0 rows affected (0.04 sec)
[root@localhost ~]# mysql -uroot -p123456 -h172.16.16.34 -P6033 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 22Server version: 5.7.14 (ProxySQL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> select * from maxiangqian.test;+-----+------+ | id | name | +-----+------+ | 1 | qq | | 2 | qq | | 4 | aa | | 11 | a | | 111 | a | +-----+------+5 rows in set (0.04 sec)
mysql> select * from stats_mysql_query_digest;
mysql> select @@server_id;+-------------+ | @@server_id | +-------------+ | 353307 | +-------------+1 row in set (0.01 sec)
mysql> select * from maxiangqian.test for update;+-----+------+ | id | name | +-----+------+ | 1 | qq | | 2 | qq | | 4 | aa | | 11 | a | | 111 | a | +-----+------+5 rows in set (0.00 sec)
mysql> select * from stats_mysql_query_digest;
Atas ialah kandungan terperinci ProxySQL读写分离从配置到使用. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara menggunakan PHP untuk melaksanakan fungsi caching data dan baca-tulis Caching ialah cara penting untuk meningkatkan prestasi sistem Melalui caching, data yang kerap digunakan boleh disimpan dalam memori untuk meningkatkan kelajuan membaca data. Dalam PHP, kita boleh menggunakan pelbagai kaedah untuk melaksanakan caching data dan fungsi baca dan tulis. Artikel ini akan memperkenalkan dua kaedah biasa: menggunakan cache fail dan menggunakan cache memori. 1. Gunakan caching fail. Caching fail menyimpan data dalam fail untuk bacaan seterusnya. Berikut ialah kod sampel yang menggunakan caching fail untuk membaca dan menulis data:

Cara menggunakan sistem modul dalam Java 9 untuk memisahkan dan mengasingkan kod Memandangkan skala perisian terus berkembang, kerumitan kod terus meningkat. Untuk mengatur dan mengurus kod dengan lebih baik, Java9 memperkenalkan sistem modul. Kemunculan sistem modul menyelesaikan masalah kebergantungan pakej tradisional, menjadikan pengasingan dan pengasingan kod lebih mudah dan lebih fleksibel. Artikel ini akan memperkenalkan cara menggunakan sistem modul dalam Java 9 untuk mencapai pengasingan dan pengasingan kod. 1. Definisi modul Dalam Java9, kita boleh menggunakan kata kunci modul untuk mentakrifkan

Tajuk: Cadangan tentang pemilihan teknologi bahagian hadapan dalam pembangunan pemisahan bahagian hadapan dan belakang Golang Memandangkan kerumitan dan keperluan aplikasi web terus meningkat, model pembangunan pemisahan bahagian hadapan dan belakang menjadi semakin popular. Dalam model pembangunan ini, bahagian belakang bertanggungjawab untuk memproses logik perniagaan, dan bahagian hadapan bertanggungjawab untuk memaparkan halaman dan berinteraksi dengan pengguna yang berkomunikasi melalui API. Untuk pasukan pembangunan yang menggunakan Golang sebagai bahasa bahagian belakang, memilih teknologi bahagian hadapan yang betul adalah penting. Artikel ini akan membincangkan teknologi bahagian hadapan yang disyorkan untuk dipilih dalam pembangunan bahagian hadapan dan bahagian belakang yang berasingan di Golang, dan

Concept fio, juga dikenali sebagai FlexibleIOTester, ialah aplikasi yang ditulis oleh JensAxboe. Jens ialah penyelenggara blockIOsubsystem dalam LinuxKernel. FIO ialah alat yang digunakan untuk menguji sistem fail rangkaian dan prestasi cakera Ia sering digunakan untuk mengesahkan model mesin dan membandingkan prestasi sistem fail. Ia secara automatik menghantar arahan fio ke senarai mesin kluster dan mengumpul IOPS untuk fail kecil dan data pemprosesan untuk fail besar. rw=[mode]rwmixwrite=30 Dalam mod baca dan tulis bercampur, menulis akaun untuk 30% baca berurutan baca tulis berurutan tulis baca tulis berurutan bercampur baca dan tulis randwrite tulis rawak r

API Sistem Fail Prinsip dalaman operasi fail Java berkait rapat dengan API sistem fail sistem pengendalian. Di Java, operasi fail disediakan oleh modul java.nio.file dalam pakej java.NIO. Modul ini menyediakan enkapsulasi API sistem fail, membenarkan pembangun Java menggunakan API bersatu untuk melaksanakan operasi fail pada sistem pengendalian yang berbeza. Objek Fail Apabila program Java perlu mengakses fail, ia perlu mencipta objek java.nio.file.Path terlebih dahulu. Objek Path mewakili laluan dalam sistem fail, yang boleh menjadi laluan mutlak atau laluan relatif. Setelah objek Path dicipta, anda boleh menggunakannya untuk mendapatkan pelbagai sifat fail, seperti nama

Pembangun PHP sering menghadapi operasi pangkalan data semasa proses pembangunan laman web Sebagai sistem pengurusan pangkalan data yang sangat popular, pemisahan baca-tulis MySQL adalah salah satu cara penting untuk meningkatkan prestasi laman web. Dalam pembangunan PHP, melaksanakan pemisahan baca-tulis MySQL boleh meningkatkan keupayaan akses serentak tapak web dan pengalaman pengguna. Artikel ini akan memperkenalkan secara terperinci kaedah pelaksanaan pemisahan baca-tulis MySQL, dan menyediakan contoh kod PHP khusus untuk membantu pembangun PHP lebih memahami dan menggunakan fungsi pemisahan baca-tulis. Apakah yang dibaca oleh MySQL

Menyahsulit kaedah membaca dan menulis untuk memproses fail DBF dalam Java DBF (dBaseFile) ialah format fail pangkalan data biasa yang biasanya digunakan untuk menyimpan data jadual. Dalam program Java, pemprosesan membaca dan menulis fail DBF adalah keperluan yang agak biasa. Artikel ini akan memperkenalkan cara menggunakan Java untuk menyahsulit proses ini dan memberikan contoh kod khusus. 1. Membaca fail DBF Di Java, membaca fail DBF biasanya memerlukan bantuan perpustakaan pihak ketiga, seperti perpustakaan dbfread. Pertama, anda perlu mengkonfigurasi projek

Bagaimana untuk meningkatkan kelajuan akses laman web Java melalui pemisahan sumber statik? Dengan perkembangan pesat Internet, semakin ramai orang menggunakan laman web untuk mendapatkan maklumat dan berkomunikasi. Untuk tapak web Java, kelajuan akses adalah penting, yang secara langsung mempengaruhi pengalaman pengguna dan kejayaan tapak web. Antaranya, kelajuan memuatkan sumber statik adalah salah satu faktor penting yang mempengaruhi kelajuan capaian laman web. Artikel ini akan memperkenalkan cara untuk meningkatkan kelajuan akses tapak web Java melalui pengasingan sumber statik. Apakah sumber statik? Pertama, kita perlu menjelaskan apa itu sumber statik.
