CSYNC2 - чиним синхронизацию ( ERROR from peer )

Аватар пользователя JKey

В процессе использования  кластеров, на однотипных узлах, иногда приходится выполнять однотипные действия по правке конфигов, для у прощещения этой массовой задачи, есть такая штука как CSYNC2. 
Допустим мы внесли изменения на одном узле, и хотим разослать эти обнолвения всем. Однако при  выполнении команды получаем подобного рода выражения:

Connecting to host SERVER-1 (SSL) ...
Updating /etc/apache2/default-server.conf on SERVER-1 ...
Updating /etc/apache2/httpd.conf.rpmnew on SERVER-1 ...
While syncing file /etc/apache2/httpd.conf.rpmnew:
ERROR from peer SERVER-1: File is also marked dirty here!
Do not auto-resolve conflict: Lost 'younger/older' test.
File stays in dirty state. Try again later...
Updating /etc/apache2/mime.types on SERVER-1 ...
While syncing file /etc/apache2/mime.types:
ERROR from peer SERVER-1: File is also marked dirty here!
Do not auto-resolve conflict: Lost 'younger/older' test.
File stays in dirty state. Try again later...
Updating /etc/apache2/ssl.crt/ca.crt on SERVER-1 ...
While syncing file /etc/apache2/ssl.crt/ca.crt:
ERROR from peer SERVER-1: File is also marked dirty here!
Do not auto-resolve conflict: Lost 'younger/older' test.
File stays in dirty state. Try again later...
Updating /etc/apache2/ssl.crt/server.crt on SERVER-1 ...
While syncing file /etc/apache2/ssl.crt/server.crt:
ERROR from peer SERVER-1: File is also marked dirty here!
Do not auto-resolve conflict: Lost 'younger/older' test.
File stays in dirty state. Try again later...
Updating /etc/apache2/ssl.csr/server.csr on SERVER-1 ...
While syncing file /etc/apache2/ssl.csr/server.csr:
ERROR from peer SERVER-1: File is also marked dirty here!
Do not auto-resolve conflict: Lost 'younger/older' test.
File stays in dirty state. Try again later...
Updating /etc/apache2/ssl.key/ca.key on SERVER-1 ...
While syncing file /etc/apache2/ssl.key/ca.key:
ERROR from peer SERVER-1: File is also marked dirty here!
Do not auto-resolve conflict: Lost 'younger/older' test.
File stays in dirty state. Try again later...
Updating /etc/apache2/ssl.key/dbo/server.key on SERVER-1 ...
While syncing file /etc/apache2/ssl.key/dbo/server.key:
ERROR from peer SERVER-1: File is also marked dirty here!
Do not auto-resolve conflict: Lost 'younger/older' test.
File stays in dirty state. Try again later...
Updating /etc/apache2/ssl.key/server.key on SERVER-1 ...
While syncing file /etc/apache2/ssl.key/server.key:
ERROR from peer SERVER-1: File is also marked dirty here!
Do not auto-resolve conflict: Lost 'younger/older' test.
File stays in dirty state. Try again later...
Finished with 8 errors.

Что говорит о том, что файлы на узлах  различаются и даже принудительно обновлять тулза не хотит. Достаем повареную книгу ищем рецеп и разразимся проклятиями, которые нацелены на то чтобы внушить всем узлам что у них "грязные" файлы, и подлежат обновлению :

SERVER-2:/etc/csync2 # csync2 -M
chary   SERVER-2      SERVER-1      /etc/apache2/httpd.conf.rpmnew
chary   SERVER-2      SERVER-1      /etc/apache2/mime.types
chary   SERVER-2      SERVER-1      /etc/apache2/ssl.crt/ca.crt
chary   SERVER-2      SERVER-1      /etc/apache2/ssl.crt/server.crt
chary   SERVER-2      SERVER-1      /etc/apache2/ssl.csr/server.csr
chary   SERVER-2      SERVER-1      /etc/apache2/ssl.key/ca.key
chary   SERVER-2      SERVER-1      /etc/apache2/ssl.key/dbo/server.key
chary   SERVER-2      SERVER-1      /etc/apache2/ssl.key/server.key

SERVER-2:/etc/csync2 # csync2 -M | awk '{print( $3) }'
SERVER-1
SERVER-1
SERVER-1
SERVER-1
SERVER-1
SERVER-1
SERVER-1
SERVER-1
SERVER-2:/etc/csync2 # csync2 -M | awk '{print( $4) }'
/etc/apache2/httpd.conf.rpmnew
/etc/apache2/mime.types
/etc/apache2/ssl.crt/ca.crt
/etc/apache2/ssl.crt/server.crt
/etc/apache2/ssl.csr/server.csr
/etc/apache2/ssl.key/ca.key
/etc/apache2/ssl.key/dbo/server.key
/etc/apache2/ssl.key/server.key
SERVER-2:/etc/csync2 # csync2 -M | awk '{print( $4) }' while read DIRT; do csync2 -f $DIRT; done
bash: syntax error near unexpected token `do'
SERVER-2:/etc/csync2 # csync2 -M | awk '{print( $4) }' while read DIRT; do csync2 -f $DIRT done;
bash: syntax error near unexpected token `do'
SERVER-2:/etc/csync2 # csync2 -M | awk '{print( $4) }'| while read DIRT; do csync2 -f $DIRT done
> 
SERVER-2:/etc/csync2 # csync2 -M | awk '{print( $4) }'| while read DIRT; do csync2 -f $DIRT done;
> 
SERVER-2:/etc/csync2 # csync2 -M | awk '{print( $4) }'| while read DIRT; do csync2 -f $DIRT ;done
SERVER-2:/etc/csync2 # csync2 -M
force   SERVER-2      SERVER-1      /etc/apache2/httpd.conf.rpmnew
force   SERVER-2      SERVER-1      /etc/apache2/mime.types
force   SERVER-2      SERVER-1      /etc/apache2/ssl.crt/ca.crt
force   SERVER-2      SERVER-1      /etc/apache2/ssl.crt/server.crt
force   SERVER-2      SERVER-1      /etc/apache2/ssl.csr/server.csr
force   SERVER-2      SERVER-1      /etc/apache2/ssl.key/ca.key
force   SERVER-2      SERVER-1      /etc/apache2/ssl.key/dbo/server.key
force   SERVER-2      SERVER-1      /etc/apache2/ssl.key/server.key

После чего можем смело выполнять 

Connecting to host SERVER-1 (SSL) ...
Updating /etc/apache2/httpd.conf.rpmnew on SERVER-1 ...
Updating /etc/apache2/mime.types on SERVER-1 ...
Updating /etc/apache2/ssl.crt/ca.crt on SERVER-1 ...
Updating /etc/apache2/ssl.crt/server.crt on SERVER-1 ...
Updating /etc/apache2/ssl.csr/server.csr on SERVER-1 ...
Updating /etc/apache2/ssl.key/ca.key on SERVER-1 ...
Updating /etc/apache2/ssl.key/dbo/server.key on SERVER-1 ...
Updating /etc/apache2/ssl.key/server.key on SERVER-1 ...
Finished with 0 errors.

 

 

Тэги: 

Раздел сайта: 

1 Комментарий

Аватар пользователя Тимофей

Спасибо за идею, но стоит

Спасибо за идею, но стоит конечно почистить вывод и оставить только те команды, которые завершились успешно.

Также стоит учитывать, что в выводе csync2 имеются табуляции и передать это awk. Также стоит праавильно заэкранировать переменную в цикле, чтобы в обработку попадали файлы с пробелами в названии:

$ csync2 -M | awk -F"\t" '{print( $4) }' | while read dirty; do csync2 -f "${dirty}"; done

Добавить комментарий