MS-SQL Server在Ubuntu启动期间因Pacemaker故障转移而崩溃

我在Ubuntu Server 16.04 LTS上安装了mssql-server和mssql-server-ha。 我在两个节点上使用drbd起搏器corosync试图控制两个节点之间的自动故障转移。 crm status显示2个错误:

 Failed Actions: * res_mssql_monitor_5000 on hostname2 'invalid parameter' (2): call=57, status=complete, exitreason='2017/11/09 12:33:01 Expected local server name to be res_mssql but it was hostname1', last-rc-change='Thu Nov 9 12:33:01 2017', queued=0ms, exec=5241ms * res_mssql_start_0 on hostname2 'unknown error' (1): call=6086, status=complete, exitreason='SQL Server crashed during startup.', last-rc-change='Thu Nov 9 12:32:39 2017', queued=0ms, exec=24329ms 

(实际主机名称replace为“hostname1和hostname2”)

TL; DR如果有人已经成功configuration了一个带有浮动IP的Linux设置的双节点起搏器/ corosync / drbd MS-SQL,我很想知道我在做什么错误。 如果你需要额外的configuration或日志文件,请让我知道。


我不知道它在哪里find实际的hostname1和rs_mssql作为预期的主机名。 上面的错误是在主机名2上,所以我认为它可能是当我在初始设置过程中从主机名1复制到主机名2的configuration文件。

我的crmconfiguration:

(注意:我还没有攻击IPaddr2问题;我的ens160和ens192为我的常规IP地址,我想稍后configuration一个IP别名为ip_mssql,用于公用IP访问SQL服务器)

 node 1: hostname1 \ attributes node 2: hostname2 \ attributes primitive ip_mssql IPaddr2 \ params ip=(virt IP addr) iflabel=ip_mssql \ #I think iflabel is wrong op monitor interval=5s nic=ip_mssql \ meta target-role=Stopped primitive res_drbd_mssql ocf:linbit:drbd \ params drbd_resource=mssql \ op start interval=0 timeout=240s \ op stop interval=0 timeout=120s primitive res_fs_mssqlData Filesystem \ params device="/dev/drbd0" directory="/var/opt/mssql/data" fstype=xfs \ op start interval=0 timeout=60s \ op stop interval=0 timeout=120s primitive res_fs_mssqlLog Filesystem \ params device="/dev/drbd1" directory="/var/opt/mssql/log" fstype=xfs \ op start interval=0 timeout=60s \ op stop interval=0 timeout=120s primitive res_fs_mssqlTempDB Filesystem \ params device="/dev/drbd2" directory="/var/opt/mssql/tempDB" fstype=xfs \ op start interval=0 timeout=60s \ op stop interval=0 timeout=120s primitive res_mssql ocf:mssql:fci \ op monitor interval=5s timeout=30s \ op start interval=0 timeout=60s \ op stop interval=0 timeout=60s group mssqlserver res_fs_mssqlData res_fs_mssqlLog res_fs_mssqlTempDB ip_mssql ms ms_drbd_mssql res_drbd_mssql \ meta notify=true master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 colocation col_mssql_drbd inf: mssqlserver ms_drbd_mssql:Master order ord_mssql inf: ms_drbd_mssql:promote mssqlserver:start property cib-bootstrap-options: \ have-watchdog=false \ dc-version=1.1.14-70404b0 \ cluster-infrastructure=corosync \ cluster-name=mssqlserver \ stonith-enabled=false \ start-failure-is-fatal=false \ last-lrm-refresh=1510177588 \ startup-fencing=true \ enable-startup-probes=true \ symmetric-cluster=true \ stop-orphan-actions=true \ stonith-action=reboot \ remove-after-stop=false \ stop-all-resources=false \ stop-orphan-resources=true \ no-quorum-policy=ignore \ is-managed-default=true 

我可以手动启动mssql-server就好了:

 sudo systemctl start mssql-server sudo systemctl status mssql-server mssql-server.service - Microsoft SQL Server Database Engine Loaded: loaded (/lib/systemd/system/mssql-server.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2017-11-09 12:49:21 CST; 1s ago Docs: https://docs.microsoft.com/en-us/sql/linux Main PID: 3368 (sqlservr) Tasks: 62 Memory: 171.0M CPU: 1.770s CGroup: /system.slice/mssql-server.service 3368 /opt/mssql/bin/sqlservr 3371 /opt/mssql/bin/sqlservr Nov 09 12:49:21 hostname2 systemd[1]: Started Microsoft SQL Server Database Engine. 

这些是我在/var/opt/mssql/log/errorlog发现的唯一实际错误:

 2017-11-09 12:49:28.17 spid4s Service Master Key could not be decrypted using one of its encryptions. See sys.key_encryptions for details. 2017-11-09 12:49:28.17 spid4s An error occurred during Service Master Key initialization. SQLErrorCode=33095, State=8, LastOsError=0. 2017-11-09 12:49:31.14 spid22s The Service Broker endpoint is in disabled or stopped state. 2017-11-09 12:49:31.14 spid22s The Database Mirroring endpoint is in disabled or stopped state. 2017-11-09 12:49:31.17 spid22s Service Broker manager has started. 2017-11-09 12:49:31.37 spid4s Recovery is complete. This is an informational message only. No user action is required. 

手动drbd故障切换可以通过umount /dev/drbd0 /dev/drbd1 /dev/drbd2drbdadm secondary mssql ,然后在新的主drbdadm primary mssqldrbdadm primary mssql和mount …)上反转该进程。

我的/etc/drbd.d/mssql.res conf(/etc/drbd.d/global_common.conf在存储库中不变):

 resource mssql { handlers { split-brain "/usr/lib/drbd/notify-split-brain.sh root"; } net { after-sb-0pri discard-least-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } volume 0 { device minor 0; disk /dev/VG-SqlData/LV-SqlData; meta-disk internal; } volume 1 { device minor 1; disk /dev/VG-SqlLogs/LV-SqlLogs; meta-disk internal; } volume 2 { device minor 2; disk /dev/VG-TempDB/LV-TempDB; meta-disk internal; } syncer { rate 35M; verify-alg md5; } on hostname1 { address <ip addr1>:7788; } on hostname2 { address <ip addr2>:7788; } } 

尝试使用systemd来启动服务: crm configure edit res_mssql

编辑configuration,使其如下所示:

 primitive res_mssql systemd:mssql-server \ op monitor interval=30s timeout=30s \ op start interval=0 timeout=60s \ op stop interval=0 timeout=60s 

这应该完成同样的事情。 但是,我可以想象资源代理可以采取一些额外的参数,这可能是所有这些都需要按照您尝试的方式工作。

我会build议检查RA信息,看看你是否可以找出你失踪的参数: crm ra info ocf:mssql:fci