• 容器化部署Cassandra高可用集群


    前提:

    三台装有docker的虚拟机,这里用VM1,VM2,VM3表达(当然生产环境要用三个独立物理机,否则无高可用可言),装docker可参见Ubuntu离线安装docker

    开始部署:

    部署图

    如上图所示,三台VM的IP分别为:

    192.168.0.101

    192.168.0.102

    192.168.0.103

    客户端将使用这三个IP来连接集群,每个VM通过端口映射由docker网桥myBridge来与Cassandra容器通信,容器的IP会在启动容器时指定

    部署步骤:

    1. 建docker网桥myBridge(名字随意)

    在三台VM上,这里假定是ubuntu16.04.5,使用docker命令创建自定义docker网桥,用于VM和docker容器通讯

    sudo docker network create --driver=bridge --subnet=200.1.1.0/24 myBridge

    2. 准备cassandra的docker镜像,data目录,cassandra.yaml配置文件

    首先创建好如下目录,假如VM的用户名是capcom923

    /home/capcom923/cassandra/

    2.1. docker镜像

    由于我们要单独挂载cassandra.yaml配置文件,直接使用官方cassandra docker镜像会导致无法启动(因为镜像的启动文件docker-entrypoint.sh要修改cassandra.yaml文件,会造成device busy的错误),所以我注释掉了cassandra官网镜像中docker-entrypoint.sh文件的38行至53行,并重新生成了docker镜像,并导出为tar包供大家直接使用,请直接下载:(链接:https://pan.baidu.com/s/14n9_DGHCkAFRumln8muuQw 提取码:l1rx )

    将tar包下载到该位置/home/capcom923/cassandra/cassandra-3.11.2-bps.tar

    2.3. data目录

    创建一个叫data的空目录即可

    /home/capcom923/cassandra/data/

    该目录用于cassandra存放所有持久化的数据

    2.3. cassandra.yaml配置文件

    该文件是cassandra的主要配置文件,由于三台VM的IP和角色各不尽相同,所以配置文件也不一样。

    基于默认的cassandra.yaml文件,要对三台VM进行以下配置:

    第一台VM:角色为种子节点,该节点在集群扩容缩容时,以及其它节点重启时是必须活着的,其它时候是可以宕机的。

    配置节 说明
    cluster_name 'MyCluster' 集群的名字,同一个集群的名字要相同
    authenticator PasswordAuthenticator 生产环境都要用户名密码认证,默认的用户名/密码是cassandra/cassandra
    seeds 192.168.0.101 种子节点VM的IP,注意不是容器的IP。
    broadcast_address 192.168.0.101 节点VM的IP,注意不是容器的IP。
    broadcast_rpc_address 192.168.0.101 节点VM的IP,注意不是容器的IP。
    listen_address 200.1.1.11 节点容器的IP。
    auto_snapshot false 尽管官方建议是true,但实际使用时,太消耗磁盘,所以建议改为false
    endpoint_snitch GossipingPropertyFileSnitch 生产环境标配

    编辑完毕后,存放在/home/capcom923/cassandra/cassandra.yaml


    第二台VM:角色为普通节点

    配置节 说明
    cluster_name 'MyCluster' 集群的名字,同一个集群的名字要相同
    authenticator PasswordAuthenticator 生产环境都要用户名密码认证,默认的用户名/密码是cassandra/cassandra
    seeds 192.168.0.101 种子节点VM的IP,注意不是容器的IP。
    broadcast_address 192.168.0.102 节点VM的IP,注意不是容器的IP。
    broadcast_rpc_address 192.168.0.102 节点VM的IP,注意不是容器的IP。
    listen_address 200.1.1.12 节点容器的IP。
    auto_snapshot false 尽管官方建议是true,但实际使用时,太消耗磁盘,所以建议改为false
    endpoint_snitch GossipingPropertyFileSnitch 生产环境标配

    编辑完毕后,存放在/home/capcom923/cassandra/cassandra.yaml

     

    第三台VM:角色为普通节点

    配置节 说明
    cluster_name 'MyCluster' 集群的名字,同一个集群的名字要相同
    authenticator PasswordAuthenticator 生产环境都要用户名密码认证,默认的用户名/密码是cassandra/cassandra
    seeds 192.168.0.101 种子节点VM的IP,注意不是容器的IP。
    broadcast_address 192.168.0.103 节点VM的IP,注意不是容器的IP。
    broadcast_rpc_address 192.168.0.103 节点VM的IP,注意不是容器的IP。
    listen_address 200.1.1.13 节点容器的IP。
    auto_snapshot false 尽管官方建议是true,但实际使用时,太消耗磁盘,所以建议改为false
    endpoint_snitch GossipingPropertyFileSnitch 生产环境标配

    编辑完毕后,存放在/home/capcom923/cassandra/cassandra.yaml

    我也将这三个配置好的文件给大家参考,分别在1/2/3文件夹里(链接:https://pan.baidu.com/s/1joiC6EDV5FtFBWutV-sHzg 提取码:ki64 )

    至此,所以每台VM的目录结构为

    /home/capcom923/cassandra/cassandra-3.11.2-bps.tar

    /home/capcom923/cassandra/data/

    /home/capcom923/cassandra/cassandra.yaml

    3. 加载cassandra的docker镜像

    在三台VM上执行

    docker load -i /home/capcom923/cassandra/cassandra-3.11.2-bps.tar

    4. 运行cassandra集群

    在每一台VM上,先关闭ubuntu防火墙

    sudo service ufw stop

    sudo service firewalld stop(如果装了firewalld的话)

    在第一台VM上:

    sudo docker run --name cassandraNode1 -d -e CASSANDRA_DC=datacenter1 -v /home/capcom923/cassandra/cassandra.yaml:/etc/cassandra/cassandra.yaml -v /home/capcom923/cassandra/data:/var/lib/cassandra --restart unless-stopped --network myBridge --ip 200.1.1.11 -p 7000:7000 -p 9042:9042 cassandra:3.11.2.bps

    在第二台VM上:

    sudo docker run --name cassandraNode2 -d -e CASSANDRA_DC=datacenter1 -v /home/capcom923/cassandra/cassandra.yaml:/etc/cassandra/cassandra.yaml -v /home/capcom923/cassandra/data:/var/lib/cassandra --restart unless-stopped --network myBridge --ip 200.1.1.12 -p 7000:7000 -p 9042:9042 cassandra:3.11.2.bps

    在第三台VM上:

    sudo docker run --name cassandraNode3 -d -e CASSANDRA_DC=datacenter1 -v /home/capcom923/cassandra/cassandra.yaml:/etc/cassandra/cassandra.yaml -v /home/capcom923/cassandra/data:/var/lib/cassandra --restart unless-stopped --network myBridge --ip 200.1.1.13 -p 7000:7000 -p 9042:9042 cassandra:3.11.2.bps

    5. 检查cassandra集群

    在第一台VM上执行

    sudo docker exec -it cassandraNode1 bash

    进入容器之后,执行

    nodetool status

    注意三个节点开头的信息,UN代表Up Normal状态,都是UN就证明集群工作正常了,开始有UJ,说明Up Joining,一会儿就会变UN

    6. 修改system_auth的配置

    在第五步的窗口中继续执行

    cqlsh -u cassandra -p cassandra

    连接进cassandra控制台

    并输入ALTER KEYSPACE system_auth WITH replication = {'class': 'NetworkTopologyStrategy','datacenter1': '3'};

    回车

    将这个keyspace的策略和副本改成3,

    然后输入exit退出cassandra控制台

    再输入nodetool repair执行修复

    然后在其余两台VM中的容器中都要执行nodetool repair,由此用户认证授权表得以及时同步,否则会引起从某一台节点无法登录的情况。

    注意,cassandra/cassandra是系统默认用户,登录时要求至少过半的节点存活才可以。

    至此,搭建完毕~

  • 相关阅读:
    【活动预告】云上数字工厂与中小企业数字化转型创新论坛
    python 0722
    python 0715
    python 0713
    python 0718
    python 0723
    python 0720
    python 0721
    python 0725
    python 0719
  • 原文地址:https://www.cnblogs.com/capcom923/p/deploy_dockerize_cassandra_HA_cluster.html
Copyright © 2020-2023  润新知