Esecuzione di un cluster Cassandra su Linux in Azure con Node.jsRun a Cassandra cluster on Linux in Azure with Node.js

Importante

Azure offre due diversi modelli di distribuzione per creare e usare le risorse: Gestione risorse e la distribuzione classica.Azure has two different deployment models for creating and working with resources: Resource Manager and Classic. Questo articolo illustra l'uso del modello di distribuzione classica.This article covers using the Classic deployment model. Microsoft consiglia di usare il modello di Gestione risorse per le distribuzioni più recenti.Microsoft recommends that most new deployments use the Resource Manager model. Vedere i modelli di Resource Manager per cluster Datastax Enterprise e Spark e Cassandra in CentOS.See Resource Manager templates for Datastax Enterprise and Spark cluster and Cassandra on CentOS.

PanoramicaOverview

Microsoft Azure è una piattaforma cloud aperta che esegue Microsoft e il software non Microsoft che include i sistemi operativi, il middleware di messaggistica, i server applicazioni nonché i database SQL e NoSQL da entrambi i modelli commerciali e open source.Microsoft Azure is an open cloud platform that runs both Microsoft and non-Microsoft software which includes operating systems, application servers, messaging middleware as well as SQL and NoSQL databases from both commercial and open source models. La compilazione di servizi resilienti su cloud pubblici, incluso Azure, richiede un'attenta pianificazione e un'architettura mirata sia per i server applicazioni che per i livelli di archiviazione.Building resilient services on public clouds including Azure requires careful planning and deliberate architecture for both applications servers as well storage layers. L'architettura di archiviazione distribuita di Cassandra aiuta a compilare con facilità sistemi a disponibilità elevata a tolleranza di errore del cluster.Cassandra’s distributed storage architecture naturally helps in building highly available systems that are fault tolerant for cluster failures. Cassandra è un livello di cloud database NoSQL in cassandra.apache.org da Apache Software Foundation. Cassandra viene scritto nel linguaggio.Cassandra is a cloud scale NoSQL database maintained by Apache Software Foundation at cassandra.apache.org. Cassandra is written in Java. Pertanto, viene eseguito sia su piattaforme Windows e Linux.So it runs on both on Windows and Linux platforms.

L'obiettivo di questo articolo è Mostra distribuzione Cassandra Ubuntu come cluster singolo e a più data center che usa macchine virtuali di Azure e le reti virtuali.The focus of this article is to show Cassandra deployment on Ubuntu as a single and multi-data center cluster that uses Azure Virtual Machines and Virtual Networks. La distribuzione del cluster per i carichi di lavoro ottimizzati per la produzione esula dall'ambito di questo articolo perché richiede una configurazione nodi a più dischi, una progettazione appropriata della topologia ad anello e la modellazione dati per supportare i requisiti necessari di replica, coerenza dei dati, velocità effettiva e disponibilità elevata.The cluster deployment for production optimized workloads is out of scope of this article as it requires multi-disk node configuration, appropriate ring topology design and data modeling to support the needed replication, data consistency, throughput and high availability requirements.

Questo articolo usa un approccio di base per spiegare che cosa comporta la compilazione del cluster Cassandra rispetto a Docker, Chef o Puppet, semplificando notevolmente la distribuzione dell'infrastruttura.This article takes a fundamental approach to show what is involved in building the Cassandra cluster compared Docker, Chef or Puppet which can make the infrastructure deployment a lot easier.

Modelli di distribuzioneThe Deployment Models

La rete di Microsoft Azure consente di distribuire cluster privati isolati, il cui accesso può essere limitato per ottenere una sicurezza di rete con granularità fine.Microsoft Azure networking allows the deployment of isolated private clusters, the access of which can be restricted to attain fine grained network security. Poiché in questo articolo riguarda che mostra la distribuzione Cassandra a un livello di base, non allo stato attivo sul livello di coerenza e la progettazione di archiviazione ottimale per la velocità effettiva.Since this article is about showing the Cassandra deployment at a fundamental level, it doesn't focus on the consistency level and the optimal storage design for throughput. Ecco l'elenco di requisiti di rete per il cluster del ipotetica:Here is the list of networking requirements for the hypothetical cluster:

  • I sistemi esterni non possono accedere al database Cassandra da Azure o all'esterno di AzureExternal systems can’t access Cassandra database from within or outside Azure
  • Il cluster Cassandra deve trovarsi dietro un bilanciamento del carico per il traffico ThriftCassandra cluster has to be behind a load balancer for thrift traffic
  • Distribuire i nodi di Cassandra in due gruppi in ogni data center per una migliore disponibilità del clusterDeploy Cassandra nodes in two groups in each data center for an enhanced cluster availability
  • Bloccare il cluster in modo che solo la server farm applicazioni abbia accesso diretto al databaseLock down the cluster so that only application server farm has access to the database directly
  • Nessun endpoint di rete pubblico diverso da SSHNo public networking endpoints other than SSH
  • Ogni nodo di Cassandra richiede un indirizzo IP interno fissoEach Cassandra node needs a fixed internal IP address

Cassandra può essere distribuito in una singola area di Azure o in più aree a seconda della natura distribuita del carico di lavoro.Cassandra can be deployed to a single Azure region or to multiple regions based on the distributed nature of the workload. È possibile utilizzare un modello di distribuzione con più aree per fornire agli utenti più vicino di una particolare area geografica tramite la stessa infrastruttura Cassandra.You can use a multi-region deployment model to serve end users closer to a particular geography through the same Cassandra infrastructure. La replica dei nodi predefiniti di Cassandra consente di sincronizzare le scritture multimaster derivanti da più data center e presenta alle applicazioni una visualizzazione coerente dei dati.Cassandra’s built-in node replication takes care of the synchronization of multi-master writes originating from multiple data centers and presents a consistent view of the data to applications. La distribuzione in più aree è utile anche per attenuare i rischi causati dalle interruzioni di Servizi di Azure.Multi-region deployment can also help with the risk mitigation of the broader Azure service outages. Topologia di replica e la coerenza ottimizzabili del Cassandra consente di soddisfare diverse esigenze RPO di applicazioni.Cassandra’s tunable consistency and replication topology helps in meeting diverse RPO needs of applications.

Distribuzione in un'area singolaSingle Region Deployment

È ora possibile iniziare con una distribuzione di un'area singola e raccogliere le informazioni ottenute per la creazione di un modello con più aree.Let's start with a single region deployment and harvest the learnings in creating a multi-region model. Reti virtuali di Azure viene utilizzata per creare subnet isolata in modo che possono essere soddisfatti i requisiti di sicurezza di rete indicati in precedenza.Azure virtual networking is used to create isolated subnets so that the network security requirements mentioned above can be met. Il processo descritto nella creazione della distribuzione di un'area singola utilizza Ubuntu 14.04 LTS e Cassandra 2.08.The process described in creating the single region deployment uses Ubuntu 14.04 LTS and Cassandra 2.08. Tuttavia, il processo può essere facilmente adottato per le altre varianti di Linux.However, the process can easily be adopted to the other Linux variants. Di seguito sono riportate alcune caratteristiche di sistema della distribuzione in una singola area.The following are some of the systemic characteristics of the single region deployment.

Disponibilità elevata: i nodi di Cassandra illustrati nella figura 1 vengono distribuiti in due set di disponibilità in modo da diffonderli tra più domini di errore a scopo di disponibilità elevata.High Availability: The Cassandra nodes shown in the Figure 1 are deployed to two availability sets so that the nodes are spread between multiple fault domains for high availability. Viene eseguito il mapping delle macchine virtuali annotate con ogni set di disponibilità a 2 domini di errore.VMs annotated with each availability set is mapped to 2 fault domains. Azure Usa il concetto di dominio di errore per gestire non pianificato (ad esempio errori hardware o software) tempi di inattività.Azure uses the concept of fault domain to manage unplanned down time (for example hardware or software failures). Il concetto di dominio di aggiornamento (ad esempio host o l'applicazione di patch/aggiornamenti del sistema operativo guest, gli aggiornamenti dell'applicazione) viene utilizzato per la gestione pianificata tempi di inattività.The concept of upgrade domain (for example host or guest OS patching/upgrades, application upgrades) is used for managing scheduled down time. Vedere Ripristino di emergenza e disponibilità elevata per applicazioni Azure per il ruolo dei domini di errore e di aggiornamento nel conseguimento dell'alta disponibilità.Please see Disaster Recovery and High Availability for Azure Applications for the role of fault and upgrade domains in attaining high availability.

Distribuzione in un'area singola

Figura 1: Distribuzione in un'area singolaFigure 1: Single region deployment

Al momento della stesura di questo articolo, Azure non consente il mapping esplicito di un gruppo di macchine virtuali a un dominio di errore specifico. Quindi, anche con il modello di distribuzione mostrato nella figura 1, è statisticamente probabile che venga eseguito il mapping di tutte le macchine virtuali a due domini di errore invece che a quattro.Note that at the time of this writing, Azure doesn’t allow the explicit mapping of a group of VMs to a specific fault domain; consequently, even with the deployment model shown in Figure 1, it is statistically probable that all the virtual machines may be mapped to two fault domains instead of four.

Traffico Thrift con bilanciamento del carico: le librerie client Thrift all'interno del server web si connettono al cluster tramite un servizio di bilanciamento del carico interno.Load Balancing Thrift Traffic: Thrift client libraries inside the web server connect to the cluster through an internal load balancer. Questa operazione richiede il processo di aggiunta del servizio di bilanciamento del carico interno alla subnet "data" (vedere la figura 1) nel contesto del servizio cloud che ospita il cluster Cassandra.This requires the process of adding the internal load balancer to the “data” subnet (refer Figure 1) in the context of the cloud service hosting the Cassandra cluster. Una volta definito il servizio di bilanciamento del carico interno, per ogni nodo è necessaria l’aggiunta dell'endpoint con carico bilanciato con le annotazioni di un set con carico bilanciato con il nome del servizio di bilanciamento del carico definito in precedenza.Once the internal load balancer is defined, each node requires the load balanced endpoint to be added with the annotations of a load balanced set with previously defined load balancer name. Per ulteriori dettagli, vedere Bilanciamento del carico interno di Azure .See Azure Internal Load Balancing for more details.

I valori di inizializzazione di cluster: è importante selezionare la maggior parte dei nodi a disponibilità elevata per i valori di inizializzazione, come i nuovi nodi di comunicare con nodi di inizializzazione per individuare la topologia del cluster.Cluster Seeds: It is important to select the most highly available nodes for seeds as the new nodes communicate with seed nodes to discover the topology of the cluster. Un nodo da ogni set di disponibilità viene designato come nodo di inizializzazione per evitare il singolo punto di errore.One node from each availability set is designated as seed nodes to avoid single point of failure.

Fattore di replica e livello di coerenza: la durabilità dei dati e l’alta disponibilità incorporate in Cassandra sono caratterizzate dal fattore di replica (RF - numero di copie di ogni riga archiviata nel cluster) e dal livello di coerenza (numero di repliche da leggere/scrivere prima della restituzione del risultato al chiamante).Replication Factor and Consistency Level: Cassandra’s build-in high-availability and data durability is characterized by the Replication Factor (RF - number of copies of each row stored on the cluster) and Consistency Level (number of replicas to be read/written before returning the result to the caller). Il fattore di replica viene specificato durante la creazione di KEYSPACE, simile a un database relazionale, mentre il livello di coerenza viene specificato eseguendo la query CRUD.Replication factor is specified during the KEYSPACE (similar to a relational database) creation whereas the consistency level is specified while issuing the CRUD query. Vedere la documentazione di Cassandra in Configuring for Consistency per i dettagli della coerenza e la formula per il calcolo del quorum.See Cassandra documentation at Configuring for Consistency for consistency details and the formula for quorum computation.

Cassandra supporta due tipi di modelli di integrità dei dati: coerenza e la coerenza eventuale; il fattore di replica e il livello di coerenza determinano se i dati siano coerenti come un'operazione di scrittura è completa o alla fine coerente.Cassandra supports two types of data integrity models – Consistency and Eventual Consistency; the Replication Factor and Consistency Level together determine if the data is consistent as soon as a write operation is complete or eventually consistent. Ad esempio, specificare QUORUM in quanto il livello di coerenza garantisce sempre dati coerenza durante qualsiasi livello di coerenza, sotto il numero di repliche da scrivere in base alle esigenze per ottenere un QUORUM (ad esempio uno) comporta la dei dati alla fine coerente.For example, specifying QUORUM as the Consistency Level always ensures data Consistency while any consistency level, below the number of replicas to be written as needed to attain QUORUM (for example ONE) results in data being eventually consistent.

Con il cluster a 8 nodi illustrato in precedenza, con un fattore di replica pari a 3 e un livello di coerenza in lettura/scrittura QUORUM (2 nodi vengono letti o scritti per coerenza), sarebbe possibile perdere un massimo di 1 nodo per gruppo di repliche prima che l'applicazione individuasse l'errore.The 8-node cluster shown above, with a replication factor of 3 and QUORUM (2 nodes are read or written for consistency) read/write consistency level, can survive the theoretical loss of at the most 1 node per replication group before the application start noticing the failure. Ciò presuppone che tutti gli spazi chiave abbiano ben bilanciato le richieste in lettura/scrittura.This assumes that all the key spaces have well balanced read/write requests. Di seguito sono indicati i parametri utilizzati per il cluster distribuito:The following are the parameters used for the deployed cluster:

Configurazione del cluster Cassandra in un'area singola:Single region Cassandra cluster configuration:

Parametro clusterCluster Parameter ValoreValue OsservazioniRemarks
Number of Nodes (N)Number of Nodes (N) 88 Numero totale di nodi nel clusterTotal number of nodes in the cluster
Replication Factor (RF)Replication Factor (RF) 33 Numero di repliche di una determinata rigaNumber of replicas of a given row
Consistency Level (Write)Consistency Level (Write) QUORUM[(RF/2) +1) = 2] Il risultato della formula viene arrotondato per difettoQUORUM[(RF/2) +1) = 2] The result of the formula is rounded down Scrive al massimo 2 repliche prima che la risposta venga inviata al chiamante. La terza replica viene scritta in modo coerente alla fine.Writes at the most 2 replicas before the response is sent to the caller; 3rd replica is written in an eventually consistent manner.
Consistency Level (Read)Consistency Level (Read) QUORUM [(RF/2) +1= 2] Il risultato della formula viene arrotondato per difettoQUORUM [(RF/2) +1= 2] The result of the formula is rounded down Legge 2 repliche prima di inviare la risposta al chiamante.Reads 2 replicas before sending response to the caller.
Replication StrategyReplication Strategy NetworkTopologyStrategy: per ulteriori informazioni, vedere Replica dei dati nella documentazione di CassandraNetworkTopologyStrategy see Data Replication in Cassandra documentation for more information Riconosce la topologia della distribuzione e inserisce le repliche nei nodi in modo che tutte le repliche non finiscano nello stesso rackUnderstands the deployment topology and places replicas on nodes so that all the replicas don’t end up on the same rack
SnitchSnitch Vedere GossipingPropertyFileSnitch commutatori nella documentazione di Cassandra per altre informazioniGossipingPropertyFileSnitch see Switches in Cassandra documentation for more information NetworkTopologyStrategy usa il concetto di snitch per conoscere la topologia.NetworkTopologyStrategy uses a concept of snitch to understand the topology. GossipingPropertyFileSnitch offre un maggior controllo sul mapping di ogni nodo al data center e al rack.GossipingPropertyFileSnitch gives better control in mapping each node to data center and rack. Il cluster usa quindi il protocollo gossip per propagare queste informazioni.The cluster then uses gossip to propagate this information. Questo è molto più semplice nell'impostazione IP dinamico relativa a PropertyFileSnitchThis is much simpler in dynamic IP setting relative to PropertyFileSnitch

Considerazioni di Azure per Cluster Cassandra: funzionalità di macchine virtuali di Microsoft Azure Usa l'archiviazione Blob di Azure per la persistenza disco; Archiviazione di Azure consente di salvare tre repliche di ogni disco per garantire una durabilità elevata.Azure Considerations for Cassandra Cluster: Microsoft Azure Virtual Machines capability uses Azure Blob storage for disk persistence; Azure Storage saves three replicas of each disk for high durability. Pertanto, ogni riga di dati inseriti in una tabella Cassandra è già archiviata in tre repliche.That means each row of data inserted into a Cassandra table is already stored in three replicas. Pertanto, la coerenza dei dati è già preso in considerazione anche se il fattore di replica (RF) è 1.So data consistency is already taken care of even if the Replication Factor (RF) is 1. Il problema principale con fattore di replica da 1 è che l'applicazione si verifica nel tempo di inattività anche se un singolo nodo Cassandra ha esito negativo.The main problem with Replication Factor being 1 is that the application experiences downtime even if a single Cassandra node fails. Tuttavia, se un nodo è inattivo per i problemi (ad esempio hardware, errori di software di sistema) riconosciuti dal Controller di infrastruttura di Azure, il provisioning di un nuovo nodo al suo posto, utilizzando le stesse unità di archiviazione.However, if a node is down for the problems (for example hardware, system software failures) recognized by Azure Fabric Controller, it provisions a new node in its place using the same storage drives. Il provisioning di un nuovo nodo per sostituire quello vecchio potrebbe richiedere alcuni minuti.Provisioning a new node to replace the old one may take a few minutes. Allo stesso modo, per le attività di manutenzione pianificata come le modifiche del sistema operativo guest, gli aggiornamenti e le modifiche dell’applicazione di Cassandra, il controller di infrastruttura di Azure esegue in sequenza gli aggiornamenti dei nodi del cluster.Similarly for planned maintenance activities like guest OS changes, Cassandra upgrades and application changes Azure Fabric Controller performs rolling upgrades of the nodes in the cluster. Gli aggiornamenti in sequenza potrebbero comportare l’inattività di alcuni nodi, per cui nel cluster potrebbe verificarsi breve periodo di inattività per alcune partizioni.Rolling upgrades also may take down a few nodes at a time and hence the cluster may experience brief downtime for a few partitions. Tuttavia, i dati non sono persi a causa la ridondanza di archiviazione di Azure predefinita.However, the data isn't lost due to the built-in Azure Storage redundancy.

Per i sistemi distribuiti in Azure che non richiede la disponibilità elevata (ad esempio circa 99,9 che equivale a 8,76 ore/anno, vedere la disponibilità elevata per informazioni dettagliate) è possibile eseguire con RF = 1 e livello di coerenza = uno.For systems deployed to Azure that doesn’t require high availability (for example around 99.9 which is equivalent to 8.76 hrs/year; see High Availability for details) you may be able to run with RF=1 and Consistency Level=ONE. Per le applicazioni con requisiti di disponibilità elevata, RF = 3 e livello di coerenza = QUORUM tollerata il tempo di inattività di uno dei nodi di una delle repliche.For applications with high availability requirements, RF=3 and Consistency Level=QUORUM tolerates the down time of one of the nodes one of the replicas. RF = 1 nelle distribuzioni tradizionali (ad esempio locale) non possono essere utilizzati a causa di possibile perdita di dati derivanti da problemi quali errori del disco.RF=1 in traditional deployments (for example on-premises) can’t be used due to the possible data loss resulting from problems like disk failures.

Distribuzione in più areeMulti-region Deployment

Consente di data center-compatibile con la replica e la coerenza del modello del Cassandra descritto in precedenza con la distribuzione di più aree senza la necessità di eventuali strumenti esterni.Cassandra’s data-center-aware replication and consistency model described above helps with the multi-region deployment without the need for any external tooling. È diverso da database relazionali tradizionali in cui il programma di installazione per il mirroring del database per le scritture più master può essere complesso.This is different from the traditional relational databases where the setup for database mirroring for multi-master writes can be complex. In un'installazione di tipo multiarea Cassandra consente gli scenari di utilizzo, inclusi gli scenari:Cassandra in a multi-region setup can help with the usage scenarios including the scenarios:

Distribuzione basata su prossimità: applicazioni multi-tenant, con mapping chiaro di utenti tenant all’area, possono trarre vantaggio dalle basse latenze del cluster con più aree.Proximity based deployment: Multi-tenant applications, with clear mapping of tenant users -to-region, can be benefited by the multi-region cluster’s low latencies. Ad esempio, una formazione sistemi di gestione per istituti di istruzione possono distribuire un cluster distribuito in aree geografiche di Stati Uniti orientali e Stati Uniti occidentali per gestire le rispettive campus per transazionale nonché analitica.For example, a learning management systems for educational institutions can deploy a distributed cluster in East US and West US regions to serve the respective campuses for transactional as well as analytics. I dati possono essere coerenti localmente in fase di lettura e scrittura e possono essere alla fine coerenti tra le due aree.The data can be locally consistent at the time reads and writes and can be eventually consistent across both the regions. Sono disponibili altri esempi quali la distribuzione su supporti, e-commerce, e qualsiasi elemento serva alla base utenti concentrata geograficamente è un buon caso di utilizzo per questo modello di distribuzione.There are other examples like media distribution, e-commerce and anything and everything that serves geo concentrated user base is a good use case for this deployment model.

Disponibilità elevata: la ridondanza è un fattore chiave per ottenere un'elevata disponibilità di software e hardware; per ulteriori informazioni, vedere la sezione sulla compilazione di sistemi cloud affidabili in Microsoft Azure.High Availability: Redundancy is a key factor in attaining high availability of software and hardware; see Building Reliable Cloud Systems on Microsoft Azure for details. In Microsoft Azure, l'unico modo affidabile per ottenere una vera ridondanza è la distribuzione di un cluster con più aree.On Microsoft Azure, the only reliable way of achieving true redundancy is by deploying a multi-region cluster. Le applicazioni possono essere distribuite in modalità attivo-attivo o attivo-passivo e se una delle aree è inattiva, Gestione traffico di Azure può reindirizzare il traffico all'area attiva.Applications can be deployed in an active-active or active-passive mode and if one of the regions is down, Azure Traffic Manager can redirect traffic to the active region. Con la distribuzione della singola area, se la disponibilità è 99,9, una distribuzione di due aree può raggiungere una disponibilità di 99,9999, calcolata con la formula: (1-(1-0,999) * (1-0,999))100). Vedere il documento precedente per informazioni dettagliate.With the single region deployment, if the availability is 99.9, a two-region deployment can attain an availability of 99.9999 computed by the formula: (1-(1-0.999) * (1-0.999))100); see the above paper for details.

Ripristino di emergenza: il cluster Cassandra con più aree, se correttamente progettato, può far fronte a potenziali interruzioni irreversibili del centro.Disaster Recovery: Multi-region Cassandra cluster, if properly designed, can withstand catastrophic data center outages. Se un'area è inattiva, l'applicazione distribuita in altre aree può iniziare a servire gli utenti finali.If one region is down, the application deployed to other regions can start serving the end users. Come le altre implementazioni di continuità aziendale, l'applicazione deve tollerare una certa perdita di dati risultante dai dati della pipeline asincrona.Like any other business continuity implementations, the application has to be tolerant for some data loss resulting from the data in the asynchronous pipeline. Tuttavia, Cassandra rende il ripristino molto più veloce rispetto ai tradizionali processi di ripristino dei database.However, Cassandra makes the recovery much swifter than the time taken by traditional database recovery processes. La figura 2 mostra il tipico modello di distribuzione con più aree con otto nodi in ogni area.Figure 2 shows the typical multi-region deployment model with eight nodes in each region. Entrambe le aree sono immagini di mirror di loro per lo stesso di simmetria; progettazioni reale dipendono dal tipo di carico di lavoro (transazionale o analitico, ad esempio), RPO, RTO, la coerenza dei dati e i requisiti di disponibilità.Both regions are mirror images of each other for the same of symmetry; real world designs depend on the workload type (for example transactional or analytical), RPO, RTO, data consistency and availability requirements.

Distribuzione in più aree

Figura 2: Distribuzione di Cassandra con più areeFigure 2: Multi-region Cassandra deployment

Integrazione della reteNetwork Integration

I set di macchine virtuali distribuiti in reti private in due aree diverse comunicano tra loro con un tunnel VPN.Sets of virtual machines deployed to private networks located on two regions communicates with each other using a VPN tunnel. Il tunnel VPN connette due gateway software di cui viene effettuato il provisioning durante il processo di distribuzione in rete.The VPN tunnel connects two software gateways provisioned during the network deployment process. Entrambe le aree hanno un'architettura di rete simile a livello di subnet Web e di dati. La rete di Azure consente di creare tutte le subnet necessarie e di applicare gli elenchi ACL come richiesto dalla sicurezza di rete.Both regions have similar network architecture in terms of “web” and “data” subnets; Azure networking allows the creation of as many subnets as needed and apply ACLs as needed by network security. Durante la progettazione della topologia cluster, tra la latenza di comunicazione centro dati e l'impatto della necessità di traffico di rete per essere considerato economico.While designing the cluster topology, inter data center communication latency and the economic impact of the network traffic need to be considered.

Coerenza dei dati per la distribuzione in più data centerData Consistency for Multi-Data Center Deployment

Le distribuzioni devono riconoscere l'impatto della topologia del cluster sulla velocità effettiva e sulla disponibilità elevata.Distributed deployments need to be aware of the cluster topology impact on throughput and high availability. Il fattore di replica e il livello di coerenza devono essere selezionati in modo che il quorum non dipenda dalla disponibilità di tutti i data center.The RF and Consistency Level need to be selected in such way that the quorum doesn’t depend on the availability of all the data centers. Per un sistema che richiede coerenza elevata, un LOCAL_QUORUM per il livello di coerenza (per le letture e scritture) garantisce che le letture locali e le scritture sono soddisfatti dai nodi locali mentre i dati vengono replicati in modo asincrono per il data center remoti.For a system that needs high consistency, a LOCAL_QUORUM for consistency level (for reads and writes) makes sure that the local reads and writes are satisfied from the local nodes while data is replicated asynchronously to the remote data centers. La tabella 2 riepiloga i dettagli della configurazione per il cluster in più aree, che verrà illustrata più avanti in questo articolo.Table 2 summarizes the configuration details for the multi-region cluster outlined later in the write up.

Configurazione del cluster Cassandra in due areeTwo-region Cassandra cluster configuration

Parametro clusterCluster Parameter ValoreValue OsservazioniRemarks
Number of Nodes (N)Number of Nodes (N) 8 + 88 + 8 Numero totale di nodi nel clusterTotal number of nodes in the cluster
Replication Factor (RF)Replication Factor (RF) 33 Numero di repliche di una determinata rigaNumber of replicas of a given row
Consistency Level (Write)Consistency Level (Write) LOCAL_QUORUM [(sum(RF)/2) +1) = 4] Il risultato della formula viene arrotondato per difettoLOCAL_QUORUM [(sum(RF)/2) +1) = 4] The result of the formula is rounded down 2 nodi viene scritto nel primo centro dati in modo sincrono; 2 nodi aggiuntivi necessari per il quorum viene scritto in modo asincrono al data center 2.2 nodes is written to the first data center synchronously; the additional 2 nodes needed for quorum is written asynchronously to the 2nd data center.
Consistency Level (Read)Consistency Level (Read) LOCAL_QUORUM((RF/2) +1) = 2 Il risultato della formula viene arrotondato per difettoLOCAL_QUORUM ((RF/2) +1) = 2 The result of the formula is rounded down Le richieste di lettura vengono soddisfatte da una sola area. 2 nodi vengono letti prima che la risposta venga inviata nuovamente al client.Read requests are satisfied from only one region; 2 nodes are read before the response is sent back to the client.
Replication StrategyReplication Strategy NetworkTopologyStrategy: per ulteriori informazioni, vedere Replica dei dati nella documentazione di CassandraNetworkTopologyStrategy see Data Replication in Cassandra documentation for more information Riconosce la topologia della distribuzione e inserisce le repliche nei nodi in modo che tutte le repliche non finiscano nello stesso rackUnderstands the deployment topology and places replicas on nodes so that all the replicas don’t end up on the same rack
SnitchSnitch GossipingPropertyFileSnitch: per ulteriori informazioni, vedere Snitch nella documentazione di CassandraGossipingPropertyFileSnitch see Snitches in Cassandra documentation for more information NetworkTopologyStrategy usa il concetto di snitch per conoscere la topologia.NetworkTopologyStrategy uses a concept of snitch to understand the topology. GossipingPropertyFileSnitch offre un maggior controllo sul mapping di ogni nodo al data center e al rack.GossipingPropertyFileSnitch gives better control in mapping each node to data center and rack. Il cluster usa quindi il protocollo gossip per propagare queste informazioni.The cluster then uses gossip to propagate this information. Questo è molto più semplice nell'impostazione IP dinamico relativa a PropertyFileSnitchThis is much simpler in dynamic IP setting relative to PropertyFileSnitch

CONFIGURAZIONE SOFTWARETHE SOFTWARE CONFIGURATION

Durante la distribuzione vengono usate le seguenti versioni software:The following software versions are used during the deployment:

SoftwareSoftwareSorgenteSourceVersionVersion
JREJRE JRE 8 JRE 8 8U58U5
JNAJNA JNA JNA 3.2.73.2.7
CassandraCassandraApache Cassandra 2.0.8Apache Cassandra 2.0.8 2.0.82.0.8
UbuntuUbuntu Microsoft Azure Microsoft Azure 14.04 LTS14.04 LTS

Quando si scarica JRE, è necessario accettare manualmente la licenza di Oracle.You must manually accept the Oracle license when you download JRE. In tal caso, per semplificare la distribuzione, scaricare tutto il software richiesto per il desktop.So, to simplify the deployment, download all the required software to the desktop. Successivamente, caricata l'immagine modello Ubuntu creare per poter eseguire la distribuzione di cluster.Then upload it to the Ubuntu template image to create as a precursor to the cluster deployment.

Scaricare il software sopra in una directory di download noto (ad esempio %TEMP%/downloads in Windows o ~/Downloads nella maggior parte delle distribuzioni di Linux o Mac) nel computer locale.Download the above software into a well-known download directory (for example %TEMP%/downloads on Windows or ~/Downloads on most Linux distributions or Mac) on the local computer.

CREARE UNA MACCHINA VIRTUALE UBUNTUCREATE UBUNTU VM

In questo passaggio del processo, creare Ubuntu immagine con il software prerequisito in modo che l'immagine può essere riutilizzato per il provisioning dei nodi Cassandra diversi.In this step of the process, you create Ubuntu image with the pre-requisite software so that the image can be reused for provisioning several Cassandra nodes.

PASSAGGIO 1: Generare la coppia di chiavi SSHSTEP 1: Generate SSH key pair

In fase di provisioning Azure richiede una chiave pubblica X509 con codifica PEM o DER.Azure needs an X509 public key that is either PEM or DER encoded at the provisioning time. Generare una coppia di chiavi pubbliche/private seguendo le istruzioni contenute in Come usare SSH con Linux in Azure.Generate a public/private key pair using the instructions located at How to Use SSH with Linux on Azure. Se si prevede di utilizzare putty.exe come un client SSH nel server Windows o Linux, è necessario convertire il PEM codificato la chiave privata RSA formato PPK utilizzando puttygen.exe.If you plan to use putty.exe as an SSH client either on Windows or Linux, you have to convert the PEM encoded RSA private key to PPK format using puttygen.exe. Le istruzioni per l'oggetto sono reperibile nella pagina web precedente.The instructions for this can be found in the above web page.

PASSAGGIO 2: Creare una macchina virtuale modello UbuntuSTEP 2: Create Ubuntu template VM

Per creare il modello di macchina virtuale, accedere al portale di Azure e utilizzare la seguente sequenza: fare clic su Nuovo, calcolo, macchina virtuale, da raccolta, UBUNTU, Ubuntu Server 14.04 LTS e quindi fare clic sulla freccia destra.To create the template VM, log into the Azure portal and use the following sequence: Click NEW, COMPUTE, VIRTUAL MACHINE, FROM GALLERY, UBUNTU, Ubuntu Server 14.04 LTS, and then click the right arrow. Per un'esercitazione che descrive come creare una macchina virtuale Linux, vedere Creazione di una macchina virtuale che esegue Linux.For a tutorial that describes how to create a Linux VM, see Create a Virtual Machine Running Linux.

Immettere le informazioni seguenti nella schermata n. 1 "Configurazione macchina virtuale":Enter the following information on the “Virtual machine configuration” screen #1:

NOME CAMPOFIELD NAME VALORE CAMPOFIELD VALUE OSSERVAZIONIREMARKS
DATA DI RILASCIO VERSIONEVERSION RELEASE DATE Selezionare una data dall'elenco a discesaSelect a date from the drop down
NOME MACCHINA VIRTUALEVIRTUAL MACHINE NAME cass-templatecass-template Nome host della macchina virtualeThis is the hostname of the VM
LIVELLOTIER STANDARDSTANDARD Lasciare l'impostazione predefinitaLeave the default
DIMENSIONESIZE A1A1 Selezionare la macchina virtuale in base alle esigenze di IO; per questo scopo, lasciare l'impostazione predefinitaSelect the VM based on the IO needs; for this purpose leave the default
NUOVO NOME UTENTENEW USER NAME localadminlocaladmin "admin" è un nome utente riservato in Ubuntu 12.xx e versioni successive"admin" is a reserved user name in Ubuntu 12.xx and after
AUTENTICAZIONEAUTHENTICATION Fare clic sulla casella di controlloClick check box Selezionare se si desidera applicare la protezione con una chiave SSHCheck if you want to secure with an SSH key
CERTIFICATOCERTIFICATE nome file del certificato di chiave pubblicafile name of the public key certificate Usare la chiave pubblica generata in precedenzaUse the public key generated previously
Nuova passwordNew Password password complessastrong password
Confirm PasswordConfirm Password password complessastrong password

Immettere le informazioni seguenti nella schermata n. 2 "Configurazione macchina virtuale":Enter the following information on the “Virtual machine configuration” screen #2:

NOME CAMPOFIELD NAME VALORE CAMPOFIELD VALUE OSSERVAZIONIREMARKS
SERVIZIO CLOUDCLOUD SERVICE Crea un nuovo servizio cloudCreate a new cloud service Il servizio cloud è un contenitore per le risorse di calcolo come le macchine virtualiCloud service is a container compute resources like virtual machines
NOME DNS DEL SERVIZIO CLOUD:CLOUD SERVICE DNS NAME ubuntu-template.cloudapp.netubuntu-template.cloudapp.net Assegnare un nome bilanciamento del carico indipendente dal computerGive a machine agnostic load balancer name
AREA/GRUPPO DI AFFINITÀ/RETE VIRTUALEREGION/AFFINITY GROUP/VIRTUAL NETWORK Stati Uniti occidentaliWest US Selezionare un'area da cui le applicazioni Web accedono al cluster CassandraSelect a region from which your web applications access the Cassandra cluster
ACCOUNT DI ARCHIVIAZIONESTORAGE ACCOUNT Usare l'impostazione predefinita.Use default Usare l'account di archiviazione predefinito o un account di archiviazione creato in precedenza in una determinata areaUse the default storage account or a pre-created storage account in a particular region
Set di disponibilitàAVAILABILITY SET NessunaNone Lasciare vuotoLeave it blank
ENDPOINTENDPOINTS Usare l'impostazione predefinita.Use default Usare la configurazione SSH predefinitaUse the default SSH configuration

Fare clic sulla freccia a destra, lasciare le impostazioni predefinite nella schermata #3.Click right arrow, leave the defaults on the screen #3. Fare clic sul pulsante "verifica" per completare il processo di provisioning di macchine Virtuali.Click the “check” button to complete the VM provisioning process. Dopo alcuni minuti, la macchina virtuale "ubuntu-template" sarà in stato "In esecuzione".After a few minutes, the VM with the name “ubuntu-template” should be in a “running” status.

INSTALLARE IL SOFTWARE NECESSARIOINSTALL THE NECESSARY SOFTWARE

PASSAGGIO 1: Caricare i file tarballSTEP 1: Upload tarballs

Con scp o pscp, copiare il software scaricato in precedenza nella directory ~/downloads con il seguente formato del comando:Using scp or pscp, copy the previously downloaded software to ~/downloads directory using the following command format:

pscp server-jre-8u5-linux-x64.tar.gz localadmin@hk-cas-template.cloudapp.net:/home/localadmin/downloads/server-jre-8u5-linux-x64.tar.gzpscp server-jre-8u5-linux-x64.tar.gz localadmin@hk-cas-template.cloudapp.net:/home/localadmin/downloads/server-jre-8u5-linux-x64.tar.gz

Ripetere il comando precedente per JRE e per i bit di Cassandra.Repeat the above command for JRE as well as for the Cassandra bits.

PASSAGGIO 2: Preparare la struttura di directory ed estrarre gli archiviSTEP 2: Prepare the directory structure and extract the archives

Accedere alla macchina virtuale e creare la struttura di directory ed estrarre il software come utente con privilegi avanzati con lo script bash seguente:Log into the VM and create the directory structure and extract software as a super user using the bash script below:

#!/bin/bash
CASS_INSTALL_DIR="/opt/cassandra"
JRE_INSTALL_DIR="/opt/java"
CASS_DATA_DIR="/var/lib/cassandra"
CASS_LOG_DIR="/var/log/cassandra"
DOWNLOADS_DIR="~/downloads"
JRE_TARBALL="server-jre-8u5-linux-x64.tar.gz"
CASS_TARBALL="apache-cassandra-2.0.8-bin.tar.gz"
SVC_USER="localadmin"

RESET_ERROR=1
MKDIR_ERROR=2

reset_installation ()
{
   rm -rf $CASS_INSTALL_DIR 2> /dev/null
   rm -rf $JRE_INSTALL_DIR 2> /dev/null
   rm -rf $CASS_DATA_DIR 2> /dev/null
   rm -rf $CASS_LOG_DIR 2> /dev/null
}
make_dir ()
{
   if [ -z "$1" ]
   then
      echo "make_dir: invalid directory name"
      exit $MKDIR_ERROR
   fi

   if [ -d "$1" ]
   then
      echo "make_dir: directory already exists"
      exit $MKDIR_ERROR
   fi

   mkdir $1 2>/dev/null
   if [ $? != 0 ]
   then
      echo "directory creation failed"
      exit $MKDIR_ERROR
   fi
}

unzip()
{
   if [ $# == 2 ]
   then
      tar xzf $1 -C $2
   else
      echo "archive error"
   fi

}

if [ -n "$1" ]
then
   SVC_USER=$1
fi

reset_installation
make_dir $CASS_INSTALL_DIR
make_dir $JRE_INSTALL_DIR
make_dir $CASS_DATA_DIR
make_dir $CASS_LOG_DIR

#unzip JRE and Cassandra
unzip $HOME/downloads/$JRE_TARBALL $JRE_INSTALL_DIR
unzip $HOME/downloads/$CASS_TARBALL $CASS_INSTALL_DIR

#Change the ownership to the service credentials

chown -R $SVC_USER:$GROUP $CASS_DATA_DIR
chown -R $SVC_USER:$GROUP $CASS_LOG_DIR
echo "edit /etc/profile to add JRE to the PATH"
echo "installation is complete"

Se si incolla questo script in una finestra di vim, rimuovere il ritorno a capo (‘\r”) con il comando seguente:If you paste this script into vim window, make sure to remove the carriage return (‘\r”) using the following command:

tr -d '\r' <infile.sh >outfile.sh

Passaggio 3: Modificare etc/profileStep 3: Edit etc/profile

Aggiungere il codice seguente alla fine:Append the following at the end:

JAVA_HOME=/opt/java/jdk1.8.0_05
CASS_HOME= /opt/cassandra/apache-cassandra-2.0.8
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$CASS_HOME/bin
export JAVA_HOME
export CASS_HOME
export PATH

Passaggio 4: Installare JNA per i sistemi di produzioneStep 4: Install JNA for production systems

Utilizzare la sequenza di comandi seguenti: il comando che segue installa jna 3.2.7.jar e jna piattaforma 3.2.7.jar a /usr/share.java directory sudo apt-get installare libjna javaUse the following command sequence: The following command installs jna-3.2.7.jar and jna-platform-3.2.7.jar to /usr/share.java directory sudo apt-get install libjna-java

Creare collegamenti simbolici nella directory $CASS_HOME/lib in modo che lo script di avvio di Cassandra possa trovare questi file jar:Create symbolic links in $CASS_HOME/lib directory so that Cassandra startup script can find these jars:

ln -s /usr/share/java/jna-3.2.7.jar $CASS_HOME/lib/jna.jar

ln -s /usr/share/java/jna-platform-3.2.7.jar $CASS_HOME/lib/jna-platform.jar

Passaggio 5: Configurare cassandra.yamlStep 5: Configure cassandra.yaml

Modificare cassandra.yaml in ogni macchina virtuale in modo da riflettere configurazione necessarie per tutte le macchine virtuali [è modificare questa configurazione durante il provisioning vero e proprio]:Edit cassandra.yaml on each VM to reflect configuration needed by all the virtual machines [you tweak this configuration during the actual provisioning]:

Nome campoField Name ValoreValue OsservazioniRemarks
cluster_namecluster_name "CustomerService"“CustomerService” Usare il nome che rispecchia la distribuzioneUse the name that reflects your deployment
listen_addresslisten_address [lasciare vuoto][leave it blank] Eliminare "localhost"Delete “localhost”
rpc_addresrpc_addres [lasciare vuoto][leave it blank] Eliminare "localhost"Delete “localhost”
seedsseeds "10.1.2.4, 10.1.2.6, 10.1.2.8""10.1.2.4, 10.1.2.6, 10.1.2.8" Elenco di tutti gli indirizzi IP designati come valori di inizializzazione.List of all the IP addresses which are designated as seeds.
endpoint_snitchendpoint_snitch org.apache.cassandra.locator.GossipingPropertyFileSnitchorg.apache.cassandra.locator.GossipingPropertyFileSnitch Viene usato da NetworkTopologyStrateg per derivare il data center e il rack della macchina virtualeThis is used by the NetworkTopologyStrateg for inferring the data center and the rack of the VM

Passaggio 6: Acquisire l'immagine della macchina virtualeStep 6: Capture the VM image

Accedere alla macchina virtuale con il nome host (hk-cas-template.cloudapp.net) e la chiave privata SSH creata in precedenza.Log into the virtual machine using the hostname (hk-cas-template.cloudapp.net) and the SSH private key previously created. Per informazioni dettagliate su come accedere con il comando SSH o putty.exe, vedere Come usare SSH con Linux in Azure.See How to Use SSH with Linux on Azure for details on how to log in using the command ssh or putty.exe.

Per acquisire l'immagine, eseguire la sequenza di azioni seguente:Execute the following sequence of actions to capture the image:

1. Effettuare il deprovisioning1. Deprovision

Usare il comando "sudo waagent –deprovision+user" per rimuovere le informazioni specifiche dell'istanza della macchina virtuale.Use the command “sudo waagent –deprovision+user” to remove Virtual Machine instance specific information. Per altri dettagli sul processo di acquisizione di un'immagine, vedere Come acquisire una macchina virtuale Linux da usare come modello .See for How to Capture a Linux Virtual Machine to Use as a Template more details on the image capture process.

2: arrestare la macchina virtuale2: Shut down the VM

Assicurarsi che la macchina virtuale sia evidenziata e fare clic sul collegamento ARRESTA nella barra dei comandi in basso.Make sure that the virtual machine is highlighted and click the SHUTDOWN link from the bottom command bar.

3: Acquisire l'immagine3: Capture the image

Assicurarsi che la macchina virtuale sia evidenziata e fare clic sul collegamento ACQUISISCI nella barra dei comandi in basso.Make sure that the virtual machine is highlighted and click the CAPTURE link from the bottom command bar. Nella successiva schermata, assegnare un nome di immagine (ad esempio hk-cas-2-08-ub-14-04-2014071), appropriata la descrizione dell'immagine e fare clic su "verifica" contrassegna per completare il processo di acquisizione.In the next screen, give an IMAGE NAME (for example hk-cas-2-08-ub-14-04-2014071), appropriate IMAGE DESCRIPTION, and click the “check” mark to finish the CAPTURE process.

Questo processo richiede pochi secondi e l'immagine deve essere disponibile nella sezione immagini personali della raccolta immagini.This process takes a few seconds and the image should be available in MY IMAGES section of the image gallery. La macchina virtuale di origine viene eliminato automaticamente dopo l'acquisizione dell'immagine correttamente.The source VM is automatically deleted after the image is successfully captured.

Processo di distribuzione in un'area singolaSingle Region Deployment Process

Passaggio 1: Creare la rete virtuale Accedere al portale di Azure e creare una rete virtuale (versione classica) con gli attributi elencati nella tabella seguente.Step 1: Create the Virtual Network Log into the Azure portal and create a virtual network (classic) with the attributes shown in the following table. Per i singoli passaggi del processo, vedere Creare una rete virtuale (versione classica) usando il portale di Azure.See Create a virtual network (classic) using the Azure portal for detailed steps of the process.



Nome attributo macchina virtualeVM Attribute NameValoreValueOsservazioniRemarks
NOMENamevnet-cass-west-usvnet-cass-west-us
RegionRegionStati Uniti occidentaliWest US
Server DNSDNS ServersNessunaNoneIgnorare questo attributo perché non si userà un server DNSIgnore this as we are not using a DNS Server
Spazio di indirizziAddress Space10.1.0.0/1610.1.0.0/16
IP inizialeStarting IP10.1.0.010.1.0.0
CIDRCIDR /16 (65531)/16 (65531)

Aggiungere le subnet seguenti:Add the following subnets:

NOMENameIP inizialeStarting IPCIDRCIDROsservazioniRemarks
Webweb10.1.1.010.1.1.0/24 (251)/24 (251)Subnet per la Web farmSubnet for the web farm
datadata10.1.2.010.1.2.0/24 (251)/24 (251)Subnet per i nodi del databaseSubnet for the database nodes

Le subnet dati e Web possono essere protette con i gruppi di sicurezza di rete che esulano dall'ambito di questo articolo.Data and Web subnets can be protected through network security groups the coverage of which is out of scope for this article.

Passaggio 2: Eseguire il provisioning le macchine virtuali utilizzando l'immagine creata in precedenza, si creare le macchine virtuali seguenti nel server del cloud "hk-c-svc-Ovest" e li associano alle rispettive subnet, come illustrato di seguito:Step 2: Provision Virtual Machines Using the image created previously, you create the following virtual machines in the cloud server “hk-c-svc-west” and bind them to the respective subnets as shown below:

Nome computerMachine Name SubnetSubnet Indirizzo IPIP Address Set di disponibilitàAvailability setDC/RackDC/RackValore di inizializzazione?Seed?
hk-c1-west-ushk-c1-west-us datadata 10.1.2.410.1.2.4 hk-c-aset-1hk-c-aset-1 dc =WESTUS rack =rack1dc =WESTUS rack =rack1 Yes
hk-c2-west-ushk-c2-west-us datadata 10.1.2.510.1.2.5 hk-c-aset-1hk-c-aset-1 dc =WESTUS rack =rack1dc =WESTUS rack =rack1 No No
hk-c3-west-ushk-c3-west-us datadata 10.1.2.610.1.2.6 hk-c-aset-1hk-c-aset-1 dc =WESTUS rack =rack2dc =WESTUS rack =rack2 Yes
hk-c4-west-ushk-c4-west-us datadata 10.1.2.710.1.2.7 hk-c-aset-1hk-c-aset-1 dc =WESTUS rack =rack2dc =WESTUS rack =rack2 No No
hk-c5-west-ushk-c5-west-us datadata 10.1.2.810.1.2.8 hk-c-aset-2hk-c-aset-2 dc =WESTUS rack =rack3dc =WESTUS rack =rack3 Yes
hk-c6-west-ushk-c6-west-us datadata 10.1.2.910.1.2.9 hk-c-aset-2hk-c-aset-2 dc =WESTUS rack =rack3dc =WESTUS rack =rack3 No No
hk-c7-west-ushk-c7-west-us datadata 10.1.2.1010.1.2.10 hk-c-aset-2hk-c-aset-2 dc =WESTUS rack =rack4dc =WESTUS rack =rack4 Yes
hk-c8-west-ushk-c8-west-us datadata 10.1.2.1110.1.2.11 hk-c-aset-2hk-c-aset-2 dc =WESTUS rack =rack4dc =WESTUS rack =rack4 No No
hk-w1-west-ushk-w1-west-us Webweb 10.1.1.410.1.1.4 hk-w-aset-1hk-w-aset-1 N/DN/A
hk-w2-west-ushk-w2-west-us Webweb 10.1.1.510.1.1.5 hk-w-aset-1hk-w-aset-1 N/DN/A

Per creare l'elenco precedente di macchine virtuali, è necessario eseguire il processo seguente:Creation of the above list of VMs requires the following process:

  1. Creare un servizio cloud vuoto in una determinata areaCreate an empty cloud service in a particular region
  2. Creare una macchina virtuale dall'immagine acquisita in precedenza e collegarla alla rete virtuale creata in precedenza e ripetere questo passaggio per tutte le macchine virtualiCreate a VM from the previously captured image and attach it to the virtual network created previously; repeat this for all the VMs
  3. Aggiungere al servizio cloud un dispositivo di bilanciamento del carico interno e collegarlo alla subnet "dati"Add an internal load balancer to the cloud service and attach it to the “data” subnet
  4. Per ogni macchina virtuale creata in precedenza, aggiungere un endpoint con carico bilanciato per il traffico Thrift con un set con carico bilanciato connesso al dispositivo di bilanciamento del carico creato in precedenzaFor each VM created previously, add a load balanced endpoint for thrift traffic through a load balanced set connected to the previously created internal load balancer

Il processo precedente può essere eseguito tramite il portale di Azure; Utilizzare un computer Windows (usare una macchina virtuale in Azure se non si ha accesso a un computer Windows), utilizzare il seguente script di PowerShell per eseguire automaticamente il provisioning di tutte le macchine 8 virtuali.The above process can be executed using Azure portal; use a Windows machine (use a VM on Azure if you don't have access to a Windows machine), use the following PowerShell script to provision all 8 VMs automatically.

Elenco 1: script di PowerShell per il provisioning delle macchine virtualiList 1: PowerShell script for provisioning virtual machines

    #Tested with Azure Powershell - November 2014
    #This powershell script deployes a number of VMs from an existing image inside an Azure region
    #Import your Azure subscription into the current Powershell session before proceeding
    #The process: 1. create Azure Storage account, 2. create virtual network, 3.create the VM template, 2. crate a list of VMs from the template

    #fundamental variables - change these to reflect your subscription
    $country="us"; $region="west"; $vnetName = "your_vnet_name";$storageAccount="your_storage_account"
    $numVMs=8;$prefix = "hk-cass";$ilbIP="your_ilb_ip"
    $subscriptionName = "Azure_subscription_name";
    $vmSize="ExtraSmall"; $imageName="your_linux_image_name"
    $ilbName="ThriftInternalLB"; $thriftEndPoint="ThriftEndPoint"

    #generated variables
    $serviceName = "$prefix-svc-$region-$country"; $azureRegion = "$region $country"

    $vmNames = @()
    for ($i=0; $i -lt $numVMs; $i++)
    {
       $vmNames+=("$prefix-vm"+($i+1) + "-$region-$country" );
    }

    #select an Azure subscription already imported into Powershell session
    Select-AzureSubscription -SubscriptionName $subscriptionName -Current
    Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccountName $storageAccount

    #create an empty cloud service
    New-AzureService -ServiceName $serviceName -Label "hkcass$region" -Location $azureRegion
    Write-Host "Created $serviceName"

    $VMList= @()   # stores the list of azure vm configuration objects
    #create the list of VMs
    foreach($vmName in $vmNames)
    {
       $VMList += New-AzureVMConfig -Name $vmName -InstanceSize ExtraSmall -ImageName $imageName |
       Add-AzureProvisioningConfig -Linux -LinuxUser "localadmin" -Password "Local123" |
       Set-AzureSubnet "data"
    }

    New-AzureVM -ServiceName $serviceName -VNetName $vnetName -VMs $VMList

    #Create internal load balancer
    Add-AzureInternalLoadBalancer -ServiceName $serviceName -InternalLoadBalancerName $ilbName -SubnetName "data" -StaticVNetIPAddress "$ilbIP"
    Write-Host "Created $ilbName"
    #Add add the thrift endpoint to the internal load balancer for all the VMs
    foreach($vmName in $vmNames)
    {
        Get-AzureVM -ServiceName $serviceName -Name $vmName |
            Add-AzureEndpoint -Name $thriftEndPoint -LBSetName "ThriftLBSet" -Protocol tcp -LocalPort 9160 -PublicPort 9160 -ProbePort 9160 -ProbeProtocol tcp -ProbeIntervalInSeconds 10 -InternalLoadBalancerName $ilbName |
            Update-AzureVM

        Write-Host "created $vmName"     
    }

Passaggio 3: Configurare Cassandra in ogni macchina virtualeStep 3: Configure Cassandra on each VM

Accedere alla macchina virtuale ed eseguire la procedura seguente:Log into the VM and perform the following:

  • Modificare $CASS_HOME/conf/cassandra-rackdc.properties per specificare le proprietà del data center e del rack:Edit $CASS_HOME/conf/cassandra-rackdc.properties to specify the data center and rack properties:

     dc =EASTUS, rack =rack1
    
  • Modificare cassandra.yaml per configurare i nodi dei valori di inizializzazione come segue:Edit cassandra.yaml to configure seed nodes as below:

     Seeds: "10.1.2.4,10.1.2.6,10.1.2.8,10.1.2.10"
    

Passaggio 4: Avviare le macchine virtuali e testare il clusterStep 4: Start the VMs and test the cluster

Accedere a uno dei nodi (ad esempio hk-c1--Stati Uniti occidentali) ed eseguire il comando seguente per visualizzare lo stato del cluster:Log into one of the nodes (for example hk-c1-west-us) and run the following command to see the status of the cluster:

   nodetool –h 10.1.2.4 –p 7199 status

Per un cluster a 8 nodi i dati visualizzati saranno simili ai seguenti:You should see the display similar to the one below for an 8-node cluster:

StatusStatusIndirizzoAddress CaricamentoLoad TokensTokens OwnsOwns Host IDHost ID RackRack
UNUN 10.1.2.410.1.2.4 87,81 KB87.81 KB 256256 38,0%38.0% Guid (removed)Guid (removed)rack1rack1
UNUN 10.1.2.510.1.2.5 41,08 KB41.08 KB 256256 68,9% 68.9% Guid (removed)Guid (removed)rack1rack1
UNUN 10.1.2.610.1.2.6 55,29 KB55.29 KB 256256 68,8%68.8% Guid (removed)Guid (removed)rack2rack2
UNUN 10.1.2.710.1.2.7 55,29 KB55.29 KB 256256 68,8%68.8% Guid (removed)Guid (removed)rack2rack2
UNUN 10.1.2.810.1.2.8 55,29 KB55.29 KB 256256 68,8%68.8% Guid (removed)Guid (removed)rack3rack3
UNUN 10.1.2.910.1.2.9 55,29 KB55.29 KB 256256 68,8%68.8% Guid (removed)Guid (removed)rack3rack3
UNUN 10.1.2.1010.1.2.10 55,29 KB55.29 KB 256256 68,8%68.8% Guid (removed)Guid (removed)rack4rack4
UNUN 10.1.2.1110.1.2.11 55,29 KB55.29 KB 256256 68,8%68.8% Guid (removed)Guid (removed)rack4rack4

Testare il cluster in un'area singolaTest the Single Region Cluster

Usare i passaggi seguenti per testare il cluster:Use the following steps to test the cluster:

  1. Utilizzando il cmdlet Get-AzureInternalLoadbalancer comando di Powershell, ottenere l'indirizzo IP del servizio di bilanciamento del carico interno (ad esempio 10.1.2.101).Using the Powershell command Get-AzureInternalLoadbalancer commandlet, obtain the IP address of the internal load balancer (for example 10.1.2.101). La sintassi del comando viene mostrata di seguito: Get-AzureLoadbalancer –ServiceName "hk-c-svc-west-us" [vengono visualizzati i dettagli del servizio di bilanciamento del carico interno con l'indirizzo IP]The syntax of the command is shown below: Get-AzureLoadbalancer –ServiceName "hk-c-svc-west-us” [displays the details of the internal load balancer along with its IP address]
  2. Accedere alla macchina virtuale (ad esempio hk-w1--Stati Uniti occidentali) di web farm tramite Putty o sshLog into the web farm VM (for example hk-w1-west-us) using Putty or ssh
  3. Eseguire $CASS_HOME/bin/cqlsh 10.1.2.101 9160Execute $CASS_HOME/bin/cqlsh 10.1.2.101 9160
  4. Usare i seguenti comandi CQL per verificare se il cluster è in funzione:Use the following CQL commands to verify if the cluster is working:

    CREATE KEYSPACE customers_ks WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 }; USE customers_ks; CREATE TABLE Customers(customer_id int PRIMARY KEY, firstname text, lastname text); INSERT INTO Customers(customer_id, firstname, lastname) VALUES(1, 'John', 'Doe'); INSERT INTO Customers(customer_id, firstname, lastname) VALUES (2, 'Jane', 'Doe');CREATE KEYSPACE customers_ks WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 }; USE customers_ks; CREATE TABLE Customers(customer_id int PRIMARY KEY, firstname text, lastname text); INSERT INTO Customers(customer_id, firstname, lastname) VALUES(1, 'John', 'Doe'); INSERT INTO Customers(customer_id, firstname, lastname) VALUES (2, 'Jane', 'Doe');

    SELECT * FROM Customers;SELECT * FROM Customers;

Dovrebbe essere simile al seguente i risultati seguenti:You should see something like the following results:

customer_idcustomer_id firstnamefirstname lastnamelastname
11 JohnJohn DoeDoe
22 JaneJane DoeDoe

Passando creato nel passaggio 4 utilizza SimpleStrategy con un replication_factor 3.The keyspace created in step 4 uses SimpleStrategy with a replication_factor of 3. SimpleStrategy è consigliato per le distribuzioni in un data center singolo, NetworkTopologyStrategy invece per le distribuzioni in più data center.SimpleStrategy is recommended for single data center deployments whereas NetworkTopologyStrategy for multi-data center deployments. Un replication_factor 3 offre tolleranza di errore di nodo.A replication_factor of 3 gives tolerance for node failures.

Processo di distribuzione in più aree Multi-Region Deployment Process

Si sfruttare la distribuzione di un'area singola completata e ripetere la stessa procedura per installare una seconda area.You leverage the single region deployment completed and repeat the same process for installing the second region. La differenza principale tra la distribuzione di uno o più area è l'impostazione di tunnel VPN per la comunicazione tra area; si avvia l'installazione di rete, eseguire il provisioning delle macchine virtuali e configura Cassandra.The key difference between the single and multiple region deployment is the VPN tunnel setup for inter-region communication; you start with the network installation, provision the VMs and configure Cassandra.

Passaggio 1: Creare la rete virtuale nella seconda areaStep 1: Create the Virtual Network at the 2nd Region

Accedere al portale di Azure e creare una rete virtuale con la presentazione di attributi nella tabella.Log into the Azure portal and create a Virtual Network with the attributes show in the table. Vedere configurare una rete virtuale nel portale di Azure per i passaggi dettagliati del processo.See Configure a Cloud-Only Virtual Network in the Azure portal for detailed steps of the process.

Nome attributoAttribute Name ValoreValue OsservazioniRemarks
NOMEName vnet-cass-east-usvnet-cass-east-us
RegionRegion Stati Uniti orientaliEast US
Server DNSDNS Servers Ignorare questo attributo perché non si userà un server DNSIgnore this as we are not using a DNS Server
Configura una VPN Point-to-SiteConfigure a point-to-site VPN Ignorare questo attributoIgnore this
Configura una VPN Site-to-SiteConfigure a site-to-site VPN Ignorare questo attributoIgnore this
Spazio di indirizziAddress Space 10.2.0.0/1610.2.0.0/16
IP inizialeStarting IP 10.2.0.010.2.0.0
CIDRCIDR /16 (65531)/16 (65531)

Aggiungere le subnet seguenti:Add the following subnets:

NOMEName IP inizialeStarting IP CIDRCIDR OsservazioniRemarks
Webweb 10.2.1.010.2.1.0 /24 (251)/24 (251) Subnet per la Web farmSubnet for the web farm
datadata 10.2.2.010.2.2.0 /24 (251)/24 (251) Subnet per i nodi del databaseSubnet for the database nodes

Passaggio 2: Creazione delle reti localiStep 2: Create Local Networks

Una rete locale nella rete virtuale di Azure è uno spazio di indirizzi proxy che esegue il mapping a un sito remoto, incluso un cloud privato o un'altra area di Azure.A Local Network in Azure virtual networking is a proxy address space that maps to a remote site including a private cloud or another Azure region. Questo spazio di indirizzi proxy è associato a un gateway remoto per il routing della rete alle destinazioni di rete appropriate.This proxy address space is bound to a remote gateway for routing network to the right networking destinations. Per le istruzioni per stabilire la connessione tra reti virtuali, vedere Configurare una connessione tra reti virtuali .See Configure a VNet to VNet Connection for the instructions on establishing VNET-to-VNET connection.

Creare due reti locali con i dettagli seguenti:Create two local networks per the following details:

Nome reteNetwork Name Indirizzo gateway VPNVPN Gateway Address Spazio di indirizziAddress Space OsservazioniRemarks
hk-lnet-map-to-east-ushk-lnet-map-to-east-us 23.1.1.123.1.1.1 10.2.0.0/1610.2.0.0/16 Durante la creazione della rete locale assegnare un indirizzo gateway segnaposto.While creating the Local Network give a placeholder gateway address. Il vero indirizzo gateway verrà inserito una volta creato il gateway.The real gateway address is filled once the gateway is created. Verificare che lo spazio di indirizzi corrisponda esattamente alla rispettiva rete virtuale remota, in questo caso la rete virtuale creata nell'area Stati Uniti orientali.Make sure the address space exactly matches the respective remote VNET; in this case the VNET created in the East US region.
hk-lnet-map-to-west-ushk-lnet-map-to-west-us 23.2.2.223.2.2.2 10.1.0.0/1610.1.0.0/16 Durante la creazione della rete locale assegnare un indirizzo gateway segnaposto.While creating the Local Network give a placeholder gateway address. Il vero indirizzo gateway verrà inserito una volta creato il gateway.The real gateway address is filled once the gateway is created. Verificare che lo spazio di indirizzi corrisponda esattamente alla rispettiva rete virtuale remota, in questo caso la rete virtuale creata nell'area Stati Uniti occidentali.Make sure the address space exactly matches the respective remote VNET; in this case the VNET created in the West US region.

Passaggio 3: Eseguire il mapping della rete "locale" alle rispettive reti virtualiStep 3: Map “Local” network to the respective VNETs

Dal portale di Azure, selezionare ogni rete virtuale, fare clic su "Configura", selezionare "Connetti alla rete locale" e selezionare le reti locali per i dettagli seguenti:From the Azure portal, select each vnet, click “Configure”, check “Connect to the local network”, and select the Local Networks per the following details:

Rete virtualeVirtual Network Rete localeLocal Network
hk-vnet-west-ushk-vnet-west-us hk-lnet-map-to-east-ushk-lnet-map-to-east-us
hk-vnet-east-ushk-vnet-east-us hk-lnet-map-to-west-ushk-lnet-map-to-west-us

Passaggio 4: Creare i gateway nella rete virtuale 1 e nella rete virtuale 2Step 4: Create Gateways on VNET1 and VNET2

Dal dashboard di entrambe le reti virtuali, fare clic su Crea GATEWAY per attivare il gateway VPN, il processo di provisioning.From the dashboard of both the virtual networks, click CREATE GATEWAY to trigger the VPN gateway provisioning process. Dopo alcuni minuti nel dashboard di ogni rete virtuale verrà visualizzato l'effettivo indirizzo gateway.After a few minutes the dashboard of each virtual network should display the actual gateway address.

Passaggio 5: Aggiornare le reti "locali" con i rispettivi indirizzi "gateway"Step 5: Update “Local” networks with the respective “Gateway” addresses

Modificare entrambe le reti locali per poter sostituire l'indirizzo IP gateway segnaposto con il vero indirizzo IP dei gateway di cui è appena stato effettuato il provisioning.Edit both the local networks to replace the placeholder gateway IP address with the real IP address of the just provisioned gateways. Usare il mapping seguente:Use the following mapping:

Rete localeLocal Network Gateway di rete virtualeVirtual Network Gateway
hk-lnet-map-to-east-ushk-lnet-map-to-east-us Gateway di hk-vnet-west-usGateway of hk-vnet-west-us
hk-lnet-map-to-west-ushk-lnet-map-to-west-us Gateway di hk-vnet-east-usGateway of hk-vnet-east-us

Passaggio 6: Aggiornare la chiave condivisaStep 6: Update the shared key

Utilizzare lo script di Powershell seguente per aggiornare la chiave IPSec di ciascun gateway VPN [utilizzare la chiave SAKE per entrambi i gateway]: Set-AzureVNetGatewayKey -VNetName hk-vnet-east-us -LocalNetworkSiteName hk-lnet-map-to-west-us -SharedKey D9E76BKK Set-AzureVNetGatewayKey -VNetName hk-vnet-west-us -LocalNetworkSiteName hk-lnet-map-to-east-us -SharedKey D9E76BKKUse the following Powershell script to update the IPSec key of each VPN gateway [use the sake key for both the gateways]: Set-AzureVNetGatewayKey -VNetName hk-vnet-east-us -LocalNetworkSiteName hk-lnet-map-to-west-us -SharedKey D9E76BKK Set-AzureVNetGatewayKey -VNetName hk-vnet-west-us -LocalNetworkSiteName hk-lnet-map-to-east-us -SharedKey D9E76BKK

Passaggio 7: Stabilire la connessione tra reti virtualiStep 7: Establish the VNET-to-VNET connection

Dal portale di Azure, usare il menu di "DASHBOARD" di entrambe le reti virtuali per stabilire una connessione gateway a gateway.From the Azure portal, use the “DASHBOARD” menu of both the virtual networks to establish gateway-to-gateway connection. Usare le voci del menu "CONNETTI" nella barra degli strumenti in basso.Use the “CONNECT” menu items in the bottom toolbar. Dopo alcuni minuti nel dashboard apparirà la visualizzazione grafica dei dettagli della connessione.After a few minutes the dashboard should display the connection details graphically.

Passaggio 8: Creare le macchine virtuali nell'area n. 2Step 8: Create the virtual machines in region #2

Creare l'immagine Ubuntu descritta nella distribuzione nell'area n. 1 seguendo gli stessi passaggi o copiare il file VHD dell'immagine nell'account di archiviazione di Azure dell'area n. 2 e creare l'immagine.Create the Ubuntu image as described in region #1 deployment by following the same steps or copy the image VHD file to the Azure storage account located in region #2 and create the image. Usare questa immagine e creare il seguente elenco di macchine virtuali in un nuovo servizio cloud hk-c-svc-east-us:Use this image and create the following list of virtual machines into a new cloud service hk-c-svc-east-us:

Nome computerMachine Name SubnetSubnet Indirizzo IPIP Address Set di disponibilitàAvailability set DC/RackDC/Rack Valore di inizializzazione?Seed?
hk-c1-east-ushk-c1-east-us datadata 10.2.2.410.2.2.4 hk-c-aset-1hk-c-aset-1 dc =EASTUS rack =rack1dc =EASTUS rack =rack1 Yes
hk-c2-east-ushk-c2-east-us datadata 10.2.2.510.2.2.5 hk-c-aset-1hk-c-aset-1 dc =EASTUS rack =rack1dc =EASTUS rack =rack1 No No
hk-c3-east-ushk-c3-east-us datadata 10.2.2.610.2.2.6 hk-c-aset-1hk-c-aset-1 dc =EASTUS rack =rack2dc =EASTUS rack =rack2 Yes
hk-c5-east-ushk-c5-east-us datadata 10.2.2.810.2.2.8 hk-c-aset-2hk-c-aset-2 dc =EASTUS rack =rack3dc =EASTUS rack =rack3 Yes
hk-c6-east-ushk-c6-east-us datadata 10.2.2.910.2.2.9 hk-c-aset-2hk-c-aset-2 dc =EASTUS rack =rack3dc =EASTUS rack =rack3 No No
hk-c7-east-ushk-c7-east-us datadata 10.2.2.1010.2.2.10 hk-c-aset-2hk-c-aset-2 dc =EASTUS rack =rack4dc =EASTUS rack =rack4 Yes
hk-c8-east-ushk-c8-east-us datadata 10.2.2.1110.2.2.11 hk-c-aset-2hk-c-aset-2 dc =EASTUS rack =rack4dc =EASTUS rack =rack4 No No
hk-w1-east-ushk-w1-east-us Webweb 10.2.1.410.2.1.4 hk-w-aset-1hk-w-aset-1 N/DN/A N/DN/A
hk-w2-east-ushk-w2-east-us Webweb 10.2.1.510.2.1.5 hk-w-aset-1hk-w-aset-1 N/DN/A N/DN/A

Seguire le stesse istruzioni dell'area n. 1, ma usare lo spazio di indirizzi 10.2.xxx.xxx.Follow the same instructions as region #1 but use 10.2.xxx.xxx address space.

Passaggio 9: Configurare Cassandra in ogni VMStep 9: Configure Cassandra on each VM

Accedere alla macchina virtuale ed eseguire la procedura seguente:Log into the VM and perform the following:

  1. Modificare $CASS_HOME/conf/cassandra-rackdc.properties per specificare le proprietà del centro dati e del rack nel formato: dc =EASTUS rack =rack1Edit $CASS_HOME/conf/cassandra-rackdc.properties to specify the data center and rack properties in the format: dc =EASTUS rack =rack1
  2. Modificare cassandra.yaml per configurare i nodi dei valori di inizializzazione. Valori di inizializzazione: "10.1.2.4,10.1.2.6,10.1.2.8,10.1.2.10,10.2.2.4,10.2.2.6,10.2.2.8,10.2.2.10"Edit cassandra.yaml to configure seed nodes: Seeds: "10.1.2.4,10.1.2.6,10.1.2.8,10.1.2.10,10.2.2.4,10.2.2.6,10.2.2.8,10.2.2.10"

Passaggio 10: Avviare CassandraStep 10: Start Cassandra

Accedere a ogni macchina virtuale e avviare Cassandra in background eseguendo il comando seguente: $CASS_HOME/bin/cassandraLog into each VM and start Cassandra in the background by running the following command: $CASS_HOME/bin/cassandra

Testare il cluster in più areeTest the Multi-Region Cluster

Per ora Cassandra è stato distribuito in 16 nodi con 8 nodi in ogni area di Azure.By now Cassandra has been deployed to 16 nodes with 8 nodes in each Azure region. Questi nodi sono nello stesso cluster grazie al nome cluster comune e alla configurazione dei nodi dei valori di inizializzazione.These nodes are in the same cluster by virtue of the common cluster name and the seed node configuration. Usare il processo seguente per testare il cluster:Use the following process to test the cluster:

Passaggio 1: Ottenere l'IP del servizio di bilanciamento del carico interno per entrambe le aree con PowerShellStep 1: Get the internal load balancer IP for both the regions using PowerShell

  • Get-AzureInternalLoadbalancer -ServiceName "hk-c-svc-west-us"Get-AzureInternalLoadbalancer -ServiceName "hk-c-svc-west-us"
  • Get-AzureInternalLoadbalancer -ServiceName "hk-c-svc-east-us"Get-AzureInternalLoadbalancer -ServiceName "hk-c-svc-east-us"

    Prendere nota degli indirizzi IP (per occidentale di esempio - 10.1.2.101, est - 10.2.2.101) visualizzato.Note the IP addresses (for example west - 10.1.2.101, east - 10.2.2.101) displayed.

Passaggio 2: Eseguire quanto segue nell'area occidentale dopo l'accesso a hk-w1-west-usStep 2: Execute the following in the west region after logging into hk-w1-west-us

  1. Eseguire $CASS_HOME/bin/cqlsh 10.1.2.101 9160Execute $CASS_HOME/bin/cqlsh 10.1.2.101 9160
  2. Eseguire i comandi CQL seguenti:Execute the following CQL commands:

    CREATE KEYSPACE customers_ks WITH REPLICATION = { 'class' : 'NetworkToplogyStrategy', 'WESTUS' : 3, 'EASTUS' : 3}; USE customers_ks; CREATE TABLE Customers(customer_id int PRIMARY KEY, firstname text, lastname text); INSERT INTO Customers(customer_id, firstname, lastname) VALUES(1, 'John', 'Doe'); INSERT INTO Customers(customer_id, firstname, lastname) VALUES (2, 'Jane', 'Doe'); SELECT * FROM Customers;CREATE KEYSPACE customers_ks WITH REPLICATION = { 'class' : 'NetworkToplogyStrategy', 'WESTUS' : 3, 'EASTUS' : 3}; USE customers_ks; CREATE TABLE Customers(customer_id int PRIMARY KEY, firstname text, lastname text); INSERT INTO Customers(customer_id, firstname, lastname) VALUES(1, 'John', 'Doe'); INSERT INTO Customers(customer_id, firstname, lastname) VALUES (2, 'Jane', 'Doe'); SELECT * FROM Customers;

I dati visualizzati saranno simili ai seguenti:You should see a display like the one below:

customer_idcustomer_id firstnamefirstname LastnameLastname
11 JohnJohn DoeDoe
22 JaneJane DoeDoe

Passaggio 3: Eseguire quanto segue nell'area orientale dopo l'accesso a hk-w1-east-usStep 3: Execute the following in the east region after logging into hk-w1-east-us:

  1. Eseguire $CASS_HOME/bin/cqlsh 10.2.2.101 9160Execute $CASS_HOME/bin/cqlsh 10.2.2.101 9160
  2. Eseguire i comandi CQL seguenti:Execute the following CQL commands:

    USE customers_ks; CREATE TABLE Customers(customer_id int PRIMARY KEY, firstname text, lastname text); INSERT INTO Customers(customer_id, firstname, lastname) VALUES(1, 'John', 'Doe'); INSERT INTO Customers(customer_id, firstname, lastname) VALUES (2, 'Jane', 'Doe'); SELECT * FROM Customers;USE customers_ks; CREATE TABLE Customers(customer_id int PRIMARY KEY, firstname text, lastname text); INSERT INTO Customers(customer_id, firstname, lastname) VALUES(1, 'John', 'Doe'); INSERT INTO Customers(customer_id, firstname, lastname) VALUES (2, 'Jane', 'Doe'); SELECT * FROM Customers;

I dati visualizzati saranno uguali a quelli dell'area occidentale:You should see the same display as seen for the West region:

customer_idcustomer_id firstnamefirstname LastnameLastname
11 JohnJohn DoeDoe
22 JaneJane DoeDoe

Inserire ancora alcuni dati per vedere che verranno replicati nella parte west-us del cluster.Execute a few more inserts and see that those get replicated to west-us part of the cluster.

Testare il cluster Cassandra da Node.jsTest Cassandra Cluster from Node.js

Utilizza una delle macchine virtuali Linux creata in precedenza nel livello "web", si esegue un semplice script di Node.js per leggere i dati inseriti in precedenzaUsing one of the Linux VMs crated in the "web" tier previously, you execute a simple Node.js script to read the previously inserted data

Passaggio 1: Installare Node.js e il client CassandraStep 1: Install Node.js and Cassandra Client

  1. Installare Node.js e NPMInstall Node.js and npm
  2. Installare il pacchetto di nodi "cassandra-client" con NPMInstall node package "cassandra-client" using npm
  3. Eseguire lo script seguente al prompt della shell. Viene visualizzata la stringa json dei dati recuperati:Execute the following script at the shell prompt which displays the json string of the retrieved data:

     var pooledCon = require('cassandra-client').PooledConnection;
     var ksName = "custsupport_ks";
     var cfName = "customers_cf";
     var hostList = ['internal_loadbalancer_ip:9160'];
     var ksConOptions = { hosts: hostList,
                          keyspace: ksName, use_bigints: false };
    
     function createKeyspace(callback){
        var cql = 'CREATE KEYSPACE ' + ksName + ' WITH strategy_class=SimpleStrategy AND strategy_options:replication_factor=1';
        var sysConOptions = { hosts: hostList,  
                              keyspace: 'system', use_bigints: false };
        var con = new pooledCon(sysConOptions);
        con.execute(cql,[],function(err) {
        if (err) {
          console.log("Failed to create Keyspace: " + ksName);
          console.log(err);
        }
        else {
          console.log("Created Keyspace: " + ksName);
          callback(ksConOptions, populateCustomerData);
        }
        });
        con.shutdown();
     }
    
     function createColumnFamily(ksConOptions, callback){
       var params = ['customers_cf','custid','varint','custname',
                     'text','custaddress','text'];
       var cql = 'CREATE COLUMNFAMILY ? (? ? PRIMARY KEY,? ?, ? ?)';
     var con =  new pooledCon(ksConOptions);
       con.execute(cql,params,function(err) {
           if (err) {
              console.log("Failed to create column family: " + params[0]);
              console.log(err);
           }
           else {
              console.log("Created column family: " + params[0]);
              callback();
           }
       });
       con.shutdown();
     }
    
     //populate Data
     function populateCustomerData() {
        var params = ['John','Infinity Dr, TX', 1];
        updateCustomer(ksConOptions,params);
    
        params = ['Tom','Fermat Ln, WA', 2];
        updateCustomer(ksConOptions,params);
     }
    
     //update also inserts the record if none exists
     function updateCustomer(ksConOptions,params)
     {
       var cql = 'UPDATE customers_cf SET custname=?,custaddress=? where custid=?';
       var con = new pooledCon(ksConOptions);
       con.execute(cql,params,function(err) {
           if (err) console.log(err);
           else console.log("Inserted customer : " + params[0]);
       });
       con.shutdown();
     }
    
     //read the two rows inserted above
     function readCustomer(ksConOptions)
     {
       var cql = 'SELECT * FROM customers_cf WHERE custid IN (1,2)';
       var con = new pooledCon(ksConOptions);
       con.execute(cql,[],function(err,rows) {
           if (err)
              console.log(err);
           else
              for (var i=0; i<rows.length; i++)
                 console.log(JSON.stringify(rows[i]));
         });
        con.shutdown();
     }
    
     //exectue the code
     createKeyspace(createColumnFamily);
     readCustomer(ksConOptions)
    

ConclusioniConclusion

Microsoft Azure è una piattaforma flessibile che consente di eseguire software sia Microsoft che open source, come è stato illustrato in questa esercitazione.Microsoft Azure is a flexible platform that allows the running of both Microsoft as well as open source software as demonstrated by this exercise. I cluster Cassandra a disponibilità elevata possono essere distribuiti in un data center singolo distribuendo i nodi dei cluster in più domini di errore.Highly available Cassandra clusters can be deployed on a single data center through the spreading of the cluster nodes across multiple fault domains. I cluster Cassandra possono essere distribuiti anche in più area di Azure geograficamente distanti per sistemi a prova di emergenza.Cassandra clusters can also be deployed across multiple geographically distant Azure regions for disaster proof systems. La combinazione di Azure e Cassandra consente di creare servizi cloud a scalabilità elevata, a disponibilità elevata e ripristinabili in caso di emergenza, necessari per gli odierni servizi su scala Internet.Azure and Cassandra together enables the construction of highly scalable, highly available and disaster recoverable cloud services needed by today's internet scale services.

RiferimentiReferences