Опубликовано пользователем 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
Добавить комментарий