NetAppで公開鍵認証を使用してCentOS7からSnapmirrorスクリプトをキックする

CentOS7からSCSI接続されたNetAppボリュームをNetAppでSnapmirrorすると、
OS側から見て不整合なデータが同期される可能性があります。

理屈:
NetAppのボリュームをLinuxでNFSマウントした場合
I/OをコントロールするのはストレージのNetApp側で
NetAppの機能であるSnapmirrorしても整合性が取れている。

NetAppのボリュームをLinuxでiSCSI接続した場合
I/OをコントロールするのはLinux側で、NetAppの機能である
Snapmirrorを行うとデータ不整合が発生する可能性がある。

対策として、Linux側でsyncコマンドを発行した直後にNetApp側にsnapmirror即時実行の指示を出すという
スクリプトを動作をさせます。

Linux側からNetAppはsshで接続します。
パスワード入力を求められないようにする為に
公開鍵認証を設定します。

(sshpassコマンドをインストールすると公開鍵認証設定は不要ですが、
スクリプトにパスワードを記述する必要があるので、ここでは公開鍵認証の手順とします。)

1.Linuxマシンでの操作

公開鍵の作成
ssh-keygen -t rsa -b 2048

公開鍵の内容確認(後でこの結果をnetappで貼り付けます)
cat /root/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCfHLk/g/vpp63ZcGhOOXFulGAI+2Mzz0ZeN2aTEMV6Od/FVDU1COXBEkXBseR7WcKuCcLRswk4sBqV1DcFu/IoALXbBEKTb+5R0u/rSa6EBitniQ10brzGXKCC97z7warVhLKSOFjjejKkHkaZBwXkRZF85AItUzA324FvxB604tnE2oXA

+pph4saMDutsY1HDQDepmYugo33ct41jpWd1R9YgQNg/rNpBRgUR8HvrU9zKfzZyNq6LKdRcRbnTe8jXSeEG2q9tmQTCwoirKTJnsetQFuXIpWMjdThA9L7Sqp9K416gTIH749duQX9Yk+WrF00u6AhCW4mjvWZDZ24N root@centos7

2.NetAppでの操作

公開鍵認証用ユーザsnapを作成
security login create -user-or-group-name snap -authmethod publickey -application ssh -role admin -vserver cluster1

ユーザsnapに公開鍵を割り当て
security login publickey create -username snap -index 5 -publickey “ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCfHLk/g/vpp63ZcGhOOXFulGAI+2Mzz0ZeN2aTEMV6Od/FVDU1COXBEkXBseR7WcKuCcLRswk4sBqV1DcFu/IoALXbBEKTb

+5R0u/rSa6EBitniQ10brzGXKCC97z7warVhLKSOFjjejKkHkaZBwXkRZF85AItUzA324FvxB604tnE2oXA

+pph4saMDutsY1HDQDepmYugo33ct41jpWd1R9YgQNg/rNpBRgUR8HvrU9zKfzZyNq6LKdRcRbnTe8jXSeEG2q9tmQTCwoirKTJnsetQFuXIpWMjdThA9L7Sqp9K416gTIH749duQX9Yk+WrF00u6AhCW4mjvWZDZ24N root@centos7″

ユーザsnapへの公開鍵の割り当て確認
security login publickey show -username snap

3.Linuxでの操作

接続確認
初回はリプライが返るのでyを返して下さい

ssh snap@192.168.0.50

snapmirrorするスクリプトの作成
vi /home/sasaki/netapp_snap_script.sh

パーミッション設定
chmod 755 /home/sasaki/netapp_snap_script.sh

スクリプトの実行
/home/sasaki/netapp_snap_script.sh

netapp_snap_script.shの内容

storage_ip=”192.168.0.50″
storage_user=”snap”

log_file_dir=”/home/sasaki/netapp_snap_script/log”
log_file_name=”snapmirror.log”
execution_date=date +%Y_%m_%d_%H_%M

function storage_work()
{

echo “” >> $log_file_dir/$log_file_name.$execution_date
echo “STORAGE WORK !!” >> $log_file_dir/$log_file_name.$execution_date
echo “Connecting to the storage and executing snapmirror command”
echo””>> $log_file_dir/$log_file_name.$execution_date
echo “###################################################################################” >> $log_file_dir/$log_file_name.$execution_date
echo “Connecting to the storage and executing snapmirror command” >> $log_file_dir/$log_file_name.$execution_date
echo “###################################################################################” >> $log_file_dir/$log_file_name.$execution_date

ssh $storage_user@$storage_ip “snapmirror update -destination-path cifs:cifs_data_bk” 2>&1 >> $log_file_dir/$log_file_name.$execution_date
ssh_return=$?

if [ $ssh_return != 0 ]
then
echo “ERROR!!! while executing SSH!!”
echo “ERROR!!! while execution ssh to storage, the return is $sshpass_return” >> $log_file_dir/$log_file_name.$execution_date
echo “check the logfile $log_file_dir/$log_file_name.$execution_date”
end_backup
exit $ssh_return;
fi

}

echo Snapmirror script is started , logging to : $log_file_dir/$log_file_name.$execution_date
sync;sync;sync
storage_work

===========================================

Comments are closed.