LINUX.ORG.RU

Сообщения dpronyaev

 

Mysqldump: несколько баз

Форум — Admin

Всем привет! На сервер1 крутится несколько баз, нужно 3 из них реплицировать на сервер2 (Master-Slave).

Планирую вот так:

На сервер1

mysqldump -uroot --master-data=2 --single-transaction -p -B DB1 DB2 DB3> databases.sql

На сервер2 создать базы DB1, DB2, DB3, залить дамп

mysql -uroot < databases.sql

Прописать в my.cnf

replicate-do-db="DB1"
replicate-do-db="DB2"
replicate-do-db="DB3"

Перезапустить скуль, запустить репликацию, использовав данные из databases.sql

CHANGE MASTER TO 
				MASTER_HOST = "IP", 
				MASTER_USER = "USER", 
				MASTER_PASSWORD ="PASS", 
				MASTER_LOG_FILE='mysqld-bin.000xxx', 
				MASTER_LOG_POS=xxxxxxx;
				
START SLAVE;

Взлетит ли такая схема?

 

dpronyaev
()

Как перенести базу Mysql(InnoDB) из MariaDB в Percona XtraDB?

Форум — Admin

Есть база (около 57Гб), крутится в MariaDB 10.1 Нужно перенести ее в Percona XtraDB (будет крутиться там в состае Galera кластер, но это потом, главное перенести базу хотя бы на одну ноду). Встал вопрос как это сделать максимально быстро. mysqldump работает отлично, но залив дампа идет около 6 часов - слишком долго. При попытке делать потоковый дамп

mysqldump --single-transaction DB | mysql --host=IP -uUSER -pPASS -C DB
- скорость такая же. Очень быстро делается бекап через xtrabackup (он же innobackupex), но вот беда, получившийся бекап не подходит к Percona - жалуется на кучу несовместимостей базы mysql, perfomance schema и прочее. Что делать, товарищи? Очень критично переехать быстро, с минимальным простоем.

 , ,

dpronyaev
()

MariaDB: как отследить, что происходит с запросом

Форум — Admin

Всем привет. Есть запрос в статусе query end, висит несколько часов. Как понять что сейчас происходит с запросом, на чем он застрял?

Целиком моя проблема описана вот тут MariaDB + Galera: запросы зависают в статусе query end , но так там ответов не нашлось, попробовал сократить вопрос до более простого.

 

dpronyaev
()

MariaDB + Galera: запросы зависают в статусе query end

Форум — Admin

Всем привет! Есть кластер (2 ноды + 1 арбитратор). Запросы на него идут через maxscale proxy, настроенную таким образом, чтобы все запросы (и чтения и записи) шли на одну ноду, а в случает если нода окажется недоступна - на вторую.

Собственно, проблема в сабже.

Запросы могут быть как SELECT, так и UPDATE, INSERT в нормальных условиях выполняются значительно быстрее секунды, но некоторые остаются в PROCESS LIST в статусе query end. Иногда таких запросов висит сразу пачка - и тогда кластер становится колом, из новых запросов обрабатывает только SELECT. KILL процессов не работает, они так и остаются висеть как KILLED. Помогает только перезагрузка ноды, на которую идет запись.

На обоих серверах 2x Intel Xeon E5-2670 2.6Ghz , 192Gb, RAID1 из 2 SSD. ОC Debian 8, mariadb-server-10.2 из репозитория.

my.cnf

[client]
port		= 3306
socket		= /var/run/mysqld/mysqld.sock

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket		= /var/run/mysqld/mysqld.sock
nice		= 0

[mysqld]
#
# * Basic Settings
#
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
skip-external-locking


# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address		= 0.0.0.0

#
# * Fine Tuning
#
max_connections		= 2000
max_allowed_packet	= 16M
thread_cache_size       = 50
skip_name_resolve
#
# * MyISAM
#
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched. On error, make copy and try a repair.
myisam_recover_options = BACKUP
key_buffer		= 1024M
thread_concurrency     = 17

#
# * Query Cache Configuration
#
# Cache only tiny result sets, so we can fit more in the query cache.
query_cache_type        = 0
#query_cache_limit       = 0
#query_cache_size        = 0
# for more write intensive setups, set to DEMAND or OFF
#query_cache_type		= DEMAND

#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#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 = 10
#log_slow_rate_limit	= 1000
#log_slow_verbosity	= query_plan

#log-queries-not-using-indexes
#log_slow_admin_statements
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id		= 1
#report_host		= master1
#auto_increment_increment = 2
#auto_increment_offset	= 1
log_bin			= /var/lib/mysql/mariadb-bin
log_bin_index		= /var/lib/mysql/mariadb-bin.index
# not fab for performance, but safer
sync_binlog		= 0
expire_logs_days	= 10
max_binlog_size         = 5000M

#
# If applications support it, this stricter sql_mode prevents some
# mistakes like inserting invalid dates etc.
#sql_mode		= NO_ENGINE_SUBSTITUTION,TRADITIONAL
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
default_storage_engine	= InnoDB
# you can't just change log file size, requires special procedure
#innodb_log_file_size	= 50M
innodb_buffer_pool_size        = 147456M
#innodb_log_buffer_size	= 16M
innodb_file_per_table	= 1
innodb_thread_concurrency = 17
innodb_buffer_pool_instances = 64
innodb_flush_method	= O_DIRECT
innodb_flush_log_at_trx_commit=1

# Tuning
thread_cache = 24
tmp_table_size = 2048M
max_heap_table_size = 2048M
optimizer_switch='derived_merge=off,derived_with_keys=off'
thread_handling = pool-of-threads
thread_pool_size = 64

[mysqldump]
quick
quote-names
max_allowed_packet	= 16M

[mysql]
#no-auto-rehash	# faster start of mysql but no tab completion

[isamchk]
key_buffer		= 16M

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/

galera.cnf

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera-cluster"
wsrep_cluster_address="gcomm://айпи_ноды1,айпи_ноды1"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
#wsrep_sst_method=xtrabackup
# Galera Node Configuration
wsrep_node_address="айпи_ноды1"
wsrep_node_name="galera-node1"

# Tuning
wsrep_retry_autocommit = 4
wsrep_slave_threads = 64
wsrep_provider_options="gcache.size=5G; gcs.fc_limit = 320; gcs.fc_factor = 0.8; repl.commit_order=1;"

 ,

dpronyaev
()

Как проверить идентичность папок?

Форум — Admin

Копировал с сервера в NFS-шару одну очень большую папочку ~1Tb (в ней 31 подпапочка, по количеству дней в январе, и в каждой подпапочке ещё по примерно 35000-37000 подподпапочек с маленькими файликами). Вопрос: как убедиться, что всё скопировалось верно, а если неверно - то что именно?

 ,

dpronyaev
()

mdadm: No devices listed in conf file were found

Форум — Admin

Всем привет! Есть RAID 1 из двух SSD, на массив установлен Debian 8. Иногда после перезагрузки

получаю ошибку mdadm: No devices listed in conf file were found. Диски в порядке, рейд в порядке. (fsck, mdadm --examine --scan ошибок не находят). Подозреваю, что mdadm не всегда успевает инициализировать диски - и потому выдает ошибку. Может как-то можно увеличить время в течение которого mdadm ищет/инициализирует диски, входящие в массив?

 ,

dpronyaev
()

maxscale: роутинг запросов mysql

Форум — Admin

Всем привет! Есть кластер Galera из 2 нод + арбитратор. Сейчас все запросы через maxscale роутятся на одну ноду (указан в настройках высокий приоритет для одной и низкий для другой) - таким образом переключение запросов произойдет только если основная нода будет недоступна.

В тестовых целях понадобилось посылать запросы по очереди - один запрос на первую ноду, другой на вторую и так далее. Как бы это устроить? Инструкций на такой случай не нашел.

 ,

dpronyaev
()

tc (Trafic Control): ограничение скорости неверно действует

Форум — Admin

Приветствую!

Есть две машины. Между машинами канал 300mbit, который они с удовольствие занимают полностью. Нужно ограничить скорость передачи с одной машины (на ней крутится Proxmox, с нее передаются бекапы виртуалок) на другую до, например, 50mbit.

Делаю так:

#!/bin/bash
ETH=vmbr99
tc qdisc del dev $ETH root
tc qdisc add dev $ETH root handle 1:  htb default 3
tc class add dev $ETH parent 1: classid 1:1 htb rate 50mbit
tc filter add dev $ETH protocol ip parent 1: prio 1 u32 match ip dst IP_куда_передаются_данные flowid 1:1

Смотрю вывод watch tc -s -d class show dev vmbr99

Every 2.0s: tc -s -d class show dev vmbr99                                                                                                                            Tue Jul 25 13:33:25 2017

class htb 1:1 root prio 0 quantum 200000 rate 50Mbit ceil 50Mbit linklayer ethernet burst 1575b/1 mpu 0b overhead 0b cburst 1575b/1 mpu 0b overhead 0b level 0
 Sent 1100847288 bytes 782450 pkt (dropped 52463, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 534635 borrowed: 0 giants: 0
 tokens: 1273 ctokens: 1273

Очевидно, дисциплина активна.

Но при этом реальная скорость передачи файлов не превышает примерно 20mbit!

Что делать, товарищи?

 

dpronyaev
()

TC: ограничить скорость входящих соединений с диапозона IP

Форум — Admin

Приветствую! Есть машина-хранилище с gentoo на борту. На неё (в NFS шару) из другого города регулярно сливаются бекапы с нескольких машин (например, 192.168.10.41-192.168.10.43, os Debian), в процессе перелива занимая всю ширину канала между городами (400 мбит). Нужно ограничить на хранилище скорость входящих соединений до 200мбит при соединении с этих машин, не ограничивая скорости соединения с других адресов.

Подскажите пожалуйста как максимально просто и изящно реализовать это с помощью TC.

Пробовал вот так:

#!/bin/bash

ETH=eth1

tc qdisc del dev $ETH root

tc qdisc add dev $ETH root handle 1:  htb default 3
tc class add dev $ETH parent 1: classid 1:1 htb rate 200mbit

tc filter add dev $ETH protocol ip parent 1: prio 1 u32 match ip dst 192.168.10.41 flowid 1:1
tc filter add dev $ETH protocol ip parent 1: prio 1 u32 match ip dst 192.168.10.42 flowid 1:1
tc filter add dev $ETH protocol ip parent 1: prio 1 u32 match ip dst 192.168.10.43 flowid 1:1

но получил только пачку ошибок:

RTNETLINK answers: No such file or directory
RTNETLINK answers: No such file or directory
RTNETLINK answers: No such file or directory
RTNETLINK answers: Invalid argument
We have an error talking to the kernel
RTNETLINK answers: Invalid argument
We have an error talking to the kernel
RTNETLINK answers: Invalid argument
We have an error talking to the kernel

 

dpronyaev
()

maxscale + pacemalker + corosync: не удается сократить время даунтайма

Форум — Admin

Привет, коллеги!

Есть две ноды c maxscale в pacemaker+corosync кластере.

На нодах настроены два ресурса: виртуальный IP, который переползает в случае падения ноды на другую, и собственно maxscale, который в случает падения процесса перезапускается, а в случае падения ноды - переползает на другую. Ресурсы объединены в группу, чтобы переключение обоих происходило синхронно и не получилось ситуации когда IP «припаркован» на одну ноду, а maxscale запущен на другой.

настройки кластера такие:

node 2887010140: maxscale1
node 2887010141: maxscale2
primitive MaxScale systemd:maxscale \
        op monitor interval=10s timeout=15s \
        op start interval=0 timeout=15s \
        op stop interval=0 timeout=30s
primitive maxscale_vip IPaddr2 \
        params ip=192.168.1.99 \
        op monitor interval=1s
group maxscale_service maxscale_vip
property cib-bootstrap-options: \
        have-watchdog=false \
        dc-version=1.1.16-94ff4df \
        cluster-infrastructure=corosync \
        cluster-name=debian \
        stonith-enabled=false \
        no-quorum-policy=ignore

Всё работает как часы. Но мне хочется уменьшить время дайндайма при падении процесса maxscale! Делаю (на первой ноде, которая сейчас «главная»)

crm resource stop MaxScale
crm configure delete MaxScale
crm configure primitive MaxScale systemd:maxscale op monitor interval="5s" timeout="15s" op start interval="0" timeout="15s" op stop interval="0" timeout="30s"

Сразу же в crm_mon вижу:

2 nodes configured
2 resources configured

Online: [ maxscale1 maxscale2 ]

Active resources:

 Resource Group: maxscale_service
     maxscale_vip       (ocf::heartbeat:IPaddr2):       Started maxscale1
MaxScale        (systemd:maxscale):     Started maxscale1

Failed Actions:
* MaxScale_start_0 on maxscale2 'not running' (7): call=10, status=complete, exitreason='none',
    last-rc-change='Thu Jul  6 11:03:15 2017', queued=0ms, exec=1575ms

Казалось бы, зачем второй ноде пытаться запустить maxcale если он уже работает на первой ноде.

При kill процесса maxscale на первой ноде он успешно перезапускается, быстрее чем раньше (т.к. op monitor interval=5s вместо 10). Но при падении первой ноды на вторую переползает IP, но maxscale не стартует:

* MaxScale_start_0 on maxscale2 'not running' (7): call=10, status=complete, exitreason='none',
    last-rc-change='Thu Jul  6 11:03:15 2017', queued=0ms, exec=1575ms

Где искать виновного? Наверняка значения op monitor interval < 10s допустимы, ведь maxscale_vip IPaddr2 прекрасно работает с op monitor interval=1s.

 , ,

dpronyaev
()

Asterisk: snmp мониторинг (проблема с res_snmp.so)

Форум — Admin

Привет, коллеги.

Есть сервер с Debian 9, на нём установленный из репозитория Asterisk Asterisk 13.14.1~dfsg-2. Необходимо мониторить его по SNMP (через zabbix). Проблема в том, что модуль res_snmp.so в этой версии пакета не завезли. При попытке подсунуть версию из пакета для jessie пишет

[Jul  4 10:36:35] WARNING[25198]: loader.c:556 load_dynamic_module: Error loading module 'res_snmp.so': /usr/lib/asterisk/modules/res_snmp.so: undefined symbol: ast_bridged_channel
[Jul  4 10:36:35] WARNING[25198]: loader.c:1090 load_resource: Module 'res_snmp.so' could not be loaded.

При попытке подсунуть res_snmp.so, собранный руками на соседней машине, ругается на то, что модуль был собран с отличными от самого Asterisc опциями сборки:

[Jul  4 11:13:52] WARNING[25478]: loader.c:1005 inspect_module: Module 'res_snmp.so' was not compiled with the same compile-time options as this version of Asterisk.
[Jul  4 11:13:52] WARNING[25478]: loader.c:1006 inspect_module: Module 'res_snmp.so' will not be initialized as it may cause instability.

Что делать, товарищи? Пересобрать на сабжевом сервере астер с модулем не вариант, т.к. круглосуточно идут звоники. С другой стороны мониторинг по snmp необходим.

 , ,

dpronyaev
()

mariadb-galera + haproxy: критерии доступности

Форум — Admin

Приветствую, коллеги! Есть мастер-мастер кластер (2 ноды + арбитратор). Подключение приложения идет через haproxy, примерно вот так:

# Load Balancing for Galera Cluster
listen galera 0.0.0.0:3306
     balance source
     mode tcp
     option tcpka
     option mysql-check user haproxy
     server node1 192.168.1.201:3306 check weight 254
     server node2 192.168.1.202:3306 check weight 1

Всё работает (если доступна первая нода, приложение работает с ней, если упала - приложение коннектится ко второй). Проблема начинает когда node1 включается после отключения. Прокси видит, что node1 доступна и успешно проходит mysql-check, радостно переключает коннекты приложения на node1 и... получаем ошибки, т.к. node1 уже в кластере, но ещё не готова принимать данные.

Можно ли как-то научить haproxy определять доступность сервера не просто по mysql-check, а иным образом - например, выполнив на нодах

 mysql -u root -e "SHOW STATUS LIKE 'wsrep_ready' "
(если результат «ON» - работаем с нодой, в остальных случаях нет) ?

 , , ,

dpronyaev
()

maxscale: автоматическое переключение сервера для приложения в galera-cluster

Форум — Admin

Приветствую! Есть Galera-кластер на MariaDB (мастер-мастер, два хоста + арбитратор). Приложение читает-пишет на один из серверов (первый). Необходимо сделать так, чтобы при падении сервера приложение переключало чтение-запись на второй хост, а когда сервер вернётся в строй, выполняло обратное переключение. Для этих целей выбран maxscale. На оффсайте много информации по разделению операций чтения-записи между серверами, но конкретно по переключению инфы я не нашел. У кого-нибудь есть опыт решения подобной задачи?

 ,

dpronyaev
()

DKIM: с одного сервера подпись почты валидна, с другого нет.

Форум — Admin

Действует схема: почтовый релей на postfix, добавляющий DKIM подписи и два сервера (1й exchange, 2й iredmail, оба обслуживают один и тот же домен т.к. в ближайшее время 2 должен заменить 1), отправляющие письма через указанный релей. DKIM запись в DNS, разумеется, есть; подпись писем с обоих серверов разрешена в конфиге opendkim. При отправке письма с exchange на gmail всё ок, в заголовке

Authentication-Results: mx.google.com;
       dkim=pass header.i=@mydomain.com;

При отправке же письма с iredmail (адреса отправителя и получателя идентичны первому случаю) получаю вот что:

Authentication-Results: mx.google.com;
       dkim=pass header.i=@mydomain.com;
       dkim=temperror (no key for signature) header.i=@mydomain.com;

В логах релея в обоих случаях одно и то же, подпись успешно добавлялась к обоим письмам, примерно вот так:

opendkim[15717]: 577072594B: DKIM-Signature header added (s=default, d=mydomain.com)

Где искать грабли? И как понимать dkim=pass, а потом в следующей строке dkim=temperror - кажется, одно противоречит другому.

 , , ,

dpronyaev
()

bind и txt

Форум — Admin

Приветствую всех. Понадобилось настроить DKIM для почтового сервера. C opendkim проблем нет, письма успешно подписываются. Проблема в bind такая: какую бы текстовую запись я не добавлял, после обновления зоны (ошибок в логах нет) эту запись не видно ни через dig с самого сервера, ни с внешних сервисов.

добавляю вот в таком формате:

default._dkim IN TXT ( "v=DKIM1; k=rsa; "
          "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHY7Zl+n3SUldTYRUEU1BErHkKN0Ya52gazp1R7FA7vN5RddPxW/sO9JVRLiWg6iAE4hxBp42YKfxOwEnxPADbBuiELKZ2ddxo2aDFAb9U/lp47k45u5i2T1AlEBeurUbdKh7Nypq4lLMXC2FHhezK33BuYR+3L7jxVj7FATylhwIDAQAB" )  ; ----- DKIM default for example.com

Не забываю обновить сериал зоны, перечитываю конфиг бинда - по логам всё ок, с внешних сервисов видно, что зона загружена с новым серийником, но TXT запись не видна.

При добавлении записи в виде

default._dkim IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHY7Zl+n3SUldTYRUEU1BErHkKN0Ya52gazp1R7FA7vN5RddPxW/sO9JVRLiWg6iAE4hxBp42YKfxOwEnxPADbBuiELKZ2ddxo2aDFAb9U/lp47k45u5i2T1AlEBeurUbdKh7Nypq4lLMXC2FHhezK33BuYR+3L7jxVj7FATylhwIDAQAB" ; ----- DKIM key default for example.com

- та же самая петрушка.

«A» записи добавляются без проблем. Где искать грабли?

 , ,

dpronyaev
()

AD + iRedmail: возможно ли настроить autodiscover?

Форум — Admin

Собственно, вопрос в сабже. Клиенты авторизуются через LDAP, всё работает хорошо. Но, так как у всех пользователей Outlook, хотелось бы иметь возможность автоматической настройки как это работает в случае с Exchange под оффтопик. У кого-нибудь есть положительный опыт такой настройки?

 , , ,

dpronyaev
()

Postfix: relay на два сервера

Форум — Admin

Господа, нахожусь в стадии миграции с одного почтового сервера на другой. В тестовых целях необходимо получать входящую почту на оба сервера одновременно. Есть postfix, настроенный релеем. В /etc/postfix/transport указан текущий сервер:

corp.mydomain.ru smtp:192.168.1.20
mydomain.ru      smtp:192.168.1.20
Редактирую файл, добавляя тестовый сервер 192.168.1.21:
corp.mydomain.ru smtp:192.168.1.20
corp.mydomain.ru smtp:192.168.1.21
mydomain.ru      smtp:192.168.1.20
mydomain.ru      smtp:192.168.1.21

Далее делаю postmap /etc/postfix/transport, получаю

postmap: warning: /etc/postfix/transport.db: duplicate entry: "corp.mydomain.ru"
postmap: warning: /etc/postfix/transport.db: duplicate entry: "mydomain.ru"
После этого прошу postfix перечитать конфигурационные файлы: postfix reload

И ноль эмоций: письмо по-прежнему релеятся на 192.168.1.20

Что я делаю не так, куда копать?

 ,

dpronyaev
()

Dovecot + LDAP: доступ к почтовому ящику.

Форум — Admin

Приветствую. Есть почтовый сервер Postfix + Dovecot + LDAP. Возникла необходимость предоставлять доступ одним пользователям к ящикам других. В оффтопике (Exchange) это делалось просто установкой Full Access Permissions на нужный ящик для пользователя, которому требовалось просматривать почту подчиненного. Как реализовать в Dovecot? Гугол не помог, к сожалению.

 , , ,

dpronyaev
()

RSS подписка на новые темы