Кластер ProxySQL несовместим с внутренними базами данных
У меня есть следующие настройки:
ProxySQl работает на 10.254.254.100, 10.254.254.10, 10.254.254.20 и 10.254.254.3
MariaDB (Galera Cluster) работает на 10.254.254.10, 10.254.254.20 и 10.254.254.30
MySQL [(none)]> select * from mysql_servers;
+--------------+---------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+---------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| 10 | 10.254.254.10 | 3306 | ONLINE | 1 | 1 | 10000 | 0 | 0 | 0 | |
| 20 | 10.254.254.10 | 3306 | ONLINE | 1 | 1 | 10000 | 0 | 0 | 0 | |
| 20 | 10.254.254.20 | 3306 | ONLINE | 1 | 1 | 10000 | 0 | 0 | 0 | |
| 20 | 10.254.254.30 | 3306 | ONLINE | 1 | 1 | 10000 | 0 | 0 | 0 | |
+--------------+---------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
MySQL [(none)]> select * from proxysql_servers;
+----------------+------+--------+---------+
| hostname | port | weight | comment |
+----------------+------+--------+---------+
| 10.254.254.100 | 6032 | 0 | core |
| 10.254.254.10 | 6032 | 0 | ny1 |
| 10.254.254.20 | 6032 | 0 | ny2 |
| 10.254.254.30 | 6032 | 0 | ny3 |
+----------------+------+--------+---------+
Мое приложение работает на 10.254.254.100. Он подключается к ProxySQL на 127.0.0.1:6033.
Приложение успешно создает таблицы в существующей базе данных. Эти таблицы распространяются на все экземпляры ProxySQL и на все базовые экземпляры MariaDB.
Приложение обращается к пользователю, созданному с группой хостов по умолчанию 10.
MySQL [(none)]> show mysql users;
+---------------+-------------------------------------------+--------+---------+-------------------+--------------------+---------------+------------------------+--------------+---------+----------+-----------------+
| username | password | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections |
+---------------+-------------------------------------------+--------+---------+-------------------+--------------------+---------------+------------------------+--------------+---------+----------+-----------------+
| w***********e | *F973E314*********516F47DE083E1DB6B1DD706 | 1 | 0 | 10 | information_schema | 0 | 0 | 0 | 1 | 1 | 10000 |
| w**********t | *E***********9F08EE68900E7F2676FB91956960 | 1 | 0 | 10 | information_schema | 0 | 0 | 0 | 1 | 1 | 10000 |
| w***********n | *0C2C6C3311F09BE95ACFBC28*************49E | 1 | 0 | 10 | information_schema | 0 | 0 | 0 | 1 | 1 | 10000 |
+---------------+-------------------------------------------+--------+---------+-------------------+--------------------+---------------+------------------------+--------------+---------+----------+-----------------+
Однако: когда в таблице создается строка (например, приложение сохраняет новую запись пользователя), эти данные отправляются только на базовый сервер в его группе узлов (т. Е. На сервер 10.254.254.10).
Так что я остался в состоянии, когда все четыре экземпляра ProxySQL имеют правильную информацию, как и один из базовых серверов MariaDB..20 и.30 никогда не получат вставленный ряд.
Если я подключаюсь к одной из базовых баз данных (я использовал.10 в своем тестировании) и создаю новую базу данных, новую таблицу и новую строку, данные будут согласованы для всех четырех экземпляров ProxySQL и всех трех экземпляров MariaDB.
/etc/proxysql.cnf:
datadir="/var/lib/proxysql"
admin_variables =
{
admin_credentials="admin:********;w***r:*****************"
mysql_ifaces="0.0.0.0:6032"
cluster_username="w***r"
cluster_password="*****************"
cluster_check_interval_ms=200
cluster_check_status_frequency=100
cluster_mysql_query_rules_save_to_disk=true
cluster_mysql_servers_save_to_disk=true
cluster_mysql_users_save_to_disk=true
cluster_proxysql_servers_save_to_disk=true
cluster_mysql_query_rules_diffs_before_sync=3
cluster_mysql_servers_diffs_before_sync=3
cluster_mysql_users_diffs_before_sync=3
cluster_proxysql_servers_diffs_before_sync=3
}
proxysql_servers =
(
{
hostname="10.254.254.100"
port=6032
comment="core"
},
{
hostname="10.254.254.10"
port=6032
comment="ny1"
},
{
hostname="10.254.254.20"
port=6032
comment="ny2"
},
{
hostname="10.254.254.30"
port=6032
comment="ny3"
}
)
/etc/mysql/my.cnf (соответствующие части)
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
bind-address = 0.0.0.0
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
skip-character-set-client-handshake
skip-external-locking
skip-name-resolve
## Logging and Replication
# Be aware that this log type is a performance killer.
#general_log_file = /var/log/mysql/mysql.log
#general_log = 1
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
# we do want to know about network errors and such
log_warnings = 2
# Enable the slow query log to see queries with especially long duration
#slow_query_log[={0|1}]
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 1
#log_slow_rate_limit = 1000
log_slow_verbosity = query_plan
#log-queries-not-using-indexes
#log_slow_admin_statements
sql_mode = NO_ENGINE_SUBSTITUTION,TRADITIONAL
## InnoDB
default_storage_engine = InnoDB
#innodb_log_file_size = 50M
innodb_buffer_pool_size = 256M
innodb_log_buffer_size = 8M
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 400
innodb_flush_method = O_DIRECT
# Galera-related settings
#
[galera]
# Mandatory settings
wsrep_on = ON
wsrep_cluster_name = warp-cluster
wsrep_provider = /usr/lib/galera/libgalera_smm.so
wsrep_cluster_address = gcomm://10.254.1.10,10.254.1.20,10.254.1.30
wsrep_node_address = 10.254.1.10
wsrep_node_name = int1
binlog_format = row
default_storage_engine = InnoDB
innodb_autoinc_lock_mode= 2
wsrep_slave_threads = 1
innodb_flush_log_at_trx_commit = 0
Я интуитивно понимаю, что имею дело с группой хостов по умолчанию для этого пользователя. Но я не понимаю, почему запись из ProxySQL на сервер MariaDB в 10.254.254.10 не распространяется на.20 и.30, в то время как я могу записывать напрямую в.10, используя HeidiSQL, и она распространяется.