CLUSTERPRO + SQL Server

参考マニュアル: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

yum install -y mssql-server

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]

vim /var/opt/mssql/ACT.SQL

create database test on
(filename = '/mnt/sdc2/mssql/data/test_data.mdf'),
(filename = '/mnt/sdc2/mssql/data/test_log.ldf')
for attach


vim /var/opt/mssql/DEACT.SQL

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