通过Docker玩转Cassandra集群

本文介绍了如何利用Docker-Compose快速创建一个3节点的Cassandra集群。通过编写docker-compose.yml文件,启动Cassandra容器,并检查集群状态。接着,使用Python创建keyspace和表,插入数据,并演示了在节点故障时集群的高可用性。
摘要由CSDN通过智能技术生成

Docker是快速检查新技术而无需安装麻烦的最佳工具。

在本文中,我们将编写一个简单的docker-compose文件,它将触发一个3节点的cassandra集群。

Docker-Compose文件

第一步当然是在系统上安装Docker。

创建一个文本文件,将其命名为docker-compose.yml,然后通过首选的文本工具复制/粘贴以下文本。

version: '2'
services:

###############################
   cassandra0:
    image: cassandra
    container_name: cassandra0
    ports:
     - 9042:9042
     - 7199:7199

###############################
   cassandra1:
    image: cassandra
    container_name: cassandra1
    ports:
     - 9142:9042
    links:
     - cassandra0:seed
    environment:
     - CASSANDRA_SEEDS=seed

###############################
   cassandra2:
    image: cassandra
    container_name: cassandra2
    ports:
     - 9242:9042
    links:
     - cassandra0:seed
    environment:
     - CASSANDRA_SEEDS=seed

这个docker文件定义了三个容器。Cassandra0容器是用作主要种子的容器。其他两个将其链接,并通过CASSANDRA_SEEDS环境变量获取种子,该变量设置为“seed”,这是cassandra0容器的别名。

通过以下命令启动容器:

docker-compose up -d

检查安装

通过以下命令检查第一个节点的状态:

docker exec cassandra0 nodetool status

您应该得到与以下屏幕截图中显示的结果相同的结果:
在这里插入图片描述
使用其他容器名称(cassandra1、cassandra2)重复相同的操作应该得到相同的结果。

命令结果部分的重要信息是每个节点行开头的两个字母应该是UN。U代表向上,N代表正常。

通过python创建keyspace

使用下面的python程序在其中创建一个keyspace和一个表。

import logging

log = logging.getLogger()
log.setLevel('INFO')
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s"))
log.addHandler(handler)

from cassandra import ConsistencyLevel
from cassandra.cluster import Cluster
from cassandra.query import SimpleStatement

KEYSPACE = "mykeyspace"

def createKeySpace():
    cluster = Cluster(contact_points=['127.0.0.1'],port=9142)
    session = cluster.connect()

    log.info("Creating keyspace...")
    try:
        session.execute("""
            CREATE KEYSPACE %s
            WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': '2' }
            """ % KEYSPACE)

        log.info("setting keyspace...")
        session.set_keyspace(KEYSPACE)

        log.info("creating table...")
        session.execute("""
            CREATE TABLE mytable (
                mykey text,
                col1 text,
                col2 text,
                PRIMARY KEY (mykey, col1)
            )
            """)
    except Exception as e:
        log.error("Unable to create keyspace")
        log.error(e)

createKeySpace();

你可以使用每个容器中包含的cqlsh工具使用以下命令检查Keyspace:

docker exec -it cassandra0 cqlsh

然后,您可以使用命令“describe mykeyspace”来获取有关新创建的Keyspace的详细信息。
在这里插入图片描述

让我们插入一些数据

我们将再次使用python在表中插入一些记录。将以下功能添加到程序中。

def insertData(number):
    cluster = Cluster(contact_points=['127.0.0.1'],port=9142)
    session = cluster.connect()

    log.info("setting keyspace...")
    session.set_keyspace(KEYSPACE)

    prepared = session.prepare("""
    INSERT INTO mytable (mykey, col1, col2)
    VALUES (?, ?, ?)
    """)

    for i in range(number):
        if(i%100 == 0):
            log.info("inserting row %d" % i)
        session.execute(prepared.bind(("rec_key_%d" % i, 'aaa', 'bbb')))

insertData(1000)

使用与下面类似的函数读取新插入的数据并不那么困难:

def readRows():
    cluster = Cluster(contact_points=['127.0.0.1'],port=9142)
    session = cluster.connect()

    log.info("setting keyspace...")
    session.set_keyspace(KEYSPACE)

    rows = session.execute("SELECT * FROM mytable")
    log.info("key\tcol1\tcol2")
    log.info("---------\t----\t----")

    count=0
    for row in rows:
        if(count%100==0):
            log.info('\t'.join(row))
        count=count+1;

    log.info("Total")
    log.info("-----")
    log.info("rows %d" %(count))

通过停止和启动三个容器中的一个,可以很容易地检查系统是否仍然可用,即使其中一个节点已关闭。将python程序中的端口从9142更改为9042或9242,以便与特定节点通信。

原文链接: link.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值