容器化部署Cassandra高可用集群

摘要:
启动容器时,容器的IP地址将指定部署步骤:如果VM的用户名是capcom923/home/capcom923/cassandra/2.1。Docker镜像,因为我们需要安装cassandra。yaml配置文件,使用官方cassandra。

前提:

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

开始部署:

部署图

容器化部署Cassandra高可用集群第1张

如上图所示,三台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'集群的名字,同一个集群的名字要相同
authenticatorPasswordAuthenticator生产环境都要用户名密码认证,默认的用户名/密码是cassandra/cassandra
seeds192.168.0.101种子节点VM的IP,注意不是容器的IP。
broadcast_address192.168.0.101节点VM的IP,注意不是容器的IP。
broadcast_rpc_address192.168.0.101节点VM的IP,注意不是容器的IP。
listen_address200.1.1.11节点容器的IP。
auto_snapshotfalse尽管官方建议是true,但实际使用时,太消耗磁盘,所以建议改为false
endpoint_snitchGossipingPropertyFileSnitch生产环境标配

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


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

配置节说明
cluster_name'MyCluster'集群的名字,同一个集群的名字要相同
authenticatorPasswordAuthenticator生产环境都要用户名密码认证,默认的用户名/密码是cassandra/cassandra
seeds192.168.0.101种子节点VM的IP,注意不是容器的IP。
broadcast_address192.168.0.102节点VM的IP,注意不是容器的IP。
broadcast_rpc_address192.168.0.102节点VM的IP,注意不是容器的IP。
listen_address200.1.1.12节点容器的IP。
auto_snapshotfalse尽管官方建议是true,但实际使用时,太消耗磁盘,所以建议改为false
endpoint_snitchGossipingPropertyFileSnitch生产环境标配

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

 

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

配置节说明
cluster_name'MyCluster'集群的名字,同一个集群的名字要相同
authenticatorPasswordAuthenticator生产环境都要用户名密码认证,默认的用户名/密码是cassandra/cassandra
seeds192.168.0.101种子节点VM的IP,注意不是容器的IP。
broadcast_address192.168.0.103节点VM的IP,注意不是容器的IP。
broadcast_rpc_address192.168.0.103节点VM的IP,注意不是容器的IP。
listen_address200.1.1.13节点容器的IP。
auto_snapshotfalse尽管官方建议是true,但实际使用时,太消耗磁盘,所以建议改为false
endpoint_snitchGossipingPropertyFileSnitch生产环境标配

编辑完毕后,存放在/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

容器化部署Cassandra高可用集群第2张

注意三个节点开头的信息,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是系统默认用户,登录时要求至少过半的节点存活才可以。

至此,搭建完毕~

免责声明:文章转载自《容器化部署Cassandra高可用集群》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用 lua 编写 wireshark 协议解析插件Linux内核分析:实验八--Linux进程调度与切换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

配置定时任务清理多余的镜像和容器文件

k8s集群运行久了,难免会产生大量无用的镜像和容器文件,因此需要经常进行清理。 一般而言,docker容器默认的本地数据存储路径位于/var/lib/docker路径下,通过df -h /var/lib/docker命令,可以查看其占用情况。如果高于80%,则意味着需要清理了。 一、清理命令 与清理容器多余数据相关的命令有两条,分别是: docker im...

阿里云天池新人赛——docker练习场比赛心得

由于在阿里的淘宝商品直播识别大赛中提交结果需要用到docker,以前也没有用过。正好阿里提供了docker的新人赛,借此机会学习一下。 既然学习docker,首先就要了解docker是什么:   Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可...

docker 部署 mysql8 的 docker-compose 文件编写

version: '3.4' services: mysql: image: mysql:8.0.15 container_name: platform.mysql.23306 deploy: resources: limits: memory: 3g...

记一次阿里云服务器中部署egg遇到的问题 (docker vim)

------------恢复内容开始------------ 1.下载好egg脚手架, 在package.json 同目录 添加 Dockerfile 2.编写Dockerfile # 设置基础镜像,如果本地没有该镜像,会从Docker.io服务器pull镜像 FROM node # 设置时区 # RUN apk --update add tzdata...

容器网络(一)docker容器网络驱动

一、Linux网桥和veth pair 1、Linux网桥,虚拟的交换机,工作在数据链路层,通过学习到MAC地址,将数据包转发到网桥的不同端口上。 2、Veth pair,可以理解为一根虚拟的网线,创建veth pair后,会以两张虚拟网卡的形式成对出现,在其中一个网卡发出的数据包,会直接出现在与它对应的另一张网卡上。 二、三种docker网络驱动 Doc...

Docker Redis

link - https://store.docker.com/images/redis?tab=description start a redis instance $ docker run --name some-redis -d redis This image includes EXPOSE 6379 (the redis port), so s...