Кластер 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, и она распространяется.

0 ответов

Другие вопросы по тегам