
私たちのブログのほとんどの記事は開発者によって書かれています。 この不正を修正し、DevOpsを追加することにしました。 今日は、バックアップという重要なことについてお話します。
Badooは活発に開発されており、従業員の数は絶えず増加しているため、集中バックアップは、情報を部分的にコピーしてさまざまな場所に保存するよりもはるかに便利であるという結論に達しました。
この記事では、1つのリポジトリをさまざまな方法で使用して、かなりの数のワークステーションを「バックアップ」する方法を検討します。重大な投資に頼らず、面倒な実装を回避します。
全員がローカルマシンにデータを保存するわけではないため、バックアップが従業員の100%をカバーしないように事前に予約します。したがって、バックアップを必須にするという目標はありませんでした。
集中型バックアップの主な問題の1つは、従業員が異なるオペレーティングシステムを使用することでした。
どのようにしてすべてを1つのサーバーで収集するのですか?
システムの使用に基づいたサンプル統計:
Mac OS〜66%;
Linux〜27%;
Windows〜7%。
そして、これらの3つのOSの背後に隠されているものと、ユーザーがそれらを構成する方法について詳しく説明します。
1)Mac OS- Time Machineを介して(Mac OSの最新バージョンでは、すぐにサポートされます。10.6未満にはなりません)、サーバー側-Netatalk 。
2) Windows-サーバー側の「バックアップと復元」による標準的な手段-Samba 。
3)Linux-いくつかのオプション:samba、rsync(パスワードアクセス); 完全なsshは不要であり、セキュリティ上の理由から無効になっています。
実行して、バックアップが必要なユーザーのユーザー管理インターフェイスがどのようになるかを示しましょう。

管理者は、既存のアカウントを選択するか、新しいアカウントを作成し、パスワードを生成して、オペレーティングシステムの種類を指定する必要があります。
ハードウェア
ストレージとして、サーバーは24個の3.5インチドライブと3 TBで構築されました。
各ドライブは個別にマウントされ、RAIDまたはLVMは使用されません-ドライブの1つが故障した場合、すぐに交換できます。 空き領域の不足の問題も解決されています。すべてのドライブから最大ボリュームを絞り出します。
「ユーザーのバックアップがあったディスクの1つが故障するとどうなりますか?」-あなたは尋ねます。 ディスクを交換した後、再度バックアップしてください。 24台のドライブのうち1台が従業員のラップトップで故障する可能性は非常に小さいです。 極端な場合、失われた情報を回復しようとします。
サーバーの主な機能は情報の保存であるため、CPUとメモリを記述することは意味がありません。最新のプロセッサはこのタスクに対処します。
クッキングディスク
各ディスクをフォーマットしてマウントします。
parted /dev/sd${i} -s mklabel gpt parted /dev/sd${i} mkpart primary 0GB 2996GB mkfs.ext3 /dev/sd${i}1
予約済みのスーパーユーザースペースを削除します。
tune2fs -m 0 /dev/sd${i}1
/ etc / fstabに各セクションを記述します
UUID=${UUID} /storage/sd${i}1 ext3 noatime,acl,user_xattr,usrquota 0 0
その結果、 / storage / sd $ {i}ディレクトリにディスクがマウントされます。 $ {i}はディスクの文字の1つです。
UUIDにバインドしてディスクをマウントすることをお勧めします。 ディスクの「混在」は排除されず、非常に多くのデバイスがあるため、突然のサーバーの再起動後、長い間正しいパスを復元する必要があります。
標準のLinuxツールを使用して、すべてのユーザーをファイルシステムのクォータに制限するため、このためにディスクを準備します。
quotacheck -cu /storage/sd${i}
ソフトウェア部
ネタトーク
このソリューションで最も難しいのはMac OS Xなので、まずはafpのセットアップから始めましょう。
必要なパッケージをインストールします。
rpm -Uvh libdb-4_8-4.8.30-18.6.x86_64.rpm rpm -Uvh db-utils-4.8.30-18.6.x86_64.rpm rpm -Uvh netatalk-2.2.4-3.7.x86_64.rpm rpm -Uvh netatalk-devel-2.2.4-3.7.x86_64.rpm
Netatalkはバージョン2を使用します。 バージョン3では*パス表示での変数の使用はサポートされていません ( http://netatalk.sourceforge.net/3.0/htmldocs/afp.conf.5.htmlのセクションVARIABLE SUBSTITUTIONS : パスでの変数の使用は現在サポートされていません )
次のフラグを使用してNetatalkパッケージを収集したことに注意してください。
--with-cracklib --with-bdb --enable-tcp-wrappers --enable-zeroconf
/etc/netatalk/AppleVolumes.defaultに行を追加します
~/TimeMachine "BackupMachine" allow:@backupuser cnidscheme:dbd options:usedots,upriv,tm volsizelimit:250000 dbpath:/local/netatalk/db/$u
その中:
allow:@backupuser
-backupuserグループのユーザーが接続できるようにします
BackupMachine
ユーザーに対して〜/ TimeMachineに物理的にマウントされたマップされたドライブとして表示される名前。
volsizelimit:250000
ユーザーがシステムクォータを設定していない場合のみ、ユーザーを250 GBのクォータに制限します。 なぜなら この場合、システムクォータを使用します。このオプションは役に立ちません。
tm
必須オプション。クライアント側のTimeMachineが、割り当てられたリソースをバックアップに有効であると認識できるようにします。
dbpath:/local/netatalk/db/$u
ユーザーメタデータ情報へのパス。 バックアップしたディレクトリとファイルのリストが作成される場合に必要です。 SSDなどの別のディスクに配置すると、より実用的です。
変数
$u
は、必要なユーザー名に置き換えられ、3番目のバージョンでは機能しません。
afpdロギングをオンにします。
/etc/nettalk/afpd.conf
に次の行を追加します
-setuplog "default log_info /var/log/afpd.log" -keepsessions -transall -savepassword
その中:
keepsessions
-afpdがオフになっているときにセッションを保存します。
transall
- AFP
transall
-AppletalkとAFP-over-TCPの両方のプロトコルが含まれます。
savepassword
ローカルキーチェーンのユーザーパスワードを記憶できます(このオプションがないと、TimeMachineはMac OS 10.8で動作しません)。
/etc/netatalk/netatalk.conf
ユーザーの最大数を100に増やす
AFPD_MAX_CLIENTS=100
Netatalkが完了しました。
afp://%SERVERNAME%/
ようなアドレスを使用して、標準のTime Machineアプリケーションを使用して接続できます
afp://%SERVERNAME%/
サンバ
Sambaは、WindowsとLinuxの両方に接続するために使用されます。
セットアップは非常に簡単です:
/etc/samba/smb.conf
追加し
/etc/samba/smb.conf
[global] security = user workgroup = Badoo netbios name = BadooBackup local master = no domain master = no preferred master = no socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_RCVBUF=8192 SO_SNDBUF=8192 [homes] comment = Home Directories valid users = %S writable = yes create mask = 0700 directory mask = 0700 browseable = No read only = No
これでセットアップは完了です。 Windowsでは、Linuxの「Explorer」を介して接続できます-システムにログインすると自動的にマウントされます。
アクセス制御
これで、ハードウェアとアプリケーションの作成は完了です。 ユーザーにいくつかのアクセス方法を提供する方法を理解することは残っています。
すでにユーザー管理システムがあります。つまり、通常のPuppetマニフェストを使用します。
ユーザーデータは直感的なMySQLテーブルに保存されます。
| backupusers | CREATE TABLE `backupusers` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL, `username` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL, `backup_username` varchar(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', `backup_server` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'backupmsk', `password` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', `password_smb` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, `shell` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '/bin/false', `map_drive` varchar(6) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'sdc', `quota` int(5) NOT NULL DEFAULT '250', `sftp` tinyint(1) NOT NULL DEFAULT '0', `isactive` tinyint(1) NOT NULL DEFAULT '0', `os` int(1) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
フレームワークはこのテーブルにデータを書き込みます。
いくつかの機能:
フィールド
`map_drive`
現在のユーザーに使用されるサーバー名とディスク名。 管理者によって設定されるのではなく、特定のセクションおよびサーバー上の占有スペースに応じて自動的に配布されます。 誰かに十分なスペースがない場合、データは別のセクションに転送されます。
`isactive`
フィールドは、従業員がサーバーをバックアップに使用できるかどうかを示します。 すべてのOSが非アクティブの場合、0になります。同時に、ユーザーデータは削除されません(たとえば、ラップトップを紛失した場合に便利です)。
`sftp`
フィールドを使用すると、ユーザーはrsyncを使用できます(詳細は以下を参照)。 この方法により、「高度な」同僚は自己記述スクリプトを使用してデータをバックアップできます。
テーブルを更新した後、各ユーザーのデータを含むマニフェストを生成するスクリプトが実行されます。
ユーザーディレクトリを便利に管理するには、マニフェストに関数を追加します。
define backupuser_dirs($name,$map_drive,$home="/home/${name}") { file { "$home": owner => $name, ensure => symlink, target => "/storage/${map_drive}/${name}", require => File["/storage/${map_drive}/${name}"]; "/storage/${map_drive}/${name}": owner => $name, ensure => directory, backup => false, mode => 0711; "$home/TimeMachine": owner => $name, ensure => directory, backup => false, mode => 0711, require => File["$home"]; } }
そして、ユーザーの1人によるPuppetのマニフェストからの抜粋は次のとおりです。
@user { "i.ableev": ensure => $hostname ? { /^%servername%$/ => present, # , default => absent, # , , }, home => "/home/i.ableev", # ; (!) /storage/$map_drive/$name uid => "1217", groups => ['backupuser'], # , password => 'V2UgYXJlIGhpcmluZyEgaHR0cDovL2NvcnAuYmFkb28uY29tL2pvYnMvCg==', # Netatalk rsync shell => "/bin/false", # shell, ssh } @backupuser_dirs { "i.ableev": name => "i.ableev", map_drive =>"sdh", # , /storage/$map_drive/$name require => User["i.ableev"]; } @exec { "i.ableev_quota": command => "/usr/sbin/setquota -u i.ableev 262144000 262144000 0 0 -a", # 250 … path => "/usr/sbin", onlyif => "/usr/bin/test `/usr/sbin/repquota -ua | /usr/bin/egrep '^i.ableev\s*' | /usr/bin/awk {'print \$4'}` -ne \"262144000\"", # … , 250 . } @line { "i.ableev_smb": # /etc/samba/smbpasswd : # @user:$uid:$hash file => '/etc/samba/smbpasswd', line => 'i.ableev:1217:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:5CDA711BBD899465D8F57D12BDF2BF68:[U ]:LCT-5058462B:', # }
ユーザーは、Mac OS、Windows、またはLinuxを使用してサーバーに接続できるようになりました。
rsync
(sshではなく)rsyncを介してアクセスを提供するには、chrootと機能が制限されたシェルを使用します。 この場合のマニフェストと機能は少し異なります。
define backupuser_dirs_sftp($name,$map_drive,$home) { file { "/home/${name}": owner => $name, ensure => symlink, target => "${home}", require => File["$home"]; "$home": ensure => directory, owner => root, mode => 0755; "$home/sftp": owner => $name, ensure => directory, backup => false, mode => 0711, require => File["$home"]; } } @user { "i.ableev": ensure => $hostname ? { /^backupmsk$/ => present, default => absent, }, home => "/storage/sdh/i.ableev", uid => "1217", groups => ['backupuser'], password => 'V2UgYXJlIGhpcmluZyEgaHR0cDovL2NvcnAuYmFkb28uY29tL2pvYnMvCg==', # shell => "/bin/badooshell", # shell rsync } @backupuser_dirs_sftp { "i.ableev": name => "i.ableev", map_drive =>"sdh", home => "/storage/sdh/i.ableev", # ~/sftp ― require => User["i.ableev"]; } @file { "/storage/sdh/i.ableev/bin": # chroot' ― badooshell ensure => directory, recurse => true, purge => true, force => true, backup => false, owner => root, group => root, source => "puppet:///modules/officebackup/bin/"; # } @file { "/storage/sdh/i.ableev/lib64": # , rsync: ld-linux-x86-64.so.2 libc.so.6 libpopt.so.0 ensure => directory, recurse => true, purge => true, force => true, backup => false, owner => root, group => root, source => "puppet:///modules/officebackup/lib64/"; }
すべてのマニフェストの準備ができました。
結果
結果として得られたもの:
- 72テラバイトの有用なデータを備えた安価なサーバー。
- 1つのサーバーには、すべての種類のユーザーオペレーティングシステムのバックアップがあります。
- バックアップを行いたいすべての人にアクセスが許可されます。
お楽しみください!
Ilya Ableev、 ableev 、Badoo Developmentオペレーションオフィサー
原作: dilbert.com/strips/comic/2007-11-21