- Ansible - provision of the following node types:
Genesis Validator
- Validator Node created at the beginning of a networkNon-genesis Validator
- Validator Node joined a network after a significant time periodPrivate Sentry
- Full Node to connect other(external) Validator Nodes (Sentry Node Architecture)Public Sentry
- Full Node to connect other(external) Full NodesObserver
- Full Node for serving gRPC / REST / RPC clientsSeed
- Full Node for sharing IP addresses ofPublic Sentry
Nodes (Seed Node)
Note: Most of the nodes should enable
state sync
to avoid catching up with a network from scratch. Refer to running-node-in-existing-network.md for details.
- Terraform - deploy an AWS infrastructure from one or more of the following modules:
- Validator -
Validator
node instance - Private Sentries - Cluster of
Private Sentry
node instances - Public Sentries - Cluster of
Public Sentry
node instances with a collocatedSeed
node - Observers - Cluster of
Observer
node instances - Load Balancers - AWS Network Load Balancers for load balancing between
Observer
clusters
- Validator -
-
Tendermint:
config.toml
file:[p2p] pex = false persistent_peers = # `Private Sentry` nodes with private IPs addr_book_strict = false [consensus] create_empty_blocks = false create_empty_blocks_interval = "600s" # 10 mins
app.toml
file:[state-sync] snapshot-interval = "snapshot-interval" snapshot-keep-recent = "snapshot-keep-recent"
-
AWS:
- Instance type = EC2 instance
- Network:
- Private IPv4 = IPv4 address
- Public IPv4 = not assigned
- Security:
- inbound:
- allow
Tendermint p2p
port fromPrivate Sentry
Nodes' VPC CIDR - allow
RPC
port fromPrivate Sentry
Nodes' VPC CIDR
- allow
- outbound:
- all
- inbound:
-
Tendermint:
config.toml
file:[p2p] pex = true persistent_peers = # `Validator` node with private IP + other orgs' validator/sentry nodes with public IPs private_peer_ids = # `Validator` node id unconditional_peers = # `Validator` node id addr_book_strict = false
app.toml
file:[state-sync] snapshot-interval = "snapshot-interval" snapshot-keep-recent = "snapshot-keep-recent"
-
AWS:
- Instance type = EC2 instance
- Network:
- Private IPv4 = IPv4 address
- Public IPv4 = Elastic IP
- Security:
- inbound:
- allow
Tendermint p2p
port for whitelist IPs - allow
RPC
port fromObserver
Nodes' VPC CIDR - allow
RPC
port fromPublic Sentry
Nodes' VPC CIDR
- allow
- outbound:
- all
- inbound:
-
Tendermint:
config.toml
file:[p2p] pex = true persistent_peers = # `Private Sentry` nodes with private IPs addr_book_strict = false
app.toml
file:[api] enable = true
-
AWS:
- Instance type = EC2 instance
- Network:
- Private IPv4 = IPv4 address
- Public IPv4 = not assigned
- Security:
- inbound:
- allow gRPC / REST / RPC ports from the same VPC CIDR
- outbound:
- all
- inbound:
-
Tendermint:
config.toml
file:[p2p] pex = true persistent_peers = # `Private Sentry` nodes with private IPs
app.toml
file:[state-sync] snapshot-interval = "snapshot-interval" snapshot-keep-recent = "snapshot-keep-recent"
-
AWS:
- Instance type = EC2 instance
- Network:
- Private IPv4 = IPv4 address
- Public IPv4 = Elastic IP
- Security:
- inbound:
- allow
Tendermint p2p
port from anywhere - allow
Tendermint RPC
port from anywhere
- allow
- outbound:
- all
- inbound:
-
Tendermint:
config.toml
file:[p2p] pex = true seed_mode = true persistent_peers = # `Public Sentry` nodes with public IP
-
AWS:
- Instance type = EC2 instance
- Network:
- Private IPv4 = IPv4 address
- Public IPv4 = Elastic IP
- Public DNS = optional
- Security:
- inbound:
- allow
Tendermint p2p
port from everywhere
- allow
- outbound:
- all
- inbound:
- AWS:
-
Instance type = Elastic Network Load Balancer
-
Availability Zones = [availability zones of observer nodes from the same region]
-
Network:
- Private IPv4 = IPv4 address
- Public IPv4 = not assigned
- Public DNS = assigned by AWS
-
Target groups:
- gRPC
- Registered targets = [observer nodes from all availability zones in the same region]
- Attributes:
Preserve client IP addresses
= disabled
- Health checks:
- protocol = TCP
- REST
- Registered targets = [observer nodes from all availability zones in the same region]
- Attributes:
Preserve client IP addresses
= disabled
- Health checks:
- protocol = TCP
- RPC
- Registered targets = [observer nodes from all availability zones the same region]
- Attributes:
Preserve client IP addresses
= disabled
- Health checks:
- protocol = TCP
- gRPC
-
Listeners:
- gRPC
- Protocol = TLS
- Forward to = gRPC target group
- Security policy = ELBSecurityPolicy-TLS13-1-2-2021-06
- Default SSL/TLS certificate = CA signed TLS certificate
- REST
- Protocol = TLS
- Forward to = REST target group
- Security policy = ELBSecurityPolicy-TLS13-1-2-2021-06
- Default SSL/TLS certificate = CA signed TLS certificate
- RPC
- Protocol = TLS
- Forward to = RPC target group
- Security policy = ELBSecurityPolicy-TLS13-1-2-2021-06
- Default SSL/TLS certificate = CA signed TLS certificate
- gRPC
-