የውሂብ ጎታዎች
ለደመና-ተወላጅ መተግበሪያዎች የተነደፈ የተከፋፈለ የSQL ዳታቤዝ እና የመቋቋም አቅም
Full SQL support with serializable isolation, multi-statement transactions, and secondary indexes across distributed nodes
Survives node, datacenter, and region failures automatically with synchronous replication and self-healing
Wire protocol compatible with PostgreSQL drivers and tools - use familiar ORMs, CLI tools, and applications
Add nodes on-demand for transparent scaling from 3 nodes to hundreds across multiple cloud regions
Multi-region deployments with geo-partitioning, survivability zones, and follow-the-workload data placement
Rolling upgrades, online schema changes, and automatic rebalancing without application impact
# Download latest binary
wget -qO- https://binaries.cockroachdb.com/cockroach-latest.linux-amd64.tgz | tar xvz
# Move to /usr/local/bin
sudo cp -i cockroach-*.linux-amd64/cockroach /usr/local/bin/
# Verify installation
cockroach version2. Create System User and Directories (All Nodes):# Create cockroach user
sudo useradd -r -s /bin/false cockroach
# Create data directory
sudo mkdir -p /var/lib/cockroach
sudo chown cockroach:cockroach /var/lib/cockroach
# Create certificates directory
sudo mkdir -p /etc/cockroach/certs
sudo chown cockroach:cockroach /etc/cockroach/certs3. Generate Certificates (On First Node Only):# Create CA certificate
cockroach cert create-ca --certs-dir=/etc/cockroach/certs --ca-key=/etc/cockroach/certs/ca.key
# Create node certificates for each node
cockroach cert create-node node1.example.com localhost 127.0.0.1 10.0.0.1 --certs-dir=/etc/cockroach/certs --ca-key=/etc/cockroach/certs/ca.key
cockroach cert create-node node2.example.com localhost 127.0.0.1 10.0.0.2 --certs-dir=/etc/cockroach/certs --ca-key=/etc/cockroach/certs/ca.key
cockroach cert create-node node3.example.com localhost 127.0.0.1 10.0.0.3 --certs-dir=/etc/cockroach/certs --ca-key=/etc/cockroach/certs/ca.key
# Create client certificate for root user
cockroach cert create-client root --certs-dir=/etc/cockroach/certs --ca-key=/etc/cockroach/certs/ca.key
# Copy certificates to other nodes
scp /etc/cockroach/certs/* node2:/etc/cockroach/certs/
scp /etc/cockroach/certs/* node3:/etc/cockroach/certs/
# Set permissions
sudo chown -R cockroach:cockroach /etc/cockroach/certs
sudo chmod 600 /etc/cockroach/certs/*.key4. Create Systemd Service (All Nodes):sudo nano /etc/systemd/system/cockroachdb.serviceAdd (adjust IPs for your nodes):[Unit]
Description=CockroachDB
After=network.target
[Service]
Type=notify
User=cockroach
Group=cockroach
ExecStart=/usr/local/bin/cockroach start --certs-dir=/etc/cockroach/certs --store=/var/lib/cockroach --listen-addr=0.0.0.0:26257 --http-addr=0.0.0.0:8080 --join=10.0.0.1:26257,10.0.0.2:26257,10.0.0.3:26257 --cache=25% --max-sql-memory=25%
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=cockroach
[Install]
WantedBy=multi-user.target5. Start CockroachDB (All Nodes):# Enable and start service
sudo systemctl daemon-reload
sudo systemctl enable cockroachdb
sudo systemctl start cockroachdb
sudo systemctl status cockroachdb6. Initialize Cluster (First Node Only):# Initialize the cluster
cockroach init --certs-dir=/etc/cockroach/certs --host=10.0.0.1:26257
# Verify cluster status
cockroach node status --certs-dir=/etc/cockroach/certs --host=10.0.0.1:262577. Create Admin User and Database:# Connect to SQL shell
cockroach sql --certs-dir=/etc/cockroach/certs --host=10.0.0.1:26257
# Create user
CREATE USER admin WITH PASSWORD 'secure_password';
GRANT ADMIN TO admin;
# Create database
CREATE DATABASE myapp;
GRANT ALL ON DATABASE myapp TO admin;
# Exit
\q8. Configure Firewall (All Nodes):sudo ufw allow 26257/tcp # SQL
sudo ufw allow 8080/tcp # Admin UI
sudo ufw allow 26258/tcp # Internal communication9. Access Admin UI:https://node1.example.com:8080# From application server
cockroach sql --url="postgresql://admin:secure_password@node1.example.com:26257,node2.example.com:26257,node3.example.com:26257/myapp?sslmode=verify-full"
cockroach start --certs-dir=/etc/cockroach/certs --store=/var/lib/cockroach --listen-addr=0.0.0.0:26257 --http-addr=0.0.0.0:8080 --join=node1:26257,node2:26257,node3:26257 --cache=25% \ # Memory for cache
--max-sql-memory=25% \ # Memory for SQL queries
--locality=region=us-east,zone=a # Geo-locality2. Connection String Formats:# Basic connection
postgresql://user:password@host:26257/database
# Multi-node with load balancing
postgresql://user:password@host1:26257,host2:26257,host3:26257/database
# With SSL verification
postgresql://user:password@host:26257/database?sslmode=verify-full&sslrootcert=/path/to/ca.crt
# Application failover
postgresql://user:password@lb.example.com:26257/database?application_name=myapp3. Multi-Region Configuration:-- Set up regions
ALTER DATABASE mydb PRIMARY REGION "us-east-1";
ALTER DATABASE mydb ADD REGION "us-west-1";
ALTER DATABASE mydb ADD REGION "eu-west-1";
-- Geo-partitioned table
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email STRING,
region STRING,
data JSONB,
INDEX (region)
) LOCALITY REGIONAL BY ROW AS region;
-- Regional table (single region)
CREATE TABLE eu_customers (
id UUID PRIMARY KEY,
name STRING,
address STRING
) LOCALITY REGIONAL IN "eu-west-1";4. Replication and Zones:-- Default replication factor
ALTER RANGE default CONFIGURE ZONE USING num_replicas = 3;
-- Pin specific table to region
ALTER TABLE users CONFIGURE ZONE USING
num_replicas = 5,
constraints = '{"+region=us-east": 2, "+region=us-west": 2, "+region=eu-west": 1}';
-- Fast reads with follower reads (slightly stale data acceptable)
SET CLUSTER SETTING kv.closed_timestamp.target_duration = '1s';5. Performance Tuning:-- Increase SQL memory limit
SET CLUSTER SETTING sql.defaults.distsql.max_running_flows = 500;
-- Enable statement statistics
SET CLUSTER SETTING sql.metrics.statement_details.enabled = true;
-- Adjust range size for large datasets
ALTER RANGE default CONFIGURE ZONE USING range_max_bytes = 134217728; -- 128MB
-- Connection pool settings (application side)
-- Max connections: 4 × num_cores per node
-- Min connections: num_cores per node6. Backup and Restore:-- Full backup to S3
BACKUP DATABASE mydb TO 's3://bucket/backup?AWS_ACCESS_KEY_ID=xxx&AWS_SECRET_ACCESS_KEY=xxx';
-- Incremental backup
BACKUP DATABASE mydb TO 'latest' IN 's3://bucket/backups';
-- Restore
RESTORE DATABASE mydb FROM 'latest' IN 's3://bucket/backups';
-- Scheduled backups (Enterprise)
CREATE SCHEDULE backup_schedule
FOR BACKUP DATABASE mydb INTO 's3://bucket/backups'
RECURRING '@daily'
WITH SCHEDULE OPTIONS first_run = 'now';7. Change Data Capture (Enterprise):-- Stream changes to Kafka
CREATE CHANGEFEED FOR TABLE users, orders
INTO 'kafka://broker:9092?topic_prefix=myapp_';
-- Stream to webhook
CREATE CHANGEFEED FOR TABLE events
INTO 'webhook-https://myapp.com/webhook?insecure_tls_skip_verify=true';8. Monitoring Queries:-- Cluster health
SHOW CLUSTER SETTING version;
-- Node status
SELECT node_id, address, is_live, is_available FROM crdb_internal.gossip_liveness;
-- Active queries
SELECT query_id, user_name, query, start FROM [SHOW QUERIES];
-- Slow queries
SELECT query, count, avg_latency FROM crdb_internal.statement_statistics
ORDER BY avg_latency DESC
LIMIT 10;
-- Range distribution
SELECT range_id, replicas, lease_holder FROM crdb_internal.ranges;Best Practices:በ ደቂቃዎች ውስጥ ቀላል የ VPS ማሰራጫ ሂደት ጋር ይጀምሩ
በ2 ደቂቃዎች ውስጥ ይጫኑ • ሙሉ root መዳረሻ • በቲኬት እና ኢሜይል ድጋፍ