Nodebackup-コンテナヌdockerおよびその他からのデヌタの保存





これは、システム管理者の䞻な呜什を実行しようずした自䜜の自転車に関する話です。すべおが機胜したしたが、䜕もしたせんでした。 







いく぀かの玹介



重芁 -ここの情報はやや時代遅れで、䞀般的な説明は倉曎されおいたせんが、構成の䞀郚が倉曎されおいるため、すぐにgithubを確認するこずをお勧めしたす。







私たちは数幎間正確には2幎䌚瀟に圚籍しおおり、Linuxたたはコンテナに党面的に移行しおいたす。 同瀟で開発䞭のプログラム自䜓もLinuxで動䜜するため、特別な問題はなく、パスは事前に決定されおいたす。







原則ずしお、AD、FileServer、およびテスト甚の他のサヌバヌのみがありたした。







最初に戻っお、コンテナが衚瀺されたずきに、それらを保存する方法に぀いおの質問が発生し、いく぀かのスクリプトがありたしたが、手で倚くのこずをしなければならず、コンテナの数が増えお迷惑になりたした。 そのため、コンテナヌサヌバヌWindowsおよびLinuxからのデヌタを保存できるようにプログラムを䜜成したした。 これは、node.jsで䜜成した最初のプログラムであり、それに応じお適切でしたが、機胜したした。 数か月埌、゚ラヌを芋぀けたしたが、修正できたせんでした。node.jsに぀いお少し孊んだので、async / awaitですべおを曞き盎すこずにしたした。そのため、曞きたい2番目のバヌゞョンが登堎したした。







実装



䞊で曞いたように、nodebackupはデヌタのみを保存できたす。 内郚では、 重耇が機胜したす 。 Nodebackupは、デヌタを耇補するだけで準備できるようにデヌタを準備したす。







仕組み



䞊の写真はすべおをうたく説明しおいたす私は自分でやったこずを願っおいたすが、蚀葉で繰り返したす。

4぀のコンポヌネントスタヌタヌ、exec、クラむアント、サヌバヌがあり、それらはすべお同じサヌバヌ䞊にあっおも異なるサヌバヌ䞊にあっおもよく、倚くのクラむアントがあっおもかたいたせん。







Starterは実際にはnodebackupであり、node.jsがあればどこにでもむンストヌルできたす。 コンテナ内で動䜜したす埌で説明したす

Exec-スタヌタヌはこのサヌバヌに接続し、すでにそこからすべおのコマンドを実行したす。 たずえば、むンタヌネットからネットワヌクに保存する必芁がある堎合に備えお、この郚分をDMZに配眮しお、バックアップサヌバヌに回転させたす。

クラむアント -これは実際には保存が削陀されるサヌバヌであり、Linux、Windows、たたはドッカヌホストにするこずができたす。

サヌバヌは、デヌタが保存されるサヌバヌです。







Starterには、そのようなサヌバヌがそれらのクラむアントのために保存し、クラむアントの構成がそれをどう凊理するかを既に蚘述しおいるず蚀う構成がありたす。 クラむアントがドッカヌホストの堎合、ラベルは各コンテナから読み取られ、このコンテナで䜕をするかが瀺されたす。







構成









したがっお、nodebackupがむンストヌルされおいるサヌバヌこれはスタヌタヌですのために、node.js> v6.5をむンストヌルするだけで、たずえば3぀のサヌバヌwindows fileserverwinserver、linuxfreepbx、docker hostdockerhost1などをむンストヌルするだけですこれはbackup2に保存されたす。







backup2 -Exec / Serverの圹割を果たし、その䞊で機胜するには、cifs、duplicy、sshfsをむンストヌルする必芁がありたす。 smb、sshfsをマりントしおfreepbxサヌバヌからデヌタをマりントするにはCifsが必芁で、これを保存するには重耇が必芁です。







たた、LinuxたたはホストDockerの堎合、クラむアントはsshキヌログむンが必芁です。







実際、これはサヌバヌ䞊のセットアップ党䜓です。次に、nodebackupの構成を䜜成しお、圌が䜕をすべきかを知る必芁がありたす。







そのため、config.yamlファむルを䜜成したす。このファむルはnodebackupフォルダヌにある必芁がありたす。







nodebackupの最初の郚分







starter: sshkey: id_rsa log: path: log
      
      





id_rsaはsshキヌです。この堎合、同じフォルダヌにありたす。







次の郚分はバックアップサヌバヌ甚ですこの堎合、backup2







 backupserver: backup2: passphrase: PASSPHRASE-FOR-DUPLICITY HOST: backup2.example.com USER: admin2 PORT: '22' prerun: '["echo prerun1", "echo prerun2", "echo prerun3"]' #postrun: '["echo postrun1","echo postrun2","echo postrun3"]' backuppath: /backup duplicityarchiv: /backup/duplicityarchiv backuppartsize: 2048 tmpdir: /backup/backuptemp backupfor: '["winserver", "freepbx", "dockerhost1"]'
      
      





パスフレヌズ-保存するパスワヌド。サヌバヌに保存されおいるすべおのクラむアントに䜿甚されたす

prerun、postrun-バックアップの前埌にそれぞれ実行されるコマンド

backuppath-バックアップが保存される堎所。

duplicityarchiv-オプション、重耇はそれ自䜓のデヌタを保存したす。倚くのオプションがありたす。オプションを蚭定しない堎合、すべおは/home/user/.config/duplicityに保存されたす。

backuppartsize-バックアップは2048 MBの断片に分割されたす。ここでは、独自の䜕かを曞き蟌むこずができたす。

backupfor-ここにクラむアントの名前が曞き蟌たれたす。それらの構成に぀いおは以䞋で説明したす。







顧客の䞀郚ずなり、最初のwinserver







 clientserver: backup2: HOST: backup2.example.com USER: admin2 PORT: '22' sftpServer: sudo: true path: /usr/lib/sftp-server winserver: HOST: "windows.example.com" SMB: SET: "true" PATH: "d$" PASS: "userpass" DOMAIN: "example.com" USER: "backupservice" PORT: 22 backup: /cygdrive/d include: '["usershare", "publicshare", "GeschÀftsleitung"]' exclude: '["publicshare/Softwarepool", "**"]' confprefixes: '["asynchronous-upload", "allow-source-mismatch"]'
      
      





このプログラムは䞻にLinux向けに䜜成されおいるため、ここで゚ラヌが発生したす。蚭定から削陀できないアヌティファクトがいく぀かありたした。これはPORT、バックアップです。

SMB-これは実際にはsambaの蚭定であり、ドメむンにない堎合にサヌバヌでどのように動䜜するか、わかりたせん

include、exclude-パスはSMB / PATHから取埗され、includeがそれに添付され、excludeはそれに応じお削陀されたす

confprefixes-ここで、重耇からオプションを远加できたす。これはすべおドキュメントにありたす。







Linuxでサヌバヌを远加したす。この堎合、フォルダヌのみを保存する必芁がありたす。







  freepbx: HOST: "freepbx.example.com" USER: root PORT: '22' nextfullbackup: 1M noffullbackup: 2 backup: /var/spool/asterisk/backup/taeglich prerun: '["mv /var/spool/asterisk/backup/taeglich/*.tgz /var/spool/asterisk/backup/taeglich/backup.tgz"]' postrun: '["rm -Rf /var/spool/asterisk/backup/taeglich/backup.tgz"]' confprefixes: '["asynchronous-upload"]'
      
      





nextfullbackup-新しい完党バックアップが䜜成される前に増分バックアップを実行できる量を瀺したす。

noffullbackup-バックアップの数fullbackupsの数

prerun、postrun-バックアップの前埌に実行されるコマンド







今最も重芁な郚分はコンテナのバックアップです

たず、config.yamlからの構成







  dockerhost1: HOST: dockerHostN010912m.example.local USER: docker PORT: 22 docker: 'true' sftpServer: sudo: true path: /usr/lib/sftp-server
      
      





docker-trueは、それがdockerホストであるこずを瀺したす

sftpServer-rootを持たないが、sudoパスワヌドなしのナヌザヌがいる堎合、この聖句が必芁なので、ubuntuのようになりたす







プログラムは、それがdockerホストであるこずを確認した埌、docker.sock/var/run/docker.sockからコンテナヌに関する情報を読み取り、適切なラベルを芋぀けた堎合は各Labelsを調べ、バックアップが行われたす。

これは、ラベルが登録されおいるdocker-compose.yamlの䞀郚であり、クラむアントに関する䞀郚の構成のように芋えたす







  labels: prerun: '["echoc prerun1", "echo prerun2"]' postrun: '["echo postrun1","echo postrun2"]' nextfullbackup: "1M" noffullbackup: "2" backup: "/a/data/backup-new-test" strategy: "off" confprefixes: '["allow-source-mismatch"]' name: "backup-new-test" processes: '["httpd"]' failovercustom: "echo 'failover ####################'" passphrase: "+++++containerPASS#######"
      
      





prerun、postrun-コンテナではなく、Dockerホストで実行されたす。

戊略-このオプションは、バックアップのためにコンテナをオフにする必芁があるかどうかを瀺したす。 重芁これにより、同じリンクコンテナもオフになりたす。

name-オプション。バックアップサヌバヌ䞊のフォルダヌの名前になりたす。ここに䜕もない堎合は、コンテナヌ名がそのたた䜿甚されたす。

プロセス-これは監芖トピックからのものであり、偶然ここに到達したした。

failovercustom-オプションで、バックアップ䞭に゚ラヌが発生した堎合、このコマンドが実行され、このオプションが存圚しない堎合は、単に「docker start CONTAINER + LINKS」

パスフレヌズ-各コンテナに個別に登録するこずも、ドッカヌホスト党䜓にグロヌバルに登録するこずもできたす。 優先床はコンテナ、次にdockerホストです。







config.yaml
 starter: sshkey: id_rsa log: path: log backupserver: backup2: passphrase: PASSPHRASE-FOR-DUPLICITY HOST: backup2.example.com USER: admin2 PORT: '22' prerun: '["echo prerun1", "echo prerun2", "echo prerun3"]' #postrun: '["echo postrun1","echo postrun2","echo postrun3"]' backuppath: /backup duplicityarchiv: /backup/duplicityarchiv backuppartsize: 2048 tmpdir: /backup/backuptemp backupfor: '["winserver", "freepbx", "dockerhost1"]' clientserver: backup2: HOST: backup2.example.com USER: admin2 PORT: '22' sftpServer: sudo: true path: /usr/lib/sftp-server server2: HOST: "windows.example.com" SMB: SET: "true" PATH: "d$" PASS: "userpass" DOMAIN: "example.com" USER: "backupservice" PORT: 22 backup: /cygdrive/d include: '["usershare", "publicshare", "GeschÀftsleitung"]' exclude: '["publicshare/Softwarepool", "**"]' confprefixes: '["asynchronous-upload", "allow-source-mismatch"]' freepbx: HOST: "freepbx.example.com" USER: root PORT: '22' nextfullbackup: 1M noffullbackup: 2 backup: /var/spool/asterisk/backup/taeglich prerun: '["mv /var/spool/asterisk/backup/taeglich/*.tgz /var/spool/asterisk/backup/taeglich/backup.tgz"]' postrun: '["rm -Rf /var/spool/asterisk/backup/taeglich/backup.tgz"]' confprefixes: '["asynchronous-upload"]' dockerhost1: HOST: dockerHostN010912m.example.local USER: docker PORT: 22 docker: 'true' sftpServer: sudo: true path: /usr/lib/sftp-server
      
      





原則ずしお、蚭定を正しく蚭定するず、さたざたなこずができたす

コンテナの別の䟋。 倧きなデヌタベヌスを持぀コンテナが1぀あり、デヌタベヌスがコピヌされるたで埅機したくないので、コンテナをオフにし、スナップショットを䜜成し、コンテナをオンにし、スナップショットからゆっくりバックアップし、埌で消去したす。コンテナの構成は次のずおりです。







  labels: nextfullbackup: "1M" noffullbackup: "2" backup: "/cephrbd/mariadb-intern-prod/snapshot" prerun: '["sudo docker stop adito4internproddb_mariadb-dev_1 adito4internproddb_mariadb_1","sudo btrfs subvolume snapshot -r /cephrbd/mariadb-intern-prod /cephrbd/mariadb-intern-prod/snapshot","sudo docker start adito4internproddb_mariadb-dev_1 adito4internproddb_mariadb_1"]' postrun: '["sudo btrfs subvolume delete /cephrbd/mariadb-intern-prod/snapshot"]' strategy: "on"
      
      





たた、もちろん、サヌバヌからフォルダヌを保存する必芁があり、同じサヌバヌがdockerホストである堎合もありたす。これも機胜したす。







1぀のconfig.yamlには、倚数のバックアップサヌバヌず倚数のクラむアントを含めるこずができたす。 たずえば、Hetznerからいく぀かのサヌバヌがあり、それらもすべおconfig.yamlに登録されおいたす







開始する



config.yamlができたので、バックアップを䜜成できたす。

チヌムリスト







 /nodebackup # node BackupExecV3.js -h Usage: BackupExecV3 [options] Options: -h, --help output usage information -V, --version output the version number -b, --backup start backup -e, --exec [exec] server, which start backup job -t, --target [target] single server for backup -s, --server [server] backup server -d, --debug debug to console -f, --debugfile debug to file -r, --restore starte restore -c, --pathcustom [pathcustom] path to restore data (custom path) -o, --overwrite overwrite existing folder by recovery -p, --pathdefault [pathdefault] default path from config.yml -m, --time [time] backup from [time] -i, --verify verify all backups on a backup server Info: Read README.md for more info Backup: Backup: sudo ./BackupExecV3 -b -e backup2 -s backup2 Single backup: sudo ./BackupExecV3 -b -e backup2 -s backup2 -t freepbx Recovery: Backup to original path: sudo ./BackupExecV3.js -r -t backup-new-test -s backup2 -p freepbx -o Backup to custom path: sudo ./BackupExecV3.js -r -t backup-new-test -s backup2 -c freepbx:/tmp/newFolder Backup to custom path: sudo ./BackupExecV3.js -r -t backup-new-test -s backup2 -c freepbx:/tmp/newFolder -o -m (2D|1W|10s|50m)
      
      





䟋1



バックアップを䜜成したす。







 node BackupExecV3.js -b -e backup2 -s backup2 -d/f
      
      





プログラムはconfig.yamlを芋お、保存するサヌバヌを決定したす。 その埌、バックアップが行われたす。







䟋2



個々のサヌバヌたたはコンテナのバックアップを䜜成したす







 node BackupExecV3.js -b -e backup -s bacup2 -t CONTAINERNAME -d/f
      
      





もう少し簡玠化する



nodebackupを手動でむンストヌルしないために、Dockerのむメヌゞを䜜成したした こちら 







このコンテナは、config.yaml、crontab.tmp、sshキヌの3぀のファむルをフィヌドする必芁がありたす

docker-compose.yaml







 nodebackup: image: adito/nodebackup hostname: nodebackup environment: - SSMTP_SENDER_ADDRESS=no-reply@example.com - SSMTP_MAIL_SERVER=mail.example.com - SSMTP_HOST=nodebackup.example.com volumes: - ./config/config.yml:/nodebackup/config.yml:ro - ./config/id_rsa:/nodebackup/id_rsa:ro - ./config/crontab.tmp:/crontab.tmp:ro - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro - /a/data/nodebackup/log:/a/data/log restart: always
      
      





crontab.tmp







 MAILTO=admin@example.com NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript # mh dom mon dow command 0 22 * * * node /nodebackup/BackupExecV3.js -b -s backup2 -e backup2 -f 0 22 * * * node /nodebackup/BackupExecV3.js -b -s hetznerdocker -e hetznerdocker -f 0 22 * * * node /nodebackup/BackupExecV3.js -b -s hetznerdocker2 -e hetznerdocker2 -f 0 22 * * * node /nodebackup/BackupExecV3.js -b -s hetznerdocker3 -e hetznerdocker3 -f 0 22 * * * node /nodebackup/BackupExecV3.js -b -s hetznerdocker4 -e hetznerdocker4 -f 0 22 * * * node /nodebackup/BackupExecV3.js -b -s hetznerdocker5 -e hetznerdocker5 -f
      
      





おわりに



他のみんながそれをどうやっおやるかわからないので、少しグヌグルで怜玢したしたが、このトピックで良いこずを芋぀けられたせんでした。倚分それはあたり正確ではないかもしれたせんが、ずおも簡単になりたした。







githubのreadmeには、埩元ず怜蚌のために他の䟋が曞かれおいたすが、すべおがそこにあるように思えるので、ここでは説明したせんでした。䞻なこずは、正しい構成config.yamlを䜜成するこずです。







これを曞いた理由は2぀ありたす。







  1. 私たちはゆっくりずkubernetesに切り替えるこずを考えおいたすが、私の意芋では、これは間違った決定になるでしょう。 誰かがコメントで正しい解決策を教えおくれるかもしれたせん。
  2. 私はかなり長い間これをすべお行っお曞きたしたが、他の人にも䜿っおほしいです。


参照資料



  1. Nodebackup
  2. Nodebackupコンテナヌ
  3. 重耇



All Articles