参考マニュアル:CLUSTERPRO X for Linux PPガイド (SQL Server)
node1: mmm121 CentOS7 SQL Server 2017
node2: mmm122 CentOS7 SQL Server 2017
iSCSItarget: mmm123 CentOS7
管理サーバ: mmm161 Windows Server2012R2
node1,node2のメモリサイズ4G
構築手順
1. フェイルオーバグループの作成
→「CLUSTERPROインストール」参照
2. SQL Server のインストール[node1,node2]
-- Install SQL Server
yum update -y
curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo
rpm -qi mssql-server
rpm -ql mssql-server
/opt/mssql/bin/mssql-conf setup
systemctl status mssql-server
systemctl restart mssql-server
systemctl disable mssql-server
-- Install the SQL Server command-line tools
curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo
yum install -y mssql-tools unixODBC-devel
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
su - mssql
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
exit
3. ユーザデータベースの作成[node1]
mkdir -p /mnt/sdc2/mssql/data
chown -R mssql:mssql /mnt/sdc2/mssql
chmod -R 755 /mnt/sdc2/mssql
sqlcmd -S localhost -U SA -P 'Aaa!1234'
create database test on PRIMARY (
name = 'test_data',
filename = '/mnt/sdc2/mssql/data/test_data.mdf',
size = 10
)
LOG ON (
name = 'test_log',
filename = '/mnt/sdc2/mssql/data/test_log.ldf',
size = 10
)
go
CHECKPOINT
go
4. SQL Server のスクリプト作成[node1,node2]
create database test on
(filename = '/mnt/sdc2/mssql/data/test_data.mdf'),
(filename = '/mnt/sdc2/mssql/data/test_log.ldf')
for attach
alter database test set offline with ROLLBACK IMMEDIATE
exec sp_detach_db 'test',TRUE
chown mssql:mssql /var/opt/mssql/ACT.SQL /var/opt/mssql/DEACT.SQL
chmod 664 /var/opt/mssql/ACT.SQL /var/opt/mssql/DEACT.SQL
5. CLUSTERPRO への SQL Server サービスの組み込み[管理サーバ]
--start.sh
#! /bin/sh
#***************************************
#* start.sh *
#***************************************
#ulimit -s unlimited
if [ "$CLP_EVENT" = "START" ]
then
if [ "$CLP_DISK" = "SUCCESS" ]
then
echo "NORMAL1"
systemctl start mssql-server
sleep 30
su -l mssql -c 'sqlcmd -U sa -P Aaa!1234 -i /var/opt/mssql/ACT.SQL -o /var/opt/mssql/ACT.LOG -S .'
if [ "$CLP_SERVER" = "HOME" ]
then
echo "NORMAL2"
else
echo "ON_OTHER1"
fi
else
echo "ERROR_DISK from START"
exit 1
fi
elif [ "$CLP_EVENT" = "FAILOVER" ]
then
if [ "$CLP_DISK" = "SUCCESS" ]
then
echo "FAILOVER1"
systemctl start mssql-server
sleep 30
su -l mssql -c 'sqlcmd -U sa -P Aaa!1234 -i /var/opt/mssql/ACT.SQL -o /var/opt/mssql/ACT.LOG -S .'
if [ "$CLP_SERVER" = "HOME" ]
then
echo "FAILOVER2"
else
echo "ON_OTHER2"
fi
else
echo "ERROR_DISK from FAILOVER"
exit 1
fi
else
echo "NO_CLP"
exit 1
fi
echo "EXIT"
exit 0
--stop.sh
#! /bin/sh
#***************************************
#* stop.sh *
#***************************************
#ulimit -s unlimited
if [ "$CLP_EVENT" = "START" ]
then
if [ "$CLP_DISK" = "SUCCESS" ]
then
echo "NORMAL1"
su -l mssql -c 'sqlcmd -U sa -P Aaa!1234 -i /var/opt/mssql/DEACT.SQL -o /var/opt/mssql/DEACT.LOG -S .'
systemctl stop mssql-server
sleep 10
if [ "$CLP_SERVER" = "HOME" ]
then
echo "NORMAL2"
else
echo "ON_OTHER1"
fi
else
echo "ERROR_DISK from START"
exit 1
fi
elif [ "$CLP_EVENT" = "FAILOVER" ]
then
if [ "$CLP_DISK" = "SUCCESS" ]
then
echo "FAILOVER1"
su -l mssql -c 'sqlcmd -U sa -P Aaa!1234 -i /var/opt/mssql/DEACT.SQL -o /var/opt/mssql/DEACT.LOG -S .'
systemctl stop mssql-server
sleep 10
if [ "$CLP_SERVER" = "HOME" ]
then
echo "FAILOVER2"
else
echo "ON_OTHER2"
fi
else
echo "ERROR_DISK from FAILOVER"
exit 1
fi
else
echo "NO_CLP"
exit 1
fi
echo "EXIT"
exit 0
6. 監視リソースの設定[管理サーバ]
タイプ:custom monitor
名前: mssql_mon
監視タイプ:同期
--genw.sh
#! /bin/sh
#***********************************************
#* genw.sh *
#***********************************************
ulimit -s unlimited
CNT=`ps -ef | grep /opt/mssql/bin/sqlservr | grep -v grep | wc -l`
if [ $CNT -ne 2 ]; then
exit 1
fi
exit 0
7. ログイン情報の引継ぎ
現用系側で SQL Server 認証ログインを作成した場合、待機系側へのフェイルオーバ後に当該ロ
グインを有効にするには、以下のいずれかの方法を実施する必要があります。
sa については SID が固定のため、本対処は不要です。
【方法1】 現用系と待機系で同じログインを作成する
【方法2】 包含データベースを使用する
【方法2】 包含データベースを使用する
1)現用系側で包含データベースを有効化します。
sp_configure 'contained database authentication', 1
reconfigure
go
2)対象の SQL Server 用のフェイルオーバグループを待機系側へフェイルオーバします。
3)待機系側で包含データベースを有効化します。
sp_configure 'contained database authentication', 1
reconfigure
go
4)対象の SQL Server 用のフェイルオーバグループを現用系側へフェイルバックします。
5)現用系側で、フェイルオーバ対象のデータベースを部分的包含に設定します。
use master
go
alter database test set containment = partial
go
6)現用系側でフェイルオーバ対象のデータベース上に包含データベース ユーザを作成します。
use test
go
create user testuser with password = 'Aaa!1234'
go
sqlcmd -S localhost -U testuser -P 'Aaa!1234' -d test
7)
対象の SQL Server 用のフェイルオーバグループを待機系側へフェイルオーバします。
正常にデータベースがアタッチされ、手順6) で作成したユーザがログインできることを確認しま
す。
sqlcmd -S localhost -U testuser -P 'Aaa!1234' -d test