1 votos

MS-SQL Server se estrelló durante el inicio en Ubuntu con Marcapasos de conmutación por error

He instalado mssql-y mssql server-servidor-ha en un Servidor Ubuntu 16.04 LTS. Estoy usando drbd en dos nodos, con marcapasos y corosync intentar controlar la conmutación automática por error entre los dos nodos. crm status muestra 2 errores:

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

(real de nombres de host reemplazado con "hostname1 y hostname2")

TL;DR Si alguien ha logrado configurar un nodo de dos marcapasos/corosync/drbd MS-SQL en la instalación de Linux con una IP flotante, estoy interesado en saber lo que estoy haciendo mal. Si usted requiere adicionales de configuración o archivos de registro, por favor hágamelo saber.


No sé donde encontrar el real hostname1 vs rs_mssql como la espera de nombre de host. El error anterior es en hostname2, así que creo que podría haber sido cuando he copiado un archivo de configuración de hostname1 a hostname2 durante la configuración inicial.

Mi configuración de crm:

(Nota: yo no he atacado a la IPaddr2 problema; tengo ens160 y ens192 para mi regular las direcciones IP, y quiero más tarde configurar un IP alias como ip_mssql para la IP pública de acceso a SQL server)

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

Puedo iniciar manualmente mssql-servidor de bien:

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.

Estos son los únicos reales de los errores que he encontrado en /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.

Manual de drbd de conmutación por error de obras por umount /dev/drbd0 /dev/drbd1 /dev/drbd2 y drbdadm secondary mssql, luego revertir ese proceso en el nuevo primario (drbdadm primary mssql y el monte...).

Mi /etc/drbd.d/mssql.res conf (/etc/drbd.d/global_common.conf es inalterada desde los repositorios):

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;
   }
}

2voto

Matt Kereczman Puntos 410

Trate de usar systemd para iniciar el servicio en su lugar: crm configure edit res_mssql

Editar la configuración de modo que se lee así:

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

Que debe hacer la misma cosa. Sin embargo, me imagino que el recurso de agente podría tomar un par de parámetros adicionales, lo que podría ser todo lo que se necesita para que funcione de la manera que lo habían intentado.

Sugiero que lo consultes con el RA info para ver si usted puede averiguar qué parámetros que te estás perdiendo: crm ra info ocf:mssql:fci

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: