Installation Warm Standby avec Sybase Replication Server

Fabien Celaia

- Titre : Installation Warm Standby avec Sybase Replication Server

- Auteur : Fabien Celaia

- Parution : 30 mai 2006

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Fabien Celaia. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Comptes/logins

- II-A. Synchronisation

- II-B. Changement du mot de passe

- III. Installation de Sybase Replication Server

- III-A. Programme binaire

- III-B. rs_init

- IV. Paramétrage de la base référentielle

- V. Paramétrage du Replication Server

- V-A. Création de la connexion logique

- V-B. Ajout des bases de données dans le système de réplication

- V-B-1. Pour la base primaire

- V-B-2. Pour la base répliquée en WSB

- V-C. Warm Standby automatique

- VI. Installation du Replication Server Manager

- VII. Procédure de bascule

- VII-A. Procédure de bascule en cas de crash/non planifiée

- VII-A-1. Bascule de ASESource à ASECible

- VII-A-2. Resynchronisation de ASECible à ASESource

I - Introduction

Nous posons ici les postulats de départ

Composant

Nom générique pour cet article

ASE Source

ASESource

ASE Cible

ASECible

Réplication Server

ASE_RS

Base référentielle du RS

ASE_RS_RSSD

Replication Server Manager

ASE_RSM

Base de données source et cible

MaBase

SA pour ASE source et cible

sa, pwd Null

SA pour RS

sars, pwd sarssars

Maintenance user

rs_maint

II - Comptes/logins

II-A - Synchronisation

De par le risque de désynchronisation des logins/users sous ASE, on fera en sorte que le serveur ASE cible ait la même table des logins que le serveur source.

Chaque création de login doit se faire dès à présent sur les deux serveurs ASE de manière parallèle. La méthode la plus judicieuse serait de créer une procédure stockée répliquée sp__addlogin, compte tenu du fait que sp_addlogin ne peut être répliquée (procédure système).

En cas de désynchronisation des logins entre les deux sites, purge des logins sur le site secondaire :

isql -Usa -P -SASECible -D master
sp_configure 'allow updates', 1
go

delete syslogins where name not in ('sa', 'sars','ASE_RS_RSSD_prim', ASE_RS_RSSD_maint')
go

delete sysloginroles from   syslogins l, sysloginroles r
where  l.suid = r.suid and  l.name not in ('sa', 'sars', 'ASE_RS_RSSD_prim', 'ASE_RS_RSSD_maint')
go

puis rechargement des logins de la base primaire par commandes bcp :

bcp master..sysloginroles out loginroles.bcp -Usa -P -SASESource -c
bcp master..syslogins in logins.bcp -Usa -P -SASECible -c -b1
bcp master..sysloginroles in loginroles.bcp -Usa -P -SASECible -c -b1

II-B - Changement du mot de passe

L'installation du Replication Server a été faite en se basant sur le login sa de base (sans mot de passe). L'option de cryptage des logins n'a pas été enclenchée, ce qui fait que les logins et les mots de passe sont visibles dans les scripts de configuration de la réplication (visibles pour toute personne ayant accès au login sybase).

Pour changer ensuite le mot de passe SA, veuillez suivre scrupuleusement la procédure suivante (cette procédure est aussi valable pour les logins de maintenance et de primary users) :

1. Stopper le Replication Server ;

2. Se connecter à ASECible en tant que sa ;

3. Changer son mot de passe (sp_password) ;

4. Modifier les mots de passe des fichiers de configuration de la réplication pour les logins SA ;

5. Redémarrer le Replication Server.

III - Installation de Sybase Replication Server

III-A - Programme binaire

Avant la version 12, il était absolument nécessaire que replication Server et Adaptive Server soient de même niveau de version afin que les bibliothèques communes puissent cohabiter. Dans le cas de deux versions spécifiques, on utilise alors deux arborescences Sybase spécifiques, ce qui, selon le système d'exploitation, s'avère être la croix et la bannière.

Dès la version 12, Sybase offre une arborescence spécifique multiversion. Celà simplifie considérablement l'installation d'un ASE et d'un RS.

III-B - rs_init

Pour s'éviter certains problèmes de configuration, insérez dans les fichiers $SYBASE/interfaces de vos serveurs source (ASESource) et cible (ASECible) les entrées suivantes

Service

Protocole

Adresse IP

Port

ASECible

tli

IP du host de ASECible

5100

ASE_RS

tli

IP du host de ASECible

5400

ASE_RSM

tli

IP du host de ASECible

5500

Après avoir démarré $SYBASE/install/rs_init, choisissez

- 1. Release directory : /opt/sybase ;

- 2. Configure a server product ;

- 1. Replication Server ;

- 1. Install a new Replication Server.

1. Replication Server Information

1. Replication Server Name

Attention de bien coller à la configuration du serveur si c'est possible (sp_helpsort)

Rien de spécial à spécifier au sujet du ID Server (ASECible)

Dans notre cas, les devices pour la base référentielle de la réplication (ASECible_RS_RSSD) ont été créés au préalable.

IV - Paramétrage de la base référentielle

Se connecter ensuite au serveur ASECible et paramétrer la réplication

use ASE_RS_RSSD
go
update rs_config set charvalue="80" where optionname ="num_threads"
update rs_config set charvalue="100" where optionname ="init_sqm_write_delay"
update rs_config set charvalue="100" where optionname ="init_sqm_write_max_delay"
update rs_config set charvalue="1024" where optionname ="num_mutexes"
update rs_config set charvalue="10" where optionname ="memory_max"
update rs_config set charvalue="8192" where optionname ="dsi_cmd_batch_size"
update rs_config set charvalue="51" where optionname ="sqm_warning_thr_ind"
update rs_config set charvalue="40" where optionname ="memory_max"
update rs_config set charvalue="200" where optionname ="num_concurrent_subs"
go

V - Paramétrage du Replication Server

V-A - Création de la connexion logique

C'est au travers de cette connexion logique que la réplication va se passer. Son utilisation - contrairement à une connexion physique de réplication "classique"- permet un switch quasi instantané d'un serveur à l'autre.

%SYBASE/bin/isql -Usa -P -S ASE_RS
create logical connection to LDS.MaBase_LDB
go

V-B - Ajout des bases de données dans le système de réplication

En utilisant rs_init, on va insérer la base primaire (MaBase de ASESource) et la base Warm (MaBase de ASECible). Cette base Warm Standby va devoir être initialisée par un load/dump pendant que la base de production continue à être en ligne. Cela va nous obliger à utiliser le Dump Marker.

Démarrez donc rs_init et suivez l'option 2 (Add a database to the replication system) pour chacune des deux bases de données

- 1. Replication Server information : spécifiez ASECible_rs

- 2. Database information

V-B-1 - Pour la base primaire

1. SQL Server name : ASESource

2. SA user : sa

3. SA password :

4. Database name : MaBase

5. Will the database be replicated : yes

6. Maintenance user : MaBase_maint

7. Maintenance password : MaBase_maint_ps

8. Is this a physical Connection for Existing Logical Connection : yes

9. Logical DB Setup

1. Is is an Active Connection or a Standby Connection : Active

2. Logical DS name : LDS

3. Logical DB Name : MaBase_LDB

Le maitenance User de ASESource.MaBase doit être créée sur ASECible.MaBase, et tous les droits sur tous les objets doivent lui être attribués.

V-B-2 - Pour la base répliquée en WSB

1. SQL Server name : ASECible

2. SA user : sa

3. SA password :

4. Database name : MaBase

5. Will the database be replicated : yes

6. Maintenance user : MaBase_maint

7. Maintenance password : MaBase_maint_ps

8. Is this a physical Connection for Existing Logical Connection : yes

9. Logical DB Setup

1. Is is an Active Connection or a Standby Connection : Standby

2. Logical DS name : LDS

3. Logical DB Name : MaBase_LDB

4. Physical DS name : ASESource

5. Physical DB name : MaBase

6. Active DB SA user : sa

7. Active DB SA password :

8. Initialize standby using dump and load : yes

9. Use Dump Marker to Start Replicating to Standby : yes

V-C - Warm Standby automatique

Dès la version 11.5 du Replication Server, la procédure stockée sp_reptostandby permet de gérer une réplication Warm StandBy automatique, ajoutant la possibilité de répliquer les ordres DDL.

sp_reptostandby MaBase, ['all', 'none']

1. Sauvegarder la base primaire sous ASESource : dump database MaBase to '/dev/tape/wsb'

2. Recharger la base sur ASECible : load databse MaBase from '/dev/tape'

3. Exécuter sp_reptostandby MaBase, 'all' dans ASECible et ASESource, depuis la base MaBase

4. Résumer les connexions du replication server

%SYBASE/bin/isql -Usa -P -SASECible_rs
resume connection to ASECible.MaBase
resume connection to ASESource.MaBase
go

VI - Installation du Replication Server Manager

Pour initialiser le Replication Server Manager, exécuter tout d'abord $SYBASE/install/rsmgen ASECible_rsm

Pour le démarrer ensuite, exécuter %SYBASE/install/RUN_ASECible_rsm. Dès lors, Sybase Central pourra se connecter au Replication Server Manager (du moment que le Plug-In de la réplication soit installé et que les services aient été installés dans sql.ini !)

VII - Procédure de bascule

VII-A - Procédure de bascule en cas de crash/non planifiée

Dans le cas d'un problème de l'Adaptive Serveur actif/primaire, ou de la base de données de production sans possibilité de récupération rapide, nous devons basculer le système de réplication du serveur actif (ASESource) au serveur StandBy (ASECible).

VII-A-1 - Bascule de ASESource à ASECible

Suspendre toutes les applications du serveur primaire (ASESource) qui ne l'auraient pas été lors du crash, et mettre la base MaBase de production (ASESource) en mode 'dbo use only'.

isql -Usa -P -SASESource
use master
go
sp_dboption MaBase, "dbo use only", true
go

Se connecter au RS

isql -Usa -P -SASECible_rs

Basculer sur la base StandBy et attendre que le basculement se soit bien passé

switch active for ASESource.MaBase to ASECible.MaBase
wait for switch for ASESource.MaBase

Monitorer le status

admin logical_status

Stopper l'agent de replication de la base de données MaBase sous ASESource

isql -Usa -P -SASESource
use MaBase
go
exec sp_stop_rep_agent rft [, nowait]
go

Démarrer l'agent de réplication de la nouvelle base active (ASECible.MaBase)

isql -Usa -P -SASECible
use MaBase
go
exec sp_start_rep_agent rft [, for_recovery]
go

Marquer les tables de ASECible comme réplicables

isql -Usa -P -SASECible
use MaBase
go
exec sp_reptostandby MaBase, 'all'
go

Se connecter à ASECible et trouver l'heure de la dernière transaction commitée sur le serveur anciennement actif (ASESource). Toutes les transactions appliquées depuis seront définitivement perdues. Tentez de rejouer ces transactions perdues avant de redémarrer les applicatifs.

Cette information est stockée dans la table MaBase..rs_lastcommit du serveur ASESource. (origin_time, dest_commit_time columns)

isql -Usa -P -SASESource
use MaBase
go
select origin_time,dest_commit_time from rs_lastcommit
go

Se connecter au serveur ASECible, faire une sauvegarde des bases de données

Redémarrer les applicatifs en les connectant à ASECible

Lorsque vous aurez atteint ce point, votre système aura basculé correctement.

VII-A-2 - Resynchronisation de ASECible à ASESource

Après avoir effectué une bascule d'urgence, la nouvelle base de données WSB (ASESource) est dans un état "peu clair".

- Les transactions qui ont été rejouées manuellement sur ASECible sont stockées dans la Stable Queue et attendent d'être appliquées sur le nouveau StandBy Db(ASESource).

- Les transactions qui n'ont pas pu être rejouées sur ASECible sont quant à elles toujours présentes dans la base de données StandBy d'ASESource. Ces transactions peuvent alors causer des erreurs relatives à des duplications de clés lorsque la connexion au StandBy (ASESource) sera réactivée. Pour éviter ces problèmes, il est recommandé de resynchroniser totalement la base StandBy d'ASESource.

Se connecter au replication serveur. Détruire la connexion standBy d'ASESource : cela aura pour effet de vider la Stable Queue.

isql -Usa -P -SASECible_rs
drop connection to ASESource.MaBase

Se connecter au serveur secondaire (ASECible) et sauvegarder la base nouvellement active

isql -Usa -P -SASECible
dump database MaBase to ?

Se connecter à ASESource et spécifier les options de base 'no chkpt on recovery' et 'read only' sur la base StandBy.

isql -Usa -P -SASECible
use master
go
exec sp_dboption MaBase, 'no chkpt', true
exec sp_dboption MaBase, 'dbo use only', true
go
use MaBase
go
checkpoint
go

Recharger la base d'ASESource avec le dump d'ASECible

isql -Usa -P -SASESource
load database MaBase from ...

Se connecter au Replication Server et recréer la connexion StandBy pour la base MaBase d'ASESource

isql -Usa -P -SASECible_rs
create connection to ASESource.MaBase
set error class rs_sqlserver_error_class
set function string class rs_sqlserver_function_class
set username sars
set password sars99
with log transfer on
as standby for ASESource.MaBase
use dump marker
go

Se connecter à ASECible et sauvegarder le journal de transactions

isql -Usa -P -SASECible
dump tran MaBase to ....
go

Se connecter à ASESource et charger le journal de transaction sauvegardé sous ASECible sur ASESource

isql -Usa -P -SASESource
load tran MaBase from ...

Mettre la base de données MaBase de ASESource en ligne

Online database MaBase

Ôter les options de base 'no chkpt on recovery' et 'read only' de la base MaBase de ASESource

exec sp_dboption MaBase, 'no chkpt', false
exec sp_dboption MaBase, 'dbo use only', false
go
use MaBase
go
checkpoint
go

Marquer la base MaBase de ASESource comme "réplicable"

isql -Usa -P -SASESource
sp_reptostandby MaBase, 'all'
go

Se connecter au Replication Server et réactiver la connexion de la base StandBy d'ASESource

resume connection to ASESource.MaBase

S'assurer que tout fonctionne parfaitement

admin who_is_down