[JAVA] Comment configurer la haute disponibilité (HA) sans avoir besoin d'un équilibreur de charge tiers R3 Corda

Cet article est une réimpression de l'article Medium de TIS Co., Ltd. (approuvé).

URL du corps: https://medium.com/@TIS_BC_Prom/r3-corda-3rd-party%E8%A3%BD%E3%83%AD%E3%83%BC%E3%83%89%E3%83% 90% E3% 83% A9% E3% 83% B3% E3% 82% B5% E3% 82% 92% E5% BF% 85% E8% A6% 81% E3% 81% A8% E3% 81% 97% E3% 81% AA% E3% 81% 84% E9% AB% 98% E5% 8F% AF% E7% 94% A8% E6% 80% A7-ha-% E3% 81% AE% E6% A7% 8B % E6% 88% 90% E6% 96% B9% E6% B3% 95-3467f4479f6d


A. Introduction

Dans le post précédent, j'ai expliqué comment configurer le «déploiement de haute disponibilité chaud froid» en utilisant https://qiita.com/SBIR3Japan/items/0d6a3956613ec076381c (ci-après dénommé «ci-dessus») et un équilibreur de charge. Le paramètre est également disponible dans la version 4.0. Cet article décrit une approche alternative à la configuration des nœuds haute disponibilité qui ne nécessitent pas l'équilibreur de charge tiers fourni dans la version 4.0. L'environnement de vérification de cet article utilise le même environnement AWS que la dernière fois. Cependant, il n'utilise pas le service AWS Load Balancer. 1_Ru1l1qoLW-D9dOLbHMVq7w.jpg

Figure 1 Vue d'ensemble des paramètres HA dans cet article

B. Créer EFS et RDS

Dans mon dernier article, j'ai expliqué comment créer des services AWS EFS et RDS. Veuillez construire de la même manière que ci-dessus cette fois. (Voir les sections D et E ci-dessus)

C. Paramètres du nœud

Le site Web officiel de Corda indique brièvement que les nœuds de sauvegarde pour HA peuvent être ajoutés avec le paramètre [additionalP2PAddresses]. Les étapes détaillées de cette configuration sont décrites dans ce chapitre.

  1. À propos des paramètres du fichier build.gradle Les informations de configuration sur HA ne sont pas requises pour ce fichier. Les paramètres HA seront ajoutés et expliqués ultérieurement dans le fichier "PartyB_conf" du nœud HA (étape 3). build.gradle
…<Abréviation>…
node {
        name "O=PartyB,L=Tokyo,C=JP"
        p2pAddress  "26.132.137.54:1433"
        //L'adresse p2p ci-dessus est l'adresse IP du nœud Hot Party B. Il n'est plus nécessaire de définir p2pAddress comme nom DNS de l'équilibreur de charge.
        rpcSettings {
            address("localhost:10009")
            adminAddress("localhost:10049")
        }
         cordapps = [
                "$project.group:cordapp-contracts-states:$project.version",
                "$project.group:cordapp:$project.version"
        ]
        rpcUsers = [[ user: "user1", "password": "test", "permissions": ["ALL"]]]
    }
…<Abréviation>…

* Dans l'article précédent, extraConfig a été décrit, mais il a changé de ver4.0 et ne peut plus être utilisé.

  1. Construisez CorDapps Enregistrez le fichier <build.gradle> ci-dessus et exécutez "./gradlew deployNodes" dans le répertoire CorDapps pour compiler CorDapps. Cela créera un répertoire pour tous les nœuds corda, y compris PartyB, sous «build / nodes». Le fichier node.conf de PartyB ressemble à ceci:
#-----PartyB/node.conf right after compile "./gradlew deployNodes"-----#
devMode=true
myLegalName="O=PartyB,L=Osaka,C=JP"
p2pAddress="26.132.137.54:1433"
rpcSettings {
    address="localhost:10009"
    adminAddress="localhost:10049"
}
security {
    authService {
        dataSource {
            type=INMEMORY
            users=[
                {
                    password=test
                    permissions=[
                        ALL
                    ]
                    user=user1
                }
            ]
        }
    }
}
#-----------------------------------------------#
  1. Paramètres du nœud HA (PartyB) Ajoutez des informations sur les paramètres HA (adressesP2P supplémentaires (IP du nœud froid), base de données partagée) dans le fichier «PartyB_conf» sous / build / nodes.
devMode=true
myLegalName="O=PartyB,L=Osaka,C=JP" 
p2pAddress="26.132.137.54:1433"                 // this is the IP for the hot PartyB node
additionalP2PAddresses=["26.132.133.94:1433"]   // this is the IP for the cold PartyB node
// the 3rd Party DB (e.g. PostgreSQL) info., which is the shared DB by PartyB’s Hot & Cold nodes
dataSourceProperties {
    dataSource {
        password=tisbcpoc
        url="jdbc:postgresql://ce4-pgsql.*****.ap-northeast-1.rds.amazonaws.com:5432/HAPartyB"
        user=ubuntu
    }
    dataSourceClassName="org.postgresql.ds.PGSimpleDataSource"
}
database {
    runMigration="true"
    schema="my_schema"
    transactionIsolationLevel="READ_COMMITTED"
}
jarDirs=[
  //Pilote «postgresql-42.1.4.Répertoire où se trouve jar »
  "/home/ubuntu/driver"
]
rpcSettings {
    address="localhost:10009"
    adminAddress="localhost:10049"
}
security {
    authService {
        dataSource {
            type=INMEMORY
            users=[
                {
                    password=test
                    permissions=[
                        ALL
                    ]
                    user=user1
                }
            ]
        }
    }
}

Comme plusieurs P2PAddresses peuvent être définies, elles sont définies avec le type de tableau [].

Maintenant qu'un nouveau nœud (nœud froid) a été ajouté au réseau, vous devrez effectuer un bootstrap pour mettre à jour le fichier de paramètres réseau. Avant d'exécuter bootstrap, vous devez d'abord créer un fichier de migration de données pour PartyB afin de créer le schéma requis pour la base de données PostgreSQL.

  1. Créez le "script de migration" requis L'explication du script de migration et la manière de le créer ont été présentées dans la section I ci-dessus. Suivez la même procédure pour le créer.

  2. Créer la construction NW du nœud HA (bootstrap) Exécutez la commande suivante sous le répertoire racine du projet. java -jar corda-tools-network-bootstrapper-4.0.jar — dir build/nodes/ Le fichier "corda-tools-network-bootstrapper-4.0.jar" utilisé ci-dessus est une copie de ~ / tools / network-bootstrapper / du pack d'évaluation Corda-Enterprise-4.0. Si le bootstrap réussit, vous verrez un message de console semblable au suivant:

Bootstrapping local test network in /mnt/**-poc-CE-additionalP2PAddresses/build/nodes
Generating node directory for PartyB
Generating node directory for Regulator
Generating node directory for Notary
Generating node directory for PartyA
Nodes found in the following sub-directories: [PartyA, PartyB, Notary, Regulator]
Found the following CorDapps: []
Not copying CorDapp JARs as --copy-cordapps is set to FirstRunOnly, and it looks like this network has already been bootstrapped.
Waiting for all nodes to generate their node-info files...
Distributing all node-info files to all nodes
Loading existing network parameters... NetworkParameters {
      minimumPlatformVersion=4
      notaries=[NotaryInfo(identity=O=Notary, L=London, C=GB, validating=true)]
      maxMessageSize=10485760
      maxTransactionSize=524288000
      whitelistedContractImplementations {
      }
      eventHorizon=PT720H
      packageOwnership {

      }
      modifiedTime=2019-06-25T10:37:15.047Z
      epoch=1
  }
Gathering notary identities
Generating contract implementations whitelist
Network parameters unchanged
Bootstrapping complete!

Les informations du nœud froid Party B sont maintenant ajoutées au nouveau réseau Corda. Une fois le bootstrap terminé, le fichier PartyB node.conf a également été mis à jour. Le contenu mis à jour est le suivant.

devMode=true
myLegalName="O=PartyB,L=Osaka,C=JP"
p2pAddress="26.132.137.54:1433"
additionalP2PAddresses=["26.132.133.94:1433"]
dataSourceProperties {
    dataSource {
        password=tisbcpoc
        url="jdbc:postgresql://ce4-pgsql.*****.ap-northeast-1.rds.amazonaws.com:5432/HAPartyB"
        user=ubuntu
    }
    dataSourceClassName="org.postgresql.ds.PGSimpleDataSource"
}
database {
    runMigration="true"
    schema="my_schema"
    transactionIsolationLevel="READ_COMMITTED"
}
jarDirs=[
  "/home/ubuntu/driver"
]
rpcSettings {
    address="localhost:10009"
    adminAddress="localhost:10049"
}
security {
    authService {
        dataSource {
            type=INMEMORY
            users=[
                {
                    password=test
                    permissions=[
                        ALL
                    ]
                    user=user1
                }
            ]
        }
    }
}

J'ai pu définir l'IP (additionalP2PAddresses) du nœud froid de PartyB et la base de données partagée "HAPartyB" (dataSourceProperties) du nœud chaud et du nœud froid. 6. Placez les informations de paramétrage ParyB sur le nœud chaud et le nœud froid Copiez le répertoire Party B créé à l'étape 5 ci-dessus sur le nœud chaud "26.132.137.54" et le nœud froid "26.132.133.94". 7. Configurer un lecteur partagé pour le nœud HA Reportez-vous à la section H de ce qui précède et définissez le lecteur partagé (Artemis) pour le nœud chaud et le nœud froid de Party B.

RÉ. Démarrez et vérifiez tous les nœuds corda

Placez (copiez) tous les répertoires de nœuds autres que la partie B créés à l'étape 5 sur le nœud correspondant. Désormais, tous les nœuds Corda peuvent démarrer avec succès dans l'instance EC2, comme illustré à la figure 1. Pour vérifier le fonctionnement de la fonction HA de PartyB, reportez-vous à la section J ci-dessus et vérifiez. Vous pouvez confirmer qu'il peut fonctionner de la même manière que ci-dessus. De plus, comme avec ce qui précède, il est nécessaire de démarrer corda.jar pour le nœud chaud et le nœud froid de PartyB. Lorsque le nœud froid est démarré, si le nœud chaud est en cours d'exécution, il sera en état d'attente.

Résumé

Cet article décrit une approche de configuration des nœuds haute disponibilité sans équilibreur de charge Corda Enterprise version (CE4.0). CE4.0 élimine le besoin du service d'équilibrage de charge tiers et de ses paramètres, qui étaient nécessaires dans le passé, et nous pensons que la haute disponibilité des nœuds peut être garantie à moindre coût et plus facilement. Cependant, comme mentionné dans l'article précédent, il ne s'agit que de la configuration HA du nœud. En fonctionnement réel, la configuration HA est également requise pour le DB et le lecteur partagé. Le prochain article portera sur les grappes de notaires. Remarque: TIS Blockchain Promotion Office (Ra) Thanks to Kiyotaka Yamasaki.


Cet article est une réimpression de l'article Medium de TIS Co., Ltd. (approuvé). URL du corps: https://medium.com/@TIS_BC_Prom/r3-corda%E3%83%8E%E3%83%BC%E3%83%89%E3%81%AE%E9%AB%98%E5% 8F% AF% E7% 94% A8% E6% 80% A7-ha-% E3% 81% A8% E3% 81% 9D% E3% 81% AE% E6% A7% 8B% E6% 88% 90% E6 % 96% B9% E6% B3% 95-34cb5dd409d1

Demandes de renseignements sur cet article: SBI R3 Japan [email protected]

Recommended Posts

Comment configurer la haute disponibilité (HA) sans avoir besoin d'un équilibreur de charge tiers R3 Corda
Haute disponibilité (HA) du nœud R3 Corda et comment le configurer
Comment faire un MOD pour Slay the Spire
SDWebImage: Comment vider le cache pour une UIImageView particulière
Comment générer des valeurs de tableau sans utiliser d'instruction for
Comment obtenir le dernier ID de diffusion en direct pour une chaîne sans utiliser l'API de données YouTube
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe