ROBUST/fr

= Introduction =

ROBUST est l'acronyme de "redesigned OpenSimulator Basic Universal Server Technology" (ROBUST). Elle s'appuie sur le système de connecteurs et de services entrants et sortants qui a été développé pour l'Hypergrid et OpenSimulator. Il remplace OGS1 avec une architecture modulaire qui peut être facilement étendue en utilisant des modules de base et des modules tiers.

ROBUST est un shell de serveur flexible qui peut charger les mêmes modules déjà utilisés par les régions. Cela permet une réutilisation du code à presque 100% et une grande flexibilité.

Le serveur ROBUST charge les connecteurs "in" comme spécifié dans le fichier de configuration. Ces connecteurs chargent ensuite les modules de traitement et de stockage nécessaires et/ou les connecteurs "out". Grâce à cette architecture, chaque serveur ROBUST peut exécuter un ou tous les services de grille, et/ou agir comme un proxy pour les services de grille.

Cette page traite de l'utilisation et de la configuration de ROBUST. Il existe des pages distinctes pour en savoir plus sur les services eux-mêmes.

= Configuration = Le serveur lit un fichier de configuration au démarrage, qui prend par défaut le nom de l'assembly avec l'extension .ini. Le nom par défaut du serveur ROBUST est Robust.exe, par conséquent le fichier de configuration par défaut est Robust.ini. Un fichier Robust.ini.example est fourni avec le kit OpenSimulator. Le port par défaut pour tous les services fonctionnant dans ROBUST est 8003 comme vous pouvez le voir ci-dessous.

; * La section startup énumère tous les connecteurs à démarrer ; * dans cette instance de serveur. Il peut s'agir d'un seul ou de l'ensemble des serveurs. ; * Les connecteurs multiples doivent être séparés par des virgules. ; * ; * Ce sont les connecteurs IN que le serveur utilise, les connecteurs in ; * lisent ce fichier de configuration et chargent les connecteurs OUT et de base de données nécessaires. ; * [Startup] ServiceConnectors = "OpenSim.Server.Handlers.dll:AssetServiceConnector,OpenSim.Server.Handlers.dll:InventoryServiceInConnector" ; * Ceci est commun à tous les services, il s'agit de la configuration ; * du réseau pour l'instance complète du serveur. ; * [Network] port = 8003 ; * À titre d'exemple, la configuration ci-dessous reproduit précisément ; * le serveur d'actifs hérité*. Elle est lue par le connecteur IN de l'asset ; * (défini ci-dessus) et charge ensuite le connecteur OUT (un module de base ; * de données local). Celui-ci, à son tour, lit le chargeur d'assets et les ; * informations de connexion à la base de données. ; * [AssetService] LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService" DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll" AssetLoaderArgs = "assets/AssetSets.xml" StorageProvider = "OpenSim.Data.MySQL.dll" ConnectionString = "Data Source=localhost;Database=grid;User ID=grid;Password=grid;" ; * Cette configuration charge les modules du serveur d'inventaire. ; * Elle reproduit la fonction de l'ancien serveur d'inventaire. ; * [InventoryService] LocalServiceModule = "OpenSim.Services.InventoryService.dll:InventoryService" UserServerURI = "http://127.0.0.1:8002" SessionAuthentication = "false" StorageProvider = "OpenSim.Data.MySQL.dll" ConnectionString = "Data Source=localhost;Database=grid;User ID=grid;Password=grid;"

= Arguments de la ligne de commande = Spécifie l'emplacement du fichier .ini à lire à la place du fichier par défaut.
 * -inifile
 * -console
 * Spécifie le type de console, un parmi basic, local ou rest.

Indique à log4net d'utiliser ce fichier comme fichier de configuration.
 * -logconfig
 * -prompt
 * Remplace l'invite du serveur

= Fichier de configuration =

Section [Startup]

 * ServiceConnectors
 * Liste de connecteurs IN de service séparés par des virgules. Le format de chaque entrée est : . Si une dll ne contient qu'une seule classe appropriée, le nom de la classe peut être omis.


 * Prompt
 * Remplacer l'invite du serveur


 * Console
 * Spécifiez le type de console, une parmi basic, local ou rest.


 * Logfile
 * Indiquez le fichier journal dans lequel ce serveur enregistrera les données.

Section [Network]

 * Port
 * Définit le port réseau à écouter. Tous les services fonctionneront sur ce port.

= Configurations des connecteurs = Ces configurations sont fournies par les modules du connecteur et ne font pas partie intégrante du serveur ROBUST. La documentation de toutes les options possibles se trouve dans la documentation du connecteur. Ce manuel ne liste que les options présentes dans l'exemple de fichier de configuration.

Section [AssetService]

 * LocalServiceModule [Connector option]
 * Une spécification de module qui fournit les services pour ce connecteur.


 * DefaultAssetLoader [Service option]
 * Une dll contenant le chargeur d'assets à utiliser pour charger l'ensemble d'assets par défaut.


 * AssetLoaderArgs [Service option]
 * Chemin d'accès pour charger les assets (pour le chargeur dassets du système de fichiers)


 * StorageProvider [Service option]
 * Dll contenant le code du gestionnaire de base de données


 * ConnectionString [Service option]
 * Chaîne de connexion à passer au gestionnaire de base de données

Section [InventoryService]

 * LocalServiceModule [Connector option]
 * Une spécification de module qui fournit les services pour ce connecteur.


 * UserServerURI [Connector option]
 * URI pour accéder au serveur utilisateur


 * SessionAuthentication [Connector option]
 * Authentification des sessions de l'inventaire (par défaut false!)


 * StorageProvider [Service option]
 * Dll contenant le code du gestionnaire de base de données


 * ConnectionString [Service option]
 * Chaîne de connexion à transmettre au gestionnaire de base de données

Des connecteurs supplémentaires peuvent nécessiter l'ajout de sections supplémentaires.

= Exemple de conversion de l'UGAIM en UGRM =

Cette section s'appliquera si vous migrez une installation existante d'OpenSimulator 0.6.6 vers OpenSimulator 0.6.7. Dans cette version, le nom du serveur ROBUST est OpenSim.Server.exe.

Conversion d'UGAIM vers UGRM :

Bravo à diva et Melanie_t pour leur aide et leur tolérance (smxy).

Ma configuration initiale :

Système complet en HG, accessible par Internet, en mode grille, utilisant MySQL et réparti sur deux serveurs.

UGAIM et MySQL 5.0 fonctionnant sur deux VM séparées 32-bit CentOS 5.3 Xen sur un système 64-bit CentOS 5.3.

Chaque région fonctionne dans sa propre instance d'OpenSim.exe sur un système Windows XP SP3 Home 32 bits.

OSWI fonctionne également sur un système Windows.

Arrêter les régions. Arrêter UGAIM.

Ensuite, le port du serveur d'inventaire doit être modifié de 8004 à 8003 dans les fichiers

OpenSim.ini:          "inventory_server_url"          - Pour toutes les régions et le serveur UGRM.

GridCommon.ini:       "InventoryServerURI"            - Pour toutes les régions et le serveur UGRM.

UserServer_Config.xml: "default_inventory_server"     - Pour le serveur UGRM.

Dans la base de données MySQL, dans la table "users", le champ userInventoryURI doit être mis à jour pour tous les utilisateurs.

Dans le fichier de configuration de OSWI, mettez à jour "$userInventoryURI".

AssetServer_Config.xml et InventoryServer_Config.xml peuvent être supprimés du serveur UGRM.

Sur le serveur UGRM, copiez OpenSim.Server.ini.example dans OpenSim.Server.ini et modifiez-le en changeant les entrées "ConnectionString" de manière appropriée, dans les sections [AssetService] et [InventoryService].

Lancez l'UGRM. Lancez les régions.

Note semi-indépendante : Selon Melanie_t, n'importe lequel des serveurs UGRM peut être redémarré indépendamment, sans avoir besoin de redémarrer les trois autres. Cependant, si vous redémarrez le UserServer, vous devez lancer la commande "register" (sans les guillemets) dans la console MessagingServer, après.

= Un exemple de conversion d'UGRM en URM  =

Cette section ne s'appliquera que si vous migrez d'OpenSimulator 0.6.7 vers 0.6.8. Dans cette version, le nom du serveur ROBUST est OpenSim.Server.exe.

Conversion d'UGRM en URM :

Ceci est la suite de mon exemple "UGAIM à UGRM" ci-dessus. Il se peut que je fusionne les deux exemples, éventuellement.

Arrêtez régions. Arrêtez UGRM.

Assurez-vous que vous ne remplacez aucun de ces fichiers - ils doivent être utilisés tels qu'ils sortent du dépôt.: config-include/Grid.ini config-include/GridHypergrid.ini config-include/Standalone.ini config-include/StandalioneHypergrid.ini

Veillez également à inclure les nouveaux ajouts du fichier config-include/*Common.ini.example dans votre config-include/*Common.ini.

Ensuite, le port du serveur de grille doit être modifié de 8001 à 8003 dans les fichiers

UserServer_Config.xml:     "default_grid_server"     - Pour le serveur URM.

MessagingServer_Config.xml: "default_grid_server"    - Pour le serveur URM.

Sur le serveur URM, enregistrez une copie de votre OpenSim.Server.ini existant. Copiez OpenSim.Server.ini.example dans OpenSim.Server.ini. Modifiez-le pour refléter les changements que vous avez effectués dans la version précédente. Modifiez ensuite l'entrée "ConnectionString", de manière appropriée, dans la section [GridService].

Le fichier GridServer_Config.xml peut être supprimé du serveur URM.

Lancez URM. Lancez les regions.

Un exemple de conversion de URM en ROBUST
Cette section ne s'appliquera que si vous migrez vers le tout dernier code Git master d'OpenSimulator (depuis le commit a9580eb du mar 2 mars 2010).

À partir de la branche presence-refactor, la configuration par défaut est un serveur unique exécutant TOUS les services de ressources, plus le nombre de simulateurs dont vous disposez.

Arrêtez les régions. Arrêtez URM.

Assurez-vous que vous ne remplacez aucun de ces fichiers - ils doivent être utilisés tels qu'ils sortent du dépôt : config-include/Grid.ini config-include/GridHypergrid.ini config-include/Standalone.ini config-include/StandalioneHypergrid.ini

Veillez également à inclure les nouveaux éléments ajoutés dans config-include/GridCommon.ini.example dans votre config-include/GridCommon.ini.

Dans le serveur ROBUST, copiez Robust.ini.example dans Robust.ini. Modifiez-le pour qu'il reflète votre configuration. En particulier, modifiez l'entrée "ConnectionString" de manière appropriée. Notez également les nouvelles variables de configuration dans la section [GridService], où vous pouvez maintenant définir les régions par défaut et de remplacement pour votre grille.

Si vous voulez que votre grille supporte la fonctionnalité Hypergrid -- à la fois en laissant vos utilisateurs sortir et en laissant les utilisateurs extérieurs entrer -- utilisez Robust.ini.HG.example comme base de votre configuration au lieu de Robust.ini.example. Copiez-le dans Robust.ini et apportez-y les modifications.

Tous les fichiers *_Config.xml sont maintenant obsolètes et peuvent être supprimés.

Démarrez vos services : $ [mono] Robust.exe Notez que la configuration par défaut démarre 2 processus, l'un écoutant sur le port 8002 et l'autre sur le port 8003. Nous avons placé les services qui doivent être exposés à l'Internet dans le port 8002 ; tous les services qui n'ont pas besoin d'être exposés sont dans le port 8003. Pour sécuriser votre réseau, vous pouvez maintenant placer le port 8003 derrière votre pare-feu. A moins que vous ne sachiez ce que vous faites, laissez les numéros de port exactement comme ils sortent du package ; ne changez que les noms d'hôtes partout où ils doivent être changés.

Conseils
Si vous utilisez MySQL dans un standalone, vous pouvez voir une erreur comme celle-ci lorsque vous démarrez OpenSimulator après la mise à jour.

18:27:39 - [SERVICE BASE]: Failed to load plugin OpenSim.Data.IFriendsData from OpenSim.Data.MySQL.dll with args URI=file:friends.db,version=3, FriendsSystem.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: Keyword not supported. Parameter name: uri

...

18:27:39 - Error loading plugin from OpenSim.Services.FriendsService.dll, exception System.Exception: Could not find a storage interface IFriendsData in the given StorageProvider OpenSim.Data.MySQL.dll

Cela est dû au fait que les nouveaux paramètres StorageProvider dans config-include/Standalone.ini sont tous pour SQLite. Si vous les commentez, tout devrait fonctionner à nouveau.

= Déplacer tout type de service vers son propre shell ROBUST =

'''Cette section contient du contenu avancé. Procédez avec prudence'''

De par leur conception, les services Robust sont censés être capables de fonctionner de manière autonome en se connectant les uns aux autres. C'est en grande partie vrai, mais certains services sont maintenant liés directement à d'autres services dont ils dépendent. En outre, les services sont censés fonctionner de manière indépendante, ce qui permet à plusieurs instances de services de fonctionner et de traiter des données, ce qui ne fonctionne que pour certains services en raison de l'ajout de caches à divers endroits.

Une bonne façon de répartir la charge dans Robust est de déplacer les services lourds hors de l'instance principale de Robust. En général, cela signifie qu'il faut d'abord déplacer l'Inventaire, puis les Groupes et la Présence. Dans la plupart des grandes grilles, cela permet de répartir la charge de ces services de manière assez égale.

Pour rendre le découpage plus facile et moins complexe à configurer, il est judicieux d'utiliser la fonctionnalité Include pour configurer les services individuellement et de combiner la configuration de ceux-ci avec la liste des services pour construire les configurations de chaque instance Robust. Cela supprime la nécessité de configurer chaque Robust.ini avec tous ses services pour chaque instance.


 * Commencez par faire une copie du fichier Robust.ini.example ou Robust.HG.ini.example.
 * Créez deux dossiers, un pour LOCAL et un pour REMOTE. Ils contiendront les configurations des services individuels.
 * Créez un fichier pour Robust.ini, Inventory.ini, Groups.ini et Presence.ini. Ils contiendront les configurations d'instance copiées à partir du fichier .example configs.

Une fois cette structure en place, nous pouvons commencer à démonter la configuration .example et y placer les configurations de service individuelles respectives. Ces configurations se présentent sous deux formes différentes, comme le nom des dossiers le suggère. L'une concerne les services LOCAUX qui vivent dans la même instance Robust et dépendent les uns des autres. L'autre est pour les configurations de services REMOTE qui se connectent aux services fonctionnant dans d'autres instances Robust.

Les principaux fichiers .ini contiennent simplement la configuration du réseau, la liste des services et les inclusions pour les configurations respectives.


 * Depuis la configuration .example, copier les sections [Const], [Startup], [ServiceList] et [Network].
 * Ajouter la section [Architecture] en dessous
 * Créez un Include-"Service robuste respectif" = "emplacement du fichier" pour chaque service listé ci-dessous.

La configuration terminée comprenant les sections, que nous configurerons correctement plus tard, et tous les Includes des services individuels, qui sont :

Hypergrid AccessControl DatabaseService AssetService GridInfoService LoginService GatekeeperService LibraryService UserAgentService AuthenticationService UserAccountService GridUserService AgentPreferencesService HGAssetService InventoryService GridService OpenIdService PresenceService AvatarService FriendsService EstateService MapImageService HGInventoryService HGFriendsService HGInstantMessageService Messaging Groups UserProfilesService MuteListService

Pour chacun d'entre eux, nous devons maintenant configurer la version LOCAL et REMOTE. Nous faisons cela même si certains d'entre eux ne peuvent pas fonctionner dans des instances Robust séparées, cela permet simplement de savoir plus facilement ce qui est quoi.

Presence, UserAgentService, AgentPreferencesService et GridUserService ont une certaine dépendance les uns par rapport aux autres qui ne peut être résolue via des connecteurs, ils doivent rester dans la même instance. Presence dispose d'un cache, ce qui signifie que l'utilisation de plusieurs instances de Presence n'est pas possible sans conflit de données.

Chaque service possède un module local et une URI qu'il peut utiliser. En interne, les deux établissent une connexion avec le service et fournissent le point de terminaison à Robust. Exemple InventoryService :

LOCAL

[InventoryService] LocalServiceModule = "OpenSim.Services.InventoryService.dll:XInventoryService"

REMOTE

[InventoryService] InventoryServerURI = "http://mygrid.com:8005"

Malheureusement, tous ces éléments ne sont pas documentés ou ne suivent pas le même schéma d'appellation.

Ces deux fichiers étant maintenant définis, nous pouvons les inclure dans la section Architecture que nous avons créée précédemment en pointant sur le fichier respectif. Pour toutes les instances de Robust qui ne gèrent pas l'inventaire, nous utilisons le fichier REMOTE et pour l'instance qui gérera l'inventaire, le fichier LOCAL. Exemple d'une instance principale de Robust :

[Architecture] Include-InventoryService = "/REMOTE/InventoryService.ini" Enfin, nous devons configurer la section ServiceList. Pour l'exemple de l'instance Robust principale, commentez simplement le InventoryInConnector. Dans l'instance Robust qui hébergera le service d'inventaire, nous laissons la ligne intacte comme suit :

InventoryInConnector = "${Const|PrivatePort}/OpenSim.Server.Handlers.dll:XInventoryInConnector"

Enfin, n'oubliez pas de vérifier que les directives SRV_ de LoginService pointent vers l'instance et le port corrects.

Configuration du réseau
Dans des circonstances normales, la configuration de la section Network avec des ports uniques pour les ports publics et privés permet à chaque instance de Robust de se lier correctement à l'un d'eux. Bien sûr, cela signifie que dans le GridCommon.ini, les services individuels utilisant des ports différents doivent également être reflétés.

[InventoryService] InventoryServerURI = "http://mygrid.com:8005" Cependant, il existe un moyen d'éviter cette complexité et de rendre l'accès à la grille beaucoup plus facile à configurer et de gérer les configurations qui utilisent plusieurs instances du même service Robust instance. Pour cela, un serveur web avec des capacités de proxy est nécessaire, comme haproxy ou nginx.

Pour l'exemple de l'inventaire, nous pouvons créer un sous-domaine inventory.mygrid.com pointant vers l'IP du service de la grille. Dans nginx, nous configurons un serveur qui écoute les requêtes vers ce sous-domaine et les transmet par proxy à notre instance Robust d'inventaire.

server { listen 80; server_name inventory.mygrid.com; location / { client_max_body_size 64M; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://inventory; } }  upstream inventory  { ip_hash; server 127.0.0.1:8005; server 127.0.0.1:8006; } Cela signifie que nous pouvons configurer GridCommon.ini de manière à ce que InventoryServerURI pointe vers "http://inventory.mygrid.com" sans indiquer le port, ce qui rend la configuration beaucoup plus simple.

Pour la plupart des services, seul le port public doit être transféré, certains services HG nécessitent les deux. Vous pouvez toujours fournir directement les ports dans GridCommon.ini pour augmenter la sécurité tout en conservant les connexions.

Exécution d'une installation distribuée
Afin d'exécuter Robust avec une configuration spécifique, nous devons le lancer avec le paramètre -inifile pointant vers la configuration de l'instance respective :

(mono) Robust.exe -inifile=config/Inventory.ini

Vous pouvez également ajouter le paramètre logfile pour diviser les fichiers journaux afin de faciliter leur consultation

(mono) Robust.exe -inifile=config/Inventory.ini -logfile=Inventory.log Si vous avez effectué toute la configuration correctement, vous ne devriez voir aucune erreur rouge dans la console et aucune mention d'échec de connexion.

Exemples
Vous trouverez ci-dessous des configurations gracieusement fournies par Zetamex Network à titre d'exemple du système distribué. Notez qu'elles ne sont pas mises à jour et peuvent contenir des paramètres de configuration obsolètes ou non pris en charge. Elles sont simplement destinées à illustrer les possibilités de cette configuration et à montrer jusqu'où elle peut être poussée tout en continuant à fonctionner. Ils devraient fournir une bonne indication et un point de départ pour comprendre cette configuration si l'explication ci-dessus est trop abstraite et généralisée.

https://github.com/Tampa/OpenSim-Split-Robust-Example

= Exemples supplémentaires =

WxService - Un exemple de service ROBUST