zoukankan      html  css  js  c++  java
  • docker 部署cassandra

    摘要

    本文主要介绍在redhat7 平台,利用docker 部署cassandra 集群,除了介绍基本的部署步骤,另外主要
    讨论类似于cassandra 这种分布式集群系统部署 docker如何进行网络配置的问题

    文章只发布在CSDN与http://www.webpersonaledeveloper.cn,其余站点均属盗版侵权
    更多cassandra知识请访问 http://www.webpersonaldeveloper.cn

    安装docker

    最简单的方法,利用已有的脚本

    curl -fsSL https://get.docker.com/ | sh
    

    然后启动docker 服务

    service docker start
    

    验证是否安装成功

    docker run hello-world
    

    docker run cassandra

    docker run --name $CONTAINER_NAME -d -e CASSANDRA-BROADCAST_ADDRESS=xxx.xxx.xxx.xxx
    
     -e CASSANDRA_DC=XX -e CASSANDRA_RACK=XXX cassandra
    

    可以添加的参数有很多,通常下列这些参数需要指定

    CASSANDRA_LISTEN_ADDRESS:监听进来的连接地址,在docker中默认使用的就是container的ip address

    CASSANDRA_BROADCAST_ADDRESS:广播给别的node的地址。

    CASSANDRA_SEEDS:cassandra bootstrap时通信的节点

    CASSANDRA_DC:multi datacenter 时需要指定datacenter 名

    CASSANDRA_RACK:cassandra机架号

    CASSANDRA_ENDPOITN_SNITCH:网络拓扑策略,用来找寻节点,生产环境一般建议使用GossipingPropertyFileSnitch

    multi datacenter & networking

    Case1:一个node上安装一个cassandra container

    在6 nodes 上部署两个cassandra datacenter,每个datacenter 3nodes.
    node1:seed node,没有bootstrap

    docker run --name $CONTAINER_NAME -d -e CASSANDRA_BROADCAST_ADDRESS=XXX 
    -e  CASSANDRA_DC=DC1 -e CASSANDRA_RACK=RAC1 
    -e  CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch 
    -p 7000:7000 -p 9042:9042 -p 7199:7199 cassandra
    

    其他node

    docker run --name $CONTAINER_NAME -d -e CASSANDRA_SEEDS=XXX 
    -e CASSANDRA_BROADCAST_ADDRESS=XXX -e CASSANDRA_DC=DC1 
    -e CASSANDRA_RACK=RAC1 -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch 
    -p 7000:7000 -p 9042:9042 -p 7199:7199 cassandra
    

    这里需要将CASSANDRA_BROADCAST_ADDRESS 指定为server 的ip
    注意这边如果需要使用remote jmx连接到node上,因为docker的存在可能会存在问题。cassandra jmx 暴露出来的不是node的public ip,是docker分配的一个内部地址。
    所以外部无法访问。可以在cassandra-env.sh 中添加jvm参数,这样外部就可以连接到server了。

    JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public ip>"
    

    Case2:在一个node上安装多个cassandra container

    这种情况与Case1 有些不同,最重要的是docker网络问题。如何让各个container 有自己独立的ip,并且能够被外部识别

    1. 配置docker网桥
      docker 默认的网桥是docker0

      ifconfig docker0 192.168.22.1 netmask 255.255.255.0
      

      更新/etc/sysconfig/docker 添加

      other_args="--bip"=192.168.22.1/24"
      

      重启docker

      service docker restart
      

      桥接模式下容器之间是可以相互通信的,容器也可以与外部通信

    2.启动cassandra
    不需要指定Listen Address,和broadcast address,docker 会自动分配,可以在一个server上启动多个cassandra

    docker run --name $CONTAINER_NAME -d -e CASSANDRA_DC=DC1 -e CASSANDRA_RACK=RAC1 -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch cassandra
    

    3.配置路由

    client 与docker container:cassandra 通信,与其他server 上的cassandra节点通信。

    route add -net 192.168.22.0 netmask 255.255.255.0 gw public_ip
    

    参考

    https://hub.docker.com/_/cassandra/

    https://yeasy.gitbooks.io/docker_practice/content/advanced_network/bridge.html

    http://www.infoq.com/cn/articles/docker-network-and-pipework-open-source-explanation-practice

  • 相关阅读:
    四人过桥求最短时间(《算法设计与分析》习题一的第8题) Apare_xzc
    已知中序后序遍历还原二叉树(uva 548) Apare_xzc
    大二下学期第四周周报(2019.3.24) Apare_xzc
    大二下学期第五周周报(2019.3.31) Apare_xzc
    拓扑排序复习(处女座的比赛资格)
    exgcd复习 Apare_xzc
    ACM课程设计课 Advance_Contest_1 解题报告 Apare_xzc
    使用共享内存
    使用信号量
    使用命名管道
  • 原文地址:https://www.cnblogs.com/stoneFang/p/6715298.html
Copyright © 2011-2022 走看看