Hello,
Introduction:
Guide is for people interested to migrate their lansweeper database running on MSSQL Standalone or HA - MSSQL Failover Cluster Instances to running in MSSQL AlwaysOn AvailabilityGroup.
Fair Warning:
This is a non-standard instalation and if unsure of what you doing it's better to stop before proceeding. This setup is currently not tested by Lansweeper scenario and support may have problems troubleshooting if you overcome issues with running on it.
Not-included:
Instruction on how to create or configure application server, web server or sql server is outside of scope of this guide, but following configuration was made beforehand.
Server |
Role |
|
Lansweeper web and scanning server
|
|
Node01 of SQL AoAG |
|
|
|
Name of instance running on sqlnode0x
|
|
Availability Group of sql nodes
|
|
Availability Group Listener of sql nodes.
|
Steps:
/** Run with T-SQL **/
USE lansweeperdb;
GO
BACKUP DATABASE lansweeperdb
TO DISK = 'c:\tmp\lansweeperdb.bak'
WITH FORMAT,
MEDIANAME = 'Lansweeperdb',
NAME = 'Full Backup of lansweeperdb';
GO
- detach old database to ommit uncorrect database point on service
/** Run with T-SQL **/
use master;
go
sp_detach_db lansweeperdb
- move backup to first sqlnode01
robocopy c:\tmp\ \\sqlnode01\temp\ lansweeperdb.bak
- If servers are already deployed to prod, perform planned failover to sqlnode02, as we need to reboot sqlnode01 later on.
--- YOU MUST EXECUTE THE FOLLOWING SCRIPT IN SQLCMD MODE.
:Connect sqlnode02\instance01
:Connect sqlnode01\instance01
ALTER AVAILABILITY GROUP [availabilitygroup-01] FAILOVER;
GO
GO
USE [master]
RESTORE DATABASE [lansweeperdb]
FROM DISK = N'C:\tmp\lansweeper.bak'
WITH FILE = 1,
MOVE N'lansweeperdb' TO N'D:\path\to\your\sql\data\lansweeperdb.mdf',
MOVE N'lansweeperdb_log' TO N'D:\path\to\your\sql\Log\lansweeperdb_log.LDF',
NOUNLOAD, REPLACE, STATS = 5
GO
- ​on sqlnode01 - set database to Full
USE [master] ;
ALTER DATABASE [lansweeperdb] SET RECOVERY FULL ;
- on sqlnode01 - perform full backup to start log chain
USE lansweeperdb;
GO
BACKUP DATABASE lansweeperdb
TO DISK = 'c:\tmp\lansweeperdb2.bak'
WITH FORMAT,
MEDIANAME = 'Lansweeperdb',
NAME = 'Full Backup of lansweeperdb';
GO
- on sqlnode01 - modify password in script below to your needs and restore user
USE lansweeperdb;
GO
DROP SCHEMA lansweeperuser;
GO
DROP USER lansweeperuser;
GO
EXECUTE sp_droplogin
lansweeperuser;
GO
USE MASTER;
GO
EXEC sp_addlogin
'lansweeperuser',
'hard2guessuserpassword!',
'lansweeperdb',
[English];
GO
USE lansweeperdb;
GO
EXEC sp_grantdbaccess
'lansweeperuser',
'lansweeperuser';
GO
EXEC sp_addrolemember
[db_owner],
'lansweeperuser';
GO
- on sqlnode01 - Query SID of lansweeperuser and write down the SID
USE MASTER
GO
SELECT name, sid FROM sys.sql_logins where name ='lansweeperuser'
go
- connect to sqlnode02 and create account with the SID from 13.
CREATE Login lansweeperuser WITH password = 'hard2guessuserpassword!', SID = 0x12345678901234567890123456789012
- ​on sqlnode02 - reverse failover availablity group to sqlnode01, where you created your lansweeperdb
--- YOU MUST EXECUTE THE FOLLOWING SCRIPT IN SQLCMD MODE.
:Connect sqlnode02\instance01
:Connect sqlnode01\instance01
ALTER AVAILABILITY GROUP [availabilitygroup-01] FAILOVER;
GO
GO
- add lansweeperdb to availabilitygroup
--- EXECUTE IN SQLCMD MODE.
-- CONNECTS TO PRIMARY NODE AND ADDS REPLICA WITH SEEDING SET TO AUTO(default)
:Connect sqlnode01\instance01
USE [master]
GO
ALTER AVAILABILITY GROUP [availabilitygroup-01]
MODIFY REPLICA ON N'sqlnode02\instance01' WITH (SEEDING_MODE = AUTOMATIC)
GO
--- ADDS DATABASE TO AG
USE [master]
GO
ALTER AVAILABILITY GROUP [availabilitygroup-01]
ADD DATABASE [lansweeperdb];
GO
--- CONNECTS TO SECONDARY NODE AND GRANTS PRIVILEGE TO CREATE DATABASE
:Connect sqlnode02\instance01
ALTER AVAILABILITY GROUP [availabilitygroup-01] GRANT CREATE ANY DATABASE;
GO
GO
- Connect via SSMS to your database server sqlnode02 and check replication status.
After 16. the sqlnode02 should display status of database (Restoring..), as it is creating database and synchronising it (via restore).
![hubertmroz_2-1684790751416.png hubertmroz_2-1684790751416.png](/t5/image/serverpage/image-id/3024i33FEF993209B75B1/image-size/medium?v=v2&px=400)
After approx. 15 minutes, depending on size, connecting to both sql nodes should display that lansweeperdb is in (Synchronised) state and you can continue.
![hubertmroz_1-1684790746848.png hubertmroz_1-1684790746848.png](/t5/image/serverpage/image-id/3023i2F6FCF64C227CA5E/image-size/medium?v=v2&px=400)
- Run the ConfigEditor tool, found at on the servers hosting your Lansweeper Server service and web console.
In data source field provide availabilitygroup listener name with instance name, in our example
listener-01\instance01.
In password field, provide password provided in user account creation.
![hubertmroz_0-1684790734584.png hubertmroz_0-1684790734584.png](/t5/image/serverpage/image-id/3022i675777B26F70FA0C/image-size/medium?v=v2&px=400)
- Start Lansweeper service and iis express service/ or start IIS Site hosting your Lansweeper servive
- Check in web interface that Current Database in /Configuration is properly connected to listener-01
Known error:
The following errors may be visible in errorlog.txt in /bin after installation and during failover. Those are normal erros, logged due to application losing connection during failover of databases to instance. Regular failovers with only lansweeperdb, takes approx. 10 seconds and grows with the amount to data being saved before closing connection and switching it node running PRIMARY role. If timestamps between first and last occurance of logs are within 30s than those can be safely ignored, but times vary between light/heavily used instances.
System.Data.SqlClient.SqlException (0x80131904): The connection is broken and recovery is not possible. The client driver attempted to recover the connection one or more times and all attempts failed. Increase the value of ConnectRetryCount to increase the number of recovery attempts. ---> System.Data.SqlClient.SqlException (0x80131904): Unable to access availability database 'lansweeperdb' because the database replica is not in the PRIMARY or SECONDARY role. Connections to an availability database is permitted only when the database replica is in the PRIMARY or SECONDARY role. Try the operation again later.
The connection is broken and recovery is not possible. The client driver attempted to recover the connection one or more times and all attempts failed. Increase the value of ConnectRetryCount to increase the number of recovery attempts.
@Lansweeper if you could help me with the formatting, cause I can't remove all the space and change bullet > numbered list without crashing HTML - I'll be really glad. Thank you and I welcome any feedback. 🙂
Regards, Hubert