暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

基于Docker和Kubernetes搭建CockroachDB集群

CockroachDB 2021-07-14
1257


容器化是技术发展主流趋势之一,其中最具代表性之一就是Docker。通过Docker,用户可以非常方便和快速地搭建和跨平台移植应用。本期文章讲述怎样通过Docker和Kubernetes,部署和管理CockroachDB。

Docker

Dockerhub上有官方的CockroachDB镜像,用户通过拉取镜像,配置容器参数,生成和启动容器,即可快速方便搭建CockroachDB集群。

1、安装Docker

参考官方文档:https://docs.docker.com/engine/installation/


2、拉取镜像

CockroachDB的docker镜像版本信息,可参考:https://hub.docker.com/r/cockroachdb/cockroach/tags/

本文以v1.1.2为例

docker pull cockroachdb/cockroach:v1.1.2


3、配置网络

本文例子中,在同一台机器上启动3个节点容器,需配置网桥。

docker network create -d bridge roachnet


4、启动第一个节点

  1. --name=roach1 \

  2. --hostname=roach1 \

  3. --net=roachnet \

  4. -p 26257:26257 -p 8080:8080  \

  5. -v "${PWD}/cockroach-data/roach1:/cockroach/cockroach-data"  \

  6. cockroachdb/cockroach:v1.1.2 start --insecure

参数说明:

--name: 容器名字

--hostname: 节点主机名

--net: 网络配置

-p:容器端口映射

-v:把容器中CockroachDB数据和日志文件路径映射到本机文件路径,这样关闭或者删除容器后,数据库文件仍可保留。

cockroach/cockroach:v1.1.2:镜像名字和镜像版本

start –insecure: 以insecure模式启动CockroachDB节点


5、启动其他节点并加入到集群中

  1. docker run -d \

  2. --name=roach2 \

  3. --hostname=roach2 \

  4. --net=roachnet \

  5. -v "${PWD}/cockroach-data/roach2:/cockroach/cockroach-data" \

  6. cockroachdb/cockroach:v1.1.2 start --insecure --join=roach1


  7. docker run -d \

  8. --name=roach3 \

  9. --hostname=roach3 \

  10. --net=roachnet \

  11. -v "${PWD}/cockroach-data/roach3:/cockroach/cockroach-data" \

  12. cockroachdb/cockroach:v1.1.2 start --insecure --join=roach1

大部分参数与上述启动第一个节点容器相同,唯一区别是CockroachDB节点启动命令使用了--join,意思是加入到第一个启动节点中。


6、检查容器

保三个CockorachDB节点容器正常运行。

docker container ls


7、测试集群

通过docker exec – it 能以交互方式在Docker容器里执行命令。

首先,在其中一个节点容器中启动Cockoroach sql shell,并写入数据。

接着,在其他节点容器中以相同方式启动Cockroach sql shell,可正确查询刚才写入的数据。


8、监控

启动容器时,容器里8080端口被映射到本机8080端口。所以通过http://localhost:8080即可访问CockroachDB集群Admin UI进行监控。


9、关闭容器

docker stop roach1,roach2,roach3


Kubernetes

随着容器化的普及,出现了很多便捷部署和管理容器的工具。其中比较常用的有Kubernetes和Docker Swarm。本章节以Kubernetes为例子。

环境配置:OS X, Kubernetes v1.8.3,minikube v0.23.0, virtualbox v5.2.2

1、安装环境

参考官方文档,安装minikube和kubectl

https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/

Minikube支持如下驱动,默认使用Virtualbox,本文使用Virtualbox为例子

  • virtualbox

  • vmwarefusion

  • KVM

  • Xhyve

  • Hyper-V



2、启动Minikube

通过Minikube和Kubectl创建Docker容器,需访问Google registry。因此,Minikube启动前,首先要确定是否需要经过Proxy进行访问。

测试命令:

curl --proxy “$http_proxy” https://cloud.google.com/container-registry/


如果使用Proxy,则启动Minikube命令如下。

minikube start --docker-env HTTP_PROXY=$http_proxy

启动Minikube后,可通过如下方式测试在VM中proxy是否正常工作。

  1. echo $(minikube ip)

  2. ssh docker@$(minikube ip)

  3. # 密码是tcuser

  4. curl https://cloud.google.com/container-registry/

  5. exit


3、创建CockroachDB节点

   kubectl create -f  \

  1. https://raw.githubusercontent.com/

  2. cockroachdb/cockroach/master/

  3. cloud/kubernetes/

  4. cockroachdb-statefulset.yaml


通过kubernetes,检查是否成功创建CockroachDB节点。

kubectl get pods

4、初始化CockroachDB集群

   kubectl create -f  \

  1. https://raw.githubusercontent.com/

  2. cockroachdb/cockroach/master/

  3. cloud/kubernetes/cluster-init.yaml

检查集群初始化成功。

kubectl get job


5、检查集群状态

5.1、命令行

  1. kubectl run cockroachdb -it --image=cockroachdb/cockroach \

  2. --rm --restart=Never \

  3. -- node status --all --insecure --host=cockroachdb-public

5.2、Admin UI

执行   kubectl port-forward cockroachdb-0 8080

访问    http://localhost:8080


6.模拟失败节点

创建节点时,StatefulSet指定replicas为3。所以当任一节点失败时,kubernetes会自动补齐以满足replicas指定值。

6.1、写入数据


6.2、杀掉其中一个节点

kubectl delete pod cockroachdb-2


6.3、检查集群状态

通过kubectl,发现3个CockroachDB节点pods仍在运行,cockroachdb-2 pods因为被自动补齐,运行时间比另外两个节点短。

kubectl get pods


6.4、查询数据


7、扩容

7.1、修改replicas参数,增加节点。

kubectl scale statefulset cockroachdb --replicas=4


7.2、检查节点数

7.2.1 kubectl

kubectl get pods


7.2.2 cockroach命令


  1.   kubectl run cockroachdb -it --image=cockroachdb/

  2.   cockroach --rm --restart=Never --

  3.   node atus --all --

  4.   insecure --host=cockroachdb-public


8、关闭集群

  1. kubectl delete \

  2. pods,statefulsets,services,

  3. persistentvolumeclaims,persistentvolumes,

  4. poddisruptionbudget,jobs \

  5. -l app=cockroachdb


Tips


1、pods启动失败,有两种调试方法:

  • ssh进入minikube VM,通过curl测试是否能访问Google registry。如果不能,则代表minikube启动参数没有配置proxy或者proxy在VM中不可用,需要修改配置参数并重新启动minikube。


  •  执行如下命令,检查在minikube中docker能否正常使用。   

  1. eval $(minikube docker-env)

  2. docker pull hello-world

  3. eval $(minikube docker-env -u)


2、CockroachDB集群初始化失败

通过kubectl执行CockroachDB集群初始化job,如果发现job一直没有成功,调试方式有:

  • 查看节点和初始化job信息和日志

  1. kubectl describe pods <pod_name>

  2. kubectl describe job <job_name>

  3. kubectl logs <pod_name>

  • 查看kubectl创建CockroachDB节点pods的yaml配置文件,配置的端口是否被占用。


以上是对在Docker和Kubernetes中使用CockroachDB的简单描述,更多使用细则可参考Cockroach Labs官方文档。小编觉得,通过Docker搭建CockroachDB集群,还是非常便捷的。通过kubernetes管理CockroachDB部署,可以达到副本自动补齐,省下不少运维人力。


参考文档:

https://www.cockroachlabs.com/docs/stable/start-a-local-cluster-in-docker.html

https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes-insecure.html







 关于我们:我们是百度DBA团队,团队有两位CockroachDB PMC Member及一位Contributor, 目前正积极推动NewSQL在百度内部以及外部的发展。除了NewSQL, 我们在MySQL, PostgreSQL, GreenPlum有多年的内核开发经验及实践经验,对数据库和大数据领域有疑问或者需求欢迎联系我们,同时欢迎有志青年加入我们!



关注我们 



文章转载自CockroachDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论