From 22d5fb57e1120d830d883d6e33111279517aee95 Mon Sep 17 00:00:00 2001 From: luolibin Date: Wed, 3 Jul 2019 00:04:56 +0800 Subject: [PATCH 01/39] tidb-in-kubernetes: add deploy k8s requirements documentation --- tidb-in-kubernetes/k8s-deployment.md | 99 ++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 tidb-in-kubernetes/k8s-deployment.md diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md new file mode 100644 index 000000000000..2faa970e4142 --- /dev/null +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -0,0 +1,99 @@ +--- +title: 部署 k8s +category: how-to +--- + +# 软件版本要求 + +| 软件名称 | 版本 | +| --- | --- | +| Docker | docker-ce 18.09.6 | +| K8s | v1.12.2 | +| Linux 系统 | 7.3 或以上 | + +# 内核参数设置 +| 配置项 | 设置值 | +| --- | --- | +| net.core.somaxconn | 32768 | +| vm.swappiness | 0 | +| net.ipv4.tcp_syncookies | 1 | +| net.ipv4.ip_forward | 1 | +| fs.file-max | 1000000 | +| fs.inotify.max_user_watches | 1048576 | +| fs.inotify.max_user_instances | 1024 | +| net.ipv4.neigh.default.gc_thresh1 | 80000 | +| net.ipv4.neigh.default.gc_thresh2 | 90000 | +| net.ipv4.neigh.default.gc_thresh3 | 100000 | +| net.bridge.bridge-nf-call-iptables | 1 | +| net.bridge.bridge-nf-call-arptables | 1 | +| net.bridge.bridge-nf-call-ip6tables | 1 | + +在设置 `net.bridge.bridge-nf-call-*` 这几项参数时如果报选项不存在错误,通过如下命令检查是否已经加载改模块: + +```shell +$ ls mod|grep br_netfilter +``` +如果没有加载则执行如下命令加载: + +```shell +$ modprobe br_netfilter +``` + +同时还需要关闭每个部署 k8s 节点的 swap,执行命令如下: + +```shell +$ swapofff -a +``` + +执行如下命令检查 swap 已经关闭: + +```shell +## 执行命令后输出显示 swap 一列全是 0 则表明 swap 已经关闭 +$ free -m +``` + +# 硬件和部署要求 + +和部署 tidb binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,网卡使用万兆网卡。对于服务器 disk、memory、cpu 的选择要看对集群的容量规划以及部署拓扑来定。线上 k8s 集群部署为了保证搞可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点,同时为了充分的利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置 。[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 k8s 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。下面按 3 k8s master + 3 etcd + 若干 work 节点部署方案分析 + +## k8s 系统资源要求 + +1. 每个机器上的需要一块比较大的 SAS 盘(至少 1T),这块盘用来存 docker 和 kubelet 的数据目录,docker 的数据主要包括镜像和容器日志数据,kubelet 主要占盘的数据是 emptyDir 所使用的数据 +2. 如果需要部署 k8s 集群的监控系统, 且监控数据需要落盘,则也需要考虑为 prometheus 准备一块 SAS 盘,后面日志监控系统也需要大的 SAS 盘,同时考虑到机器采购最好是同构的这一因素,因此每台机器最好有两块大的 SAS 盘。生成环境建议给这两种类型的盘做 RAID5,至于使用多少块来做 RAID5 用户自己决定。 +3. etcd 的分布建议是和 k8s master 节点保持一致,也就是多少个 master 节点就部署多少个 etcd 节点,etcd 数据建议使用 SSD 盘存放。 + +## tidb 集群资源需求 +tidb 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候一般按照可以支持多少套 tidb 集群来算。我们这里按照标准的 tidb 集群 3个 PD + 3 个 TiKV + 2 个 TiDB 来算,下面是对每个组件规划的一种建议: + +1. PD 组件。PD 占用资源较少,这种集群规模下分配 2C 4GB 即可,占用少量本地盘,为了便于管理,我们可以将所有集群的 PD 都放在 master 节点,比如需要支持 5套 tidb 集群,则可以规划三个 master 节点上每个支持部署 5 个 pd 实例,5 个 pd 实例使用同一块 SSD 盘即可(两三百 GB 的盘即可),通过 bind mount 的方式在这块 SSD 上创建 5个目录作为挂载点,操作方式见 [文档](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md#sharing-a-disk-filesystem-by-multiple-filesystem-pvs)。如果后面集群添加了更多的机器需要支持更多的 tidb 集群时,可以在 master 上用这种方式继续增加 PD 实例,如果 master 上资源耗尽可以找其它的 work 节点机器用同样的方式添加 PD 实例,这种方式的好处就是方便规划和管理 PD 实例,坏处就是由于 PD 实例过于集中,这些机器中如果有两台宕机会导致所有的 tidb 集群不可用。因此我们这里的建议是从所有集群里面的机器都拿出一块 SSD 盘像 master 节点一样提供 PD 实例。比如总共 7 台机器,要支持 7 套 tidb 标准集群的情况下,则需要每台机器上都能支持部署3个 PD 实例,如果后续有集群需要通过扩容机器增加容量,我们也只需要在新的机器上创建 PD 实例即可。 +2. TiKV 组件,TiKV 组件的性能因为很依赖磁盘IO 且数据量一般较大,因此这里建议每个 TiKV 实例独占一块 NVMe 的盘,资源配置为 8C 32GB,如果想要在一个机器上支持部署 多个 TiKV 实例,则参考这些参数去选择合适的机器,同时在规划容量的时候应当预留出足够的 buffer。 +3. TiDB 组件,TiDB 组件因为不占用磁盘,因此在规划的时候只需要考虑其占用的 cpu 和 内存资源即可,这里我们也按 8C 32 GB 的容量来计算 + +## tidb 集群规划例子 +通过上面的分析,这里给出一个支持部署 5 套规模为 3个 PD + 3 个 TiKV + 2 个 TiDB 集群的例子,其中 PD 配置为 2C 4GB,TiDB 配置为 8C 32GB,TiKV 配置为 8C 32GB。 k8s 节点有 7 个,其中三个节点既是 master 又是 work 节点,另外三个是纯 work 节点。下面是各组件分布情况。 + +单个 master 节点: + +* 1 etcd(2C 4GB) + 2 PD (2 * 2C 2 * 4GB) + 3 TiKV(3 * 8C 3 * 32GB) + 1 TiDB (8C 32GB) 总共是 38C 140GB +* 两块 SSD 盘,一块给 etcd,另外一块给 2 个 PD 实例 +* 做了 RAID5 的 SAS 盘,给 docker 和 kubelet 做数据盘 +* 三块 NVMe 盘给 TiKV 实例 + +单个 work 节点: + + * 3 PD(3 * 2C 3 * 4GB) + 2 TiKV (2 * 8C 2 * 32GB) + 2 TiDB (2 * 8C 2 * 32GB) 总共是 38C 140GB + * 一块 SSD 盘给三个 PD 实例 + * 做了 RAID5 的 SAS 盘,给 docker 和 kubelet 做数据盘 + * 两块 NVMe 盘给 TiKV 实例 + +从上面的分析来看要支持 5 套 tidb 集群容量共需要 7 台物理机,其中三台为 master 兼 work 节点,其余四台为 work 节点,机器配置需求如下。 + +master 兼 work 节点: + +* 48C 192GB 2 块 SSD 盘,一块做了 RAID5 的 SAS 盘,三块 NVMe 盘 + +work 节点: + +* 48C 192GB 1 块 SSD 盘,一块做了 RAID5 的 SAS 盘,两块 NVMe 盘 + +上面的机器配置刨去各个组件占用的资源还有比较多的预留资源,如果在考虑到加监控和日志组件,用同样的方法去规划需要采购的机器类型以及配置。另外在生产环境的使用上尽量不要在 master 节点部署 TiDB 实例或者尽可能少的部署 TiDB 实例,这里的主要考虑点是网卡带宽,因为如果 master 节点网卡打满会影响到 work 节点和 master 节点之间的心跳汇报信息,导致比较严重的问题。 From b145088dd8821b937b9aa6a35a4db7f84c6ccf37 Mon Sep 17 00:00:00 2001 From: luolibin Date: Wed, 3 Jul 2019 00:11:22 +0800 Subject: [PATCH 02/39] adjust format --- tidb-in-kubernetes/k8s-deployment.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 2faa970e4142..8b879149dc60 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -54,20 +54,20 @@ $ free -m # 硬件和部署要求 -和部署 tidb binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,网卡使用万兆网卡。对于服务器 disk、memory、cpu 的选择要看对集群的容量规划以及部署拓扑来定。线上 k8s 集群部署为了保证搞可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点,同时为了充分的利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置 。[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 k8s 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。下面按 3 k8s master + 3 etcd + 若干 work 节点部署方案分析 +和部署 tidb binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,网卡使用万兆网卡。对于服务器 disk、memory、cpu 的选择要看对集群的容量规划以及部署拓扑来定。线上 k8s 集群部署为了保证搞可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点,同时为了充分的利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置 。[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 k8s 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。下面按 3 k8s master + 3 etcd + 若干 work 节点部署方案分析。 ## k8s 系统资源要求 -1. 每个机器上的需要一块比较大的 SAS 盘(至少 1T),这块盘用来存 docker 和 kubelet 的数据目录,docker 的数据主要包括镜像和容器日志数据,kubelet 主要占盘的数据是 emptyDir 所使用的数据 +1. 每个机器上的需要一块比较大的 SAS 盘(至少 1T),这块盘用来存 docker 和 kubelet 的数据目录,docker 的数据主要包括镜像和容器日志数据,kubelet 主要占盘的数据是 emptyDir 所使用的数据。 2. 如果需要部署 k8s 集群的监控系统, 且监控数据需要落盘,则也需要考虑为 prometheus 准备一块 SAS 盘,后面日志监控系统也需要大的 SAS 盘,同时考虑到机器采购最好是同构的这一因素,因此每台机器最好有两块大的 SAS 盘。生成环境建议给这两种类型的盘做 RAID5,至于使用多少块来做 RAID5 用户自己决定。 3. etcd 的分布建议是和 k8s master 节点保持一致,也就是多少个 master 节点就部署多少个 etcd 节点,etcd 数据建议使用 SSD 盘存放。 ## tidb 集群资源需求 -tidb 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候一般按照可以支持多少套 tidb 集群来算。我们这里按照标准的 tidb 集群 3个 PD + 3 个 TiKV + 2 个 TiDB 来算,下面是对每个组件规划的一种建议: +tidb 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候一般按照可以支持多少套 tidb 集群来算。我们这里按照标准的 tidb 集群 3个 PD + 3 个 TiKV + 2 个 TiDB 来算,下面是对每个组件规划的一种建议: 1. PD 组件。PD 占用资源较少,这种集群规模下分配 2C 4GB 即可,占用少量本地盘,为了便于管理,我们可以将所有集群的 PD 都放在 master 节点,比如需要支持 5套 tidb 集群,则可以规划三个 master 节点上每个支持部署 5 个 pd 实例,5 个 pd 实例使用同一块 SSD 盘即可(两三百 GB 的盘即可),通过 bind mount 的方式在这块 SSD 上创建 5个目录作为挂载点,操作方式见 [文档](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md#sharing-a-disk-filesystem-by-multiple-filesystem-pvs)。如果后面集群添加了更多的机器需要支持更多的 tidb 集群时,可以在 master 上用这种方式继续增加 PD 实例,如果 master 上资源耗尽可以找其它的 work 节点机器用同样的方式添加 PD 实例,这种方式的好处就是方便规划和管理 PD 实例,坏处就是由于 PD 实例过于集中,这些机器中如果有两台宕机会导致所有的 tidb 集群不可用。因此我们这里的建议是从所有集群里面的机器都拿出一块 SSD 盘像 master 节点一样提供 PD 实例。比如总共 7 台机器,要支持 7 套 tidb 标准集群的情况下,则需要每台机器上都能支持部署3个 PD 实例,如果后续有集群需要通过扩容机器增加容量,我们也只需要在新的机器上创建 PD 实例即可。 2. TiKV 组件,TiKV 组件的性能因为很依赖磁盘IO 且数据量一般较大,因此这里建议每个 TiKV 实例独占一块 NVMe 的盘,资源配置为 8C 32GB,如果想要在一个机器上支持部署 多个 TiKV 实例,则参考这些参数去选择合适的机器,同时在规划容量的时候应当预留出足够的 buffer。 -3. TiDB 组件,TiDB 组件因为不占用磁盘,因此在规划的时候只需要考虑其占用的 cpu 和 内存资源即可,这里我们也按 8C 32 GB 的容量来计算 +3. TiDB 组件,TiDB 组件因为不占用磁盘,因此在规划的时候只需要考虑其占用的 cpu 和 内存资源即可,这里我们也按 8C 32 GB 的容量来计算。 ## tidb 集群规划例子 通过上面的分析,这里给出一个支持部署 5 套规模为 3个 PD + 3 个 TiKV + 2 个 TiDB 集群的例子,其中 PD 配置为 2C 4GB,TiDB 配置为 8C 32GB,TiKV 配置为 8C 32GB。 k8s 节点有 7 个,其中三个节点既是 master 又是 work 节点,另外三个是纯 work 节点。下面是各组件分布情况。 @@ -79,7 +79,7 @@ tidb 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 * 做了 RAID5 的 SAS 盘,给 docker 和 kubelet 做数据盘 * 三块 NVMe 盘给 TiKV 实例 -单个 work 节点: +单个 work 节点: * 3 PD(3 * 2C 3 * 4GB) + 2 TiKV (2 * 8C 2 * 32GB) + 2 TiDB (2 * 8C 2 * 32GB) 总共是 38C 140GB * 一块 SSD 盘给三个 PD 实例 @@ -92,7 +92,7 @@ master 兼 work 节点: * 48C 192GB 2 块 SSD 盘,一块做了 RAID5 的 SAS 盘,三块 NVMe 盘 -work 节点: +work 节点: * 48C 192GB 1 块 SSD 盘,一块做了 RAID5 的 SAS 盘,两块 NVMe 盘 From 30832a87ff9d8a0139f25bf989370e164e9676d4 Mon Sep 17 00:00:00 2001 From: luolibin Date: Thu, 4 Jul 2019 15:20:38 +0800 Subject: [PATCH 03/39] address comments --- tidb-in-kubernetes/k8s-deployment.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 8b879149dc60..fbe0c786e524 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -9,7 +9,7 @@ category: how-to | --- | --- | | Docker | docker-ce 18.09.6 | | K8s | v1.12.2 | -| Linux 系统 | 7.3 或以上 | +| CentOS | 7.3 或以上 | # 内核参数设置 | 配置项 | 设置值 | @@ -30,31 +30,41 @@ category: how-to 在设置 `net.bridge.bridge-nf-call-*` 这几项参数时如果报选项不存在错误,通过如下命令检查是否已经加载改模块: +{{< copyable "shell-regular" >}} + ```shell -$ ls mod|grep br_netfilter +$ lsmod|grep br_netfilter ``` 如果没有加载则执行如下命令加载: +{{< copyable "shell-regular" >}} + ```shell $ modprobe br_netfilter ``` 同时还需要关闭每个部署 k8s 节点的 swap,执行命令如下: +{{< copyable "shell-regular" >}} + ```shell $ swapofff -a ``` 执行如下命令检查 swap 已经关闭: +{{< copyable "shell-regular" >}} + ```shell ## 执行命令后输出显示 swap 一列全是 0 则表明 swap 已经关闭 $ free -m ``` +同时为了永久性的关闭 swap, 还应该将 `/etc/fstab` 中 swap 相关的条目全部删除 + # 硬件和部署要求 -和部署 tidb binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,网卡使用万兆网卡。对于服务器 disk、memory、cpu 的选择要看对集群的容量规划以及部署拓扑来定。线上 k8s 集群部署为了保证搞可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点,同时为了充分的利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置 。[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 k8s 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。下面按 3 k8s master + 3 etcd + 若干 work 节点部署方案分析。 +和部署 tidb binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,网卡使用万兆网卡。具体 tidb 集群在物理机上的部署需求参考[这里](https://github.com/pingcap/docs-cn/blob/master/dev/how-to/deploy/hardware-recommendations.md), 对于服务器 disk、memory、cpu 的选择要看对集群的容量规划以及部署拓扑来定。线上 k8s 集群部署为了保证搞可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点,同时为了充分的利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置 。[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 k8s 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。下面按 3 k8s master + 3 etcd + 若干 work 节点部署方案分析。k8s 的多 master 节点高可用部署参考[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/) ## k8s 系统资源要求 @@ -63,7 +73,7 @@ $ free -m 3. etcd 的分布建议是和 k8s master 节点保持一致,也就是多少个 master 节点就部署多少个 etcd 节点,etcd 数据建议使用 SSD 盘存放。 ## tidb 集群资源需求 -tidb 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候一般按照可以支持多少套 tidb 集群来算。我们这里按照标准的 tidb 集群 3个 PD + 3 个 TiKV + 2 个 TiDB 来算,下面是对每个组件规划的一种建议: +tidb 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候一般按照可以支持多少套 tidb 集群来算。我们这里按照标准的 tidb 集群 3个 PD + 3 个 TiKV + 2 个 TiDB 来算,下面是对每个组件规划的一种建议: 1. PD 组件。PD 占用资源较少,这种集群规模下分配 2C 4GB 即可,占用少量本地盘,为了便于管理,我们可以将所有集群的 PD 都放在 master 节点,比如需要支持 5套 tidb 集群,则可以规划三个 master 节点上每个支持部署 5 个 pd 实例,5 个 pd 实例使用同一块 SSD 盘即可(两三百 GB 的盘即可),通过 bind mount 的方式在这块 SSD 上创建 5个目录作为挂载点,操作方式见 [文档](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md#sharing-a-disk-filesystem-by-multiple-filesystem-pvs)。如果后面集群添加了更多的机器需要支持更多的 tidb 集群时,可以在 master 上用这种方式继续增加 PD 实例,如果 master 上资源耗尽可以找其它的 work 节点机器用同样的方式添加 PD 实例,这种方式的好处就是方便规划和管理 PD 实例,坏处就是由于 PD 实例过于集中,这些机器中如果有两台宕机会导致所有的 tidb 集群不可用。因此我们这里的建议是从所有集群里面的机器都拿出一块 SSD 盘像 master 节点一样提供 PD 实例。比如总共 7 台机器,要支持 7 套 tidb 标准集群的情况下,则需要每台机器上都能支持部署3个 PD 实例,如果后续有集群需要通过扩容机器增加容量,我们也只需要在新的机器上创建 PD 实例即可。 2. TiKV 组件,TiKV 组件的性能因为很依赖磁盘IO 且数据量一般较大,因此这里建议每个 TiKV 实例独占一块 NVMe 的盘,资源配置为 8C 32GB,如果想要在一个机器上支持部署 多个 TiKV 实例,则参考这些参数去选择合适的机器,同时在规划容量的时候应当预留出足够的 buffer。 From 38de66cdbb94a55455a28ef0308adf85c751519a Mon Sep 17 00:00:00 2001 From: luolibin Date: Thu, 4 Jul 2019 15:29:15 +0800 Subject: [PATCH 04/39] tiny adjustment --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index fbe0c786e524..3d0a86aa8b09 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -64,7 +64,7 @@ $ free -m # 硬件和部署要求 -和部署 tidb binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,网卡使用万兆网卡。具体 tidb 集群在物理机上的部署需求参考[这里](https://github.com/pingcap/docs-cn/blob/master/dev/how-to/deploy/hardware-recommendations.md), 对于服务器 disk、memory、cpu 的选择要看对集群的容量规划以及部署拓扑来定。线上 k8s 集群部署为了保证搞可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点,同时为了充分的利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置 。[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 k8s 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。下面按 3 k8s master + 3 etcd + 若干 work 节点部署方案分析。k8s 的多 master 节点高可用部署参考[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/) +和部署 tidb binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,网卡使用万兆网卡。具体 tidb 集群在物理机上的部署需求参考[这里](https://github.com/pingcap/docs-cn/blob/master/dev/how-to/deploy/hardware-recommendations.md), 对于服务器 disk、memory、cpu 的选择要看对集群的容量规划以及部署拓扑来定。线上 k8s 集群部署为了保证搞可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点,同时为了充分的利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 k8s 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。下面按 3 k8s master + 3 etcd + 若干 work 节点部署方案分析。k8s 的多 master 节点高可用部署参考[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/) ## k8s 系统资源要求 From b54bf3cdc4318de7c140441e9e84f5d0123b04a3 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 4 Jul 2019 15:36:47 +0800 Subject: [PATCH 05/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Tennix --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 3d0a86aa8b09..b71a02c871e6 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -69,7 +69,7 @@ $ free -m ## k8s 系统资源要求 1. 每个机器上的需要一块比较大的 SAS 盘(至少 1T),这块盘用来存 docker 和 kubelet 的数据目录,docker 的数据主要包括镜像和容器日志数据,kubelet 主要占盘的数据是 emptyDir 所使用的数据。 -2. 如果需要部署 k8s 集群的监控系统, 且监控数据需要落盘,则也需要考虑为 prometheus 准备一块 SAS 盘,后面日志监控系统也需要大的 SAS 盘,同时考虑到机器采购最好是同构的这一因素,因此每台机器最好有两块大的 SAS 盘。生成环境建议给这两种类型的盘做 RAID5,至于使用多少块来做 RAID5 用户自己决定。 +2. 如果需要部署 k8s 集群的监控系统, 且监控数据需要落盘,则也需要考虑为 prometheus 准备一块 SAS 盘,后面日志监控系统也需要大的 SAS 盘,同时考虑到机器采购最好是同构的这一因素,因此每台机器最好有两块大的 SAS 盘。生产环境建议给这两种类型的盘做 RAID5,至于使用多少块来做 RAID5 用户自己决定。 3. etcd 的分布建议是和 k8s master 节点保持一致,也就是多少个 master 节点就部署多少个 etcd 节点,etcd 数据建议使用 SSD 盘存放。 ## tidb 集群资源需求 From a0965e31bd5fef0a6d57710f1bea388cfac77c7c Mon Sep 17 00:00:00 2001 From: luolibin Date: Thu, 4 Jul 2019 23:12:05 +0800 Subject: [PATCH 06/39] address comments --- tidb-in-kubernetes/k8s-deployment.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index b71a02c871e6..e3cae6800ace 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -33,14 +33,14 @@ category: how-to {{< copyable "shell-regular" >}} ```shell -$ lsmod|grep br_netfilter +lsmod|grep br_netfilter ``` 如果没有加载则执行如下命令加载: {{< copyable "shell-regular" >}} ```shell -$ modprobe br_netfilter +modprobe br_netfilter ``` 同时还需要关闭每个部署 k8s 节点的 swap,执行命令如下: @@ -48,7 +48,7 @@ $ modprobe br_netfilter {{< copyable "shell-regular" >}} ```shell -$ swapofff -a +swapofff -a ``` 执行如下命令检查 swap 已经关闭: @@ -57,7 +57,7 @@ $ swapofff -a ```shell ## 执行命令后输出显示 swap 一列全是 0 则表明 swap 已经关闭 -$ free -m +free -m ``` 同时为了永久性的关闭 swap, 还应该将 `/etc/fstab` 中 swap 相关的条目全部删除 @@ -68,7 +68,7 @@ $ free -m ## k8s 系统资源要求 -1. 每个机器上的需要一块比较大的 SAS 盘(至少 1T),这块盘用来存 docker 和 kubelet 的数据目录,docker 的数据主要包括镜像和容器日志数据,kubelet 主要占盘的数据是 emptyDir 所使用的数据。 +1. 每个机器上的需要一块比较大的 SAS 盘(至少 1T),这块盘用来存 docker 和 kubelet 的数据目录,docker 的数据主要包括镜像和容器日志数据,kubelet 主要占盘的数据是 [emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) 所使用的数据。 2. 如果需要部署 k8s 集群的监控系统, 且监控数据需要落盘,则也需要考虑为 prometheus 准备一块 SAS 盘,后面日志监控系统也需要大的 SAS 盘,同时考虑到机器采购最好是同构的这一因素,因此每台机器最好有两块大的 SAS 盘。生产环境建议给这两种类型的盘做 RAID5,至于使用多少块来做 RAID5 用户自己决定。 3. etcd 的分布建议是和 k8s master 节点保持一致,也就是多少个 master 节点就部署多少个 etcd 节点,etcd 数据建议使用 SSD 盘存放。 From 0c88a56609902bbdb7ce61bd5aa3fa4e689cd364 Mon Sep 17 00:00:00 2001 From: luolibin Date: Tue, 9 Jul 2019 18:24:13 +0800 Subject: [PATCH 07/39] address comment --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index e3cae6800ace..1cf75531bd7b 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -9,7 +9,7 @@ category: how-to | --- | --- | | Docker | docker-ce 18.09.6 | | K8s | v1.12.2 | -| CentOS | 7.3 或以上 | +| CentOS | 7.6 and kernel 3.10.0-957 or later | # 内核参数设置 | 配置项 | 设置值 | From c1de7772090736b0bd89843343ad4882a60ed2d9 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Tue, 9 Jul 2019 18:33:39 +0800 Subject: [PATCH 08/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index e3cae6800ace..de4afc80220d 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -3,7 +3,7 @@ title: 部署 k8s category: how-to --- -# 软件版本要求 +## 软件版本要求 | 软件名称 | 版本 | | --- | --- | From 997efdfe80f74479d3f1a7d66257be2f3899f860 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Tue, 9 Jul 2019 18:33:52 +0800 Subject: [PATCH 09/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index de4afc80220d..596546be4f8e 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -1,5 +1,5 @@ --- -title: 部署 k8s +title: Kubernetes 上的 TiDB 集群环境需求 category: how-to --- From 6d4445981a0a70446bbd7f96dd71706771be5d02 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Tue, 9 Jul 2019 18:34:07 +0800 Subject: [PATCH 10/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 596546be4f8e..0dbb63d0c97b 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -2,7 +2,7 @@ title: Kubernetes 上的 TiDB 集群环境需求 category: how-to --- - +# Kubernetes 上的 TiDB 集群环境需求 ## 软件版本要求 | 软件名称 | 版本 | From dcbb324b54c80a65470454f70c821cd665e7b7fe Mon Sep 17 00:00:00 2001 From: luolibin Date: Tue, 9 Jul 2019 18:46:41 +0800 Subject: [PATCH 11/39] fix CI --- tidb-in-kubernetes/k8s-deployment.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 83f4c33a8bfc..7eaa49307567 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -3,6 +3,7 @@ title: Kubernetes 上的 TiDB 集群环境需求 category: how-to --- # Kubernetes 上的 TiDB 集群环境需求 + ## 软件版本要求 | 软件名称 | 版本 | @@ -11,7 +12,8 @@ category: how-to | K8s | v1.12.2 | | CentOS | 7.6 and kernel 3.10.0-957 or later | -# 内核参数设置 +## 内核参数设置 + | 配置项 | 设置值 | | --- | --- | | net.core.somaxconn | 32768 | @@ -35,6 +37,7 @@ category: how-to ```shell lsmod|grep br_netfilter ``` + 如果没有加载则执行如下命令加载: {{< copyable "shell-regular" >}} @@ -62,17 +65,18 @@ free -m 同时为了永久性的关闭 swap, 还应该将 `/etc/fstab` 中 swap 相关的条目全部删除 -# 硬件和部署要求 +## 硬件和部署要求 和部署 tidb binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,网卡使用万兆网卡。具体 tidb 集群在物理机上的部署需求参考[这里](https://github.com/pingcap/docs-cn/blob/master/dev/how-to/deploy/hardware-recommendations.md), 对于服务器 disk、memory、cpu 的选择要看对集群的容量规划以及部署拓扑来定。线上 k8s 集群部署为了保证搞可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点,同时为了充分的利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 k8s 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。下面按 3 k8s master + 3 etcd + 若干 work 节点部署方案分析。k8s 的多 master 节点高可用部署参考[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/) -## k8s 系统资源要求 +## k8s 系统资源要求 1. 每个机器上的需要一块比较大的 SAS 盘(至少 1T),这块盘用来存 docker 和 kubelet 的数据目录,docker 的数据主要包括镜像和容器日志数据,kubelet 主要占盘的数据是 [emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) 所使用的数据。 2. 如果需要部署 k8s 集群的监控系统, 且监控数据需要落盘,则也需要考虑为 prometheus 准备一块 SAS 盘,后面日志监控系统也需要大的 SAS 盘,同时考虑到机器采购最好是同构的这一因素,因此每台机器最好有两块大的 SAS 盘。生产环境建议给这两种类型的盘做 RAID5,至于使用多少块来做 RAID5 用户自己决定。 3. etcd 的分布建议是和 k8s master 节点保持一致,也就是多少个 master 节点就部署多少个 etcd 节点,etcd 数据建议使用 SSD 盘存放。 -## tidb 集群资源需求 +## tidb 集群资源需求 + tidb 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候一般按照可以支持多少套 tidb 集群来算。我们这里按照标准的 tidb 集群 3个 PD + 3 个 TiKV + 2 个 TiDB 来算,下面是对每个组件规划的一种建议: 1. PD 组件。PD 占用资源较少,这种集群规模下分配 2C 4GB 即可,占用少量本地盘,为了便于管理,我们可以将所有集群的 PD 都放在 master 节点,比如需要支持 5套 tidb 集群,则可以规划三个 master 节点上每个支持部署 5 个 pd 实例,5 个 pd 实例使用同一块 SSD 盘即可(两三百 GB 的盘即可),通过 bind mount 的方式在这块 SSD 上创建 5个目录作为挂载点,操作方式见 [文档](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md#sharing-a-disk-filesystem-by-multiple-filesystem-pvs)。如果后面集群添加了更多的机器需要支持更多的 tidb 集群时,可以在 master 上用这种方式继续增加 PD 实例,如果 master 上资源耗尽可以找其它的 work 节点机器用同样的方式添加 PD 实例,这种方式的好处就是方便规划和管理 PD 实例,坏处就是由于 PD 实例过于集中,这些机器中如果有两台宕机会导致所有的 tidb 集群不可用。因此我们这里的建议是从所有集群里面的机器都拿出一块 SSD 盘像 master 节点一样提供 PD 实例。比如总共 7 台机器,要支持 7 套 tidb 标准集群的情况下,则需要每台机器上都能支持部署3个 PD 实例,如果后续有集群需要通过扩容机器增加容量,我们也只需要在新的机器上创建 PD 实例即可。 @@ -80,21 +84,22 @@ tidb 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 3. TiDB 组件,TiDB 组件因为不占用磁盘,因此在规划的时候只需要考虑其占用的 cpu 和 内存资源即可,这里我们也按 8C 32 GB 的容量来计算。 ## tidb 集群规划例子 + 通过上面的分析,这里给出一个支持部署 5 套规模为 3个 PD + 3 个 TiKV + 2 个 TiDB 集群的例子,其中 PD 配置为 2C 4GB,TiDB 配置为 8C 32GB,TiKV 配置为 8C 32GB。 k8s 节点有 7 个,其中三个节点既是 master 又是 work 节点,另外三个是纯 work 节点。下面是各组件分布情况。 单个 master 节点: -* 1 etcd(2C 4GB) + 2 PD (2 * 2C 2 * 4GB) + 3 TiKV(3 * 8C 3 * 32GB) + 1 TiDB (8C 32GB) 总共是 38C 140GB +* 1 etcd(2C 4GB) + 2 PD (2 \* 2C 2 \* 4GB) + 3 TiKV(3 \* 8C 3 \* 32GB) + 1 TiDB (8C 32GB) 总共是 38C 140GB * 两块 SSD 盘,一块给 etcd,另外一块给 2 个 PD 实例 * 做了 RAID5 的 SAS 盘,给 docker 和 kubelet 做数据盘 * 三块 NVMe 盘给 TiKV 实例 单个 work 节点: - * 3 PD(3 * 2C 3 * 4GB) + 2 TiKV (2 * 8C 2 * 32GB) + 2 TiDB (2 * 8C 2 * 32GB) 总共是 38C 140GB - * 一块 SSD 盘给三个 PD 实例 - * 做了 RAID5 的 SAS 盘,给 docker 和 kubelet 做数据盘 - * 两块 NVMe 盘给 TiKV 实例 +* 3 PD(3 \* 2C 3 \* 4GB) + 2 TiKV (2 \* 8C 2 \* 32GB) + 2 TiDB (2 \* 8C 2 \* 32GB) 总共是 38C 140GB +* 一块 SSD 盘给三个 PD 实例 +* 做了 RAID5 的 SAS 盘,给 docker 和 kubelet 做数据盘 +* 两块 NVMe 盘给 TiKV 实例 从上面的分析来看要支持 5 套 tidb 集群容量共需要 7 台物理机,其中三台为 master 兼 work 节点,其余四台为 work 节点,机器配置需求如下。 From 8e5556c02a3743f341dbe5dd88f294585dc2d064 Mon Sep 17 00:00:00 2001 From: luolibin Date: Tue, 9 Jul 2019 20:19:30 +0800 Subject: [PATCH 12/39] fix CI --- v3.0/how-to/maintain/tidb-in-kubernetes/tidb-cluster.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/v3.0/how-to/maintain/tidb-in-kubernetes/tidb-cluster.md b/v3.0/how-to/maintain/tidb-in-kubernetes/tidb-cluster.md index eb2237fd8c40..5131393f7865 100644 --- a/v3.0/how-to/maintain/tidb-in-kubernetes/tidb-cluster.md +++ b/v3.0/how-to/maintain/tidb-in-kubernetes/tidb-cluster.md @@ -44,7 +44,7 @@ TiDB Operator 把 `values.yaml` 作为 TiDB 集群的配置文件。`values.yaml * 存储 `values.yaml` 中的变量 `pd.storageClassName` 和 `tikv.storageClassName` 用于配置 PD 和 TiKV 的 `StorageClass`,默认配置为最小需求的 `local-storage`。 - + 如果你不想使用默认的 `StorageClass` 或者你的 Kubernetes 集群不支持 `local-storage`,可以通过下面命令找到可用的 `StorageClass` 并选择来配置 TiDB 集群。 {{< copyable "shell-regular" >}} @@ -292,6 +292,7 @@ Grafana 服务默认通过 `NodePort` 暴露,如果 Kubernetes 集群支持负 ```shell kubectl logs -n ${namespace} ${tidbPodName} | grep SLOW_QUERY ``` + 如果 TiDB 版本 >= v2.1.8,由于慢查询日志格式发生变化,不太方便分离慢查询日志,建议参考下面内容配置 `separateSlowLog: true` 单独查看慢查询日志。 * 配置 `separateSlowLog: true` 输出慢查询日志到一个 sidecar 容器: From 8afb47a671915abe403a864f6d46f4adabf6844e Mon Sep 17 00:00:00 2001 From: onlymellb Date: Wed, 10 Jul 2019 10:18:22 +0800 Subject: [PATCH 13/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Keke Yi <40977455+yikeke@users.noreply.github.com> --- tidb-in-kubernetes/k8s-deployment.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 7eaa49307567..0d0054e539c5 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -67,7 +67,11 @@ free -m ## 硬件和部署要求 -和部署 tidb binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,网卡使用万兆网卡。具体 tidb 集群在物理机上的部署需求参考[这里](https://github.com/pingcap/docs-cn/blob/master/dev/how-to/deploy/hardware-recommendations.md), 对于服务器 disk、memory、cpu 的选择要看对集群的容量规划以及部署拓扑来定。线上 k8s 集群部署为了保证搞可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点,同时为了充分的利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 k8s 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。下面按 3 k8s master + 3 etcd + 若干 work 节点部署方案分析。k8s 的多 master 节点高可用部署参考[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/) +和部署 tidb binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,网卡使用万兆网卡。具体 tidb 集群在物理机上的部署需求参考[这里](https://github.com/pingcap/docs-cn/blob/master/dev/how-to/deploy/hardware-recommendations.md)。 + +对于服务器 disk、memory、cpu 的选择要看对集群的容量规划以及部署拓扑来定。线上 k8s 集群部署为了保证高可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点,同时为了充分的利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 k8s 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。 + +下面按 3 k8s master + 3 etcd + 若干 work 节点部署方案分析。k8s 的多 master 节点高可用部署参考[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/)。 ## k8s 系统资源要求 From 920a8379a9536b917d256696ad7107ceb49a361f Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:28:39 +0800 Subject: [PATCH 14/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 0d0054e539c5..9b45f6b03f39 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -9,7 +9,7 @@ category: how-to | 软件名称 | 版本 | | --- | --- | | Docker | docker-ce 18.09.6 | -| K8s | v1.12.2 | +| Kubernetes | v1.12.2 | | CentOS | 7.6 and kernel 3.10.0-957 or later | ## 内核参数设置 From 537301e1e8a4565f326fc32ebd259f6c57775405 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:28:58 +0800 Subject: [PATCH 15/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 9b45f6b03f39..3bf7434fac72 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -8,7 +8,7 @@ category: how-to | 软件名称 | 版本 | | --- | --- | -| Docker | docker-ce 18.09.6 | +| Docker | Docker CE 18.09.6 | | Kubernetes | v1.12.2 | | CentOS | 7.6 and kernel 3.10.0-957 or later | From f10bf01c8e650e1e4c54e53ed8536366aa890058 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:29:11 +0800 Subject: [PATCH 16/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 3bf7434fac72..5f9b096886b3 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -54,7 +54,7 @@ modprobe br_netfilter swapofff -a ``` -执行如下命令检查 swap 已经关闭: +执行如下命令检查 swap 是否已经关闭: {{< copyable "shell-regular" >}} From 9de2b7538a89b972c987165cbb1b30478b1058c4 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:29:34 +0800 Subject: [PATCH 17/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 5f9b096886b3..737e294b6f90 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -46,7 +46,7 @@ lsmod|grep br_netfilter modprobe br_netfilter ``` -同时还需要关闭每个部署 k8s 节点的 swap,执行命令如下: +同时还需要关闭每个部署 Kubernetes 节点的 swap,执行命令如下: {{< copyable "shell-regular" >}} From e4adccd8274f3015edb31f7ba46f2a1480135cd5 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:29:51 +0800 Subject: [PATCH 18/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 737e294b6f90..3b28359dc195 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -63,7 +63,7 @@ swapofff -a free -m ``` -同时为了永久性的关闭 swap, 还应该将 `/etc/fstab` 中 swap 相关的条目全部删除 +同时为了永久性地关闭 swap,还应该将 `/etc/fstab` 中 swap 相关的条目全部删除。 ## 硬件和部署要求 From a77ad356fc10284ad6087101c7b3f7cde7d67a72 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:30:06 +0800 Subject: [PATCH 19/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 3b28359dc195..d97181632464 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -100,7 +100,7 @@ tidb 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 单个 work 节点: -* 3 PD(3 \* 2C 3 \* 4GB) + 2 TiKV (2 \* 8C 2 \* 32GB) + 2 TiDB (2 \* 8C 2 \* 32GB) 总共是 38C 140GB +* 3 PD (3 \* 2C 3 \* 4GB) + 2 TiKV (2 \* 8C 2 \* 32GB) + 2 TiDB (2 \* 8C 2 \* 32GB) 总共是 38C 140GB * 一块 SSD 盘给三个 PD 实例 * 做了 RAID5 的 SAS 盘,给 docker 和 kubelet 做数据盘 * 两块 NVMe 盘给 TiKV 实例 From f3239fde68141b97d106259673c3a2361b22558f Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:30:17 +0800 Subject: [PATCH 20/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index d97181632464..7fb1e21dddc5 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -111,7 +111,7 @@ master 兼 work 节点: * 48C 192GB 2 块 SSD 盘,一块做了 RAID5 的 SAS 盘,三块 NVMe 盘 -work 节点: +work 节点: * 48C 192GB 1 块 SSD 盘,一块做了 RAID5 的 SAS 盘,两块 NVMe 盘 From 6a90d1fba9dc4d590c10300f1ece03af82eb8e38 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:31:20 +0800 Subject: [PATCH 21/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 7fb1e21dddc5..8d0bf39ef61d 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -67,7 +67,7 @@ free -m ## 硬件和部署要求 -和部署 tidb binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,网卡使用万兆网卡。具体 tidb 集群在物理机上的部署需求参考[这里](https://github.com/pingcap/docs-cn/blob/master/dev/how-to/deploy/hardware-recommendations.md)。 +与部署 TiDB binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,使用万兆网卡。关于 TiDB 集群在物理机上的具体部署需求,参考[这里](https://github.com/pingcap/docs-cn/blob/master/dev/how-to/deploy/hardware-recommendations.md)。 对于服务器 disk、memory、cpu 的选择要看对集群的容量规划以及部署拓扑来定。线上 k8s 集群部署为了保证高可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点,同时为了充分的利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 k8s 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。 From 164e712f4e182a5d6c9c75413a4f79b20efd38cf Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:31:55 +0800 Subject: [PATCH 22/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 8d0bf39ef61d..af8e56a0556c 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -69,7 +69,7 @@ free -m 与部署 TiDB binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,使用万兆网卡。关于 TiDB 集群在物理机上的具体部署需求,参考[这里](https://github.com/pingcap/docs-cn/blob/master/dev/how-to/deploy/hardware-recommendations.md)。 -对于服务器 disk、memory、cpu 的选择要看对集群的容量规划以及部署拓扑来定。线上 k8s 集群部署为了保证高可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点,同时为了充分的利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 k8s 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。 +对于服务器 disk、memory、CPU 的选择要根据对集群的容量规划以及部署拓扑来定。线上 Kubernetes 集群部署为了保证高可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点。同时,为了充分利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 Kubernetes 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。 下面按 3 k8s master + 3 etcd + 若干 work 节点部署方案分析。k8s 的多 master 节点高可用部署参考[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/)。 From 20478e0ec435d50ef8d50fbc1f513f26bb43ebc9 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:32:46 +0800 Subject: [PATCH 23/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index af8e56a0556c..feec85705639 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -71,7 +71,7 @@ free -m 对于服务器 disk、memory、CPU 的选择要根据对集群的容量规划以及部署拓扑来定。线上 Kubernetes 集群部署为了保证高可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点。同时,为了充分利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 Kubernetes 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。 -下面按 3 k8s master + 3 etcd + 若干 work 节点部署方案分析。k8s 的多 master 节点高可用部署参考[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/)。 +下面按 3 Kubernetes master + 3 etcd + 若干 work 节点部署方案分析。Kubernetes 的多 master 节点高可用部署参考[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/)。 ## k8s 系统资源要求 From e40b9ab2c42c02b011ab4f5d015b9082e0930fd1 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:33:03 +0800 Subject: [PATCH 24/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index feec85705639..5abae3f85740 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -107,7 +107,7 @@ tidb 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 从上面的分析来看要支持 5 套 tidb 集群容量共需要 7 台物理机,其中三台为 master 兼 work 节点,其余四台为 work 节点,机器配置需求如下。 -master 兼 work 节点: +master 兼 work 节点: * 48C 192GB 2 块 SSD 盘,一块做了 RAID5 的 SAS 盘,三块 NVMe 盘 From 62a3daa3bc613fa35f65b63cf129f06c968b0187 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:40:42 +0800 Subject: [PATCH 25/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 5abae3f85740..82511b36d424 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -102,7 +102,7 @@ tidb 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 * 3 PD (3 \* 2C 3 \* 4GB) + 2 TiKV (2 \* 8C 2 \* 32GB) + 2 TiDB (2 \* 8C 2 \* 32GB) 总共是 38C 140GB * 一块 SSD 盘给三个 PD 实例 -* 做了 RAID5 的 SAS 盘,给 docker 和 kubelet 做数据盘 +* 做了 RAID5 的 SAS 盘,给 Docker 和 kubelet 做数据盘 * 两块 NVMe 盘给 TiKV 实例 从上面的分析来看要支持 5 套 tidb 集群容量共需要 7 台物理机,其中三台为 master 兼 work 节点,其余四台为 work 节点,机器配置需求如下。 From 79c303f59f14d1389fa02261956f0aa75d3e9706 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:41:01 +0800 Subject: [PATCH 26/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 82511b36d424..87f4e8cd74ab 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -73,7 +73,7 @@ free -m 下面按 3 Kubernetes master + 3 etcd + 若干 work 节点部署方案分析。Kubernetes 的多 master 节点高可用部署参考[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/)。 -## k8s 系统资源要求 +## Kubernetes 系统资源要求 1. 每个机器上的需要一块比较大的 SAS 盘(至少 1T),这块盘用来存 docker 和 kubelet 的数据目录,docker 的数据主要包括镜像和容器日志数据,kubelet 主要占盘的数据是 [emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) 所使用的数据。 2. 如果需要部署 k8s 集群的监控系统, 且监控数据需要落盘,则也需要考虑为 prometheus 准备一块 SAS 盘,后面日志监控系统也需要大的 SAS 盘,同时考虑到机器采购最好是同构的这一因素,因此每台机器最好有两块大的 SAS 盘。生产环境建议给这两种类型的盘做 RAID5,至于使用多少块来做 RAID5 用户自己决定。 From 75a8b9dd78740a0758a14d24afb276b305cbdb5e Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:41:23 +0800 Subject: [PATCH 27/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 87f4e8cd74ab..ff62c7687d4e 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -76,7 +76,7 @@ free -m ## Kubernetes 系统资源要求 1. 每个机器上的需要一块比较大的 SAS 盘(至少 1T),这块盘用来存 docker 和 kubelet 的数据目录,docker 的数据主要包括镜像和容器日志数据,kubelet 主要占盘的数据是 [emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) 所使用的数据。 -2. 如果需要部署 k8s 集群的监控系统, 且监控数据需要落盘,则也需要考虑为 prometheus 准备一块 SAS 盘,后面日志监控系统也需要大的 SAS 盘,同时考虑到机器采购最好是同构的这一因素,因此每台机器最好有两块大的 SAS 盘。生产环境建议给这两种类型的盘做 RAID5,至于使用多少块来做 RAID5 用户自己决定。 +2. 如果需要部署 Kubernetes 集群的监控系统, 且监控数据需要落盘,则也需要考虑为 Prometheus 准备一块 SAS 盘,后面日志监控系统也需要大的 SAS 盘,同时考虑到机器采购最好是同构的这一因素,因此每台机器最好有两块大的 SAS 盘。生产环境建议给这两种类型的盘做 RAID5,至于使用多少块来做 RAID5 可自己决定。 3. etcd 的分布建议是和 k8s master 节点保持一致,也就是多少个 master 节点就部署多少个 etcd 节点,etcd 数据建议使用 SSD 盘存放。 ## tidb 集群资源需求 From d9ed2ffd38484932c7d7e53572d3e0f897d0baef Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:41:43 +0800 Subject: [PATCH 28/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index ff62c7687d4e..28ee733cd2b7 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -81,7 +81,7 @@ free -m ## tidb 集群资源需求 -tidb 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候一般按照可以支持多少套 tidb 集群来算。我们这里按照标准的 tidb 集群 3个 PD + 3 个 TiKV + 2 个 TiDB 来算,下面是对每个组件规划的一种建议: +TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候一般按照可以支持多少套 TiDB 集群来算。这里按照标准的 tidb 集群 3个 PD + 3 个 TiKV + 2 个 TiDB 来算,下面是对每个组件规划的一种建议: 1. PD 组件。PD 占用资源较少,这种集群规模下分配 2C 4GB 即可,占用少量本地盘,为了便于管理,我们可以将所有集群的 PD 都放在 master 节点,比如需要支持 5套 tidb 集群,则可以规划三个 master 节点上每个支持部署 5 个 pd 实例,5 个 pd 实例使用同一块 SSD 盘即可(两三百 GB 的盘即可),通过 bind mount 的方式在这块 SSD 上创建 5个目录作为挂载点,操作方式见 [文档](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md#sharing-a-disk-filesystem-by-multiple-filesystem-pvs)。如果后面集群添加了更多的机器需要支持更多的 tidb 集群时,可以在 master 上用这种方式继续增加 PD 实例,如果 master 上资源耗尽可以找其它的 work 节点机器用同样的方式添加 PD 实例,这种方式的好处就是方便规划和管理 PD 实例,坏处就是由于 PD 实例过于集中,这些机器中如果有两台宕机会导致所有的 tidb 集群不可用。因此我们这里的建议是从所有集群里面的机器都拿出一块 SSD 盘像 master 节点一样提供 PD 实例。比如总共 7 台机器,要支持 7 套 tidb 标准集群的情况下,则需要每台机器上都能支持部署3个 PD 实例,如果后续有集群需要通过扩容机器增加容量,我们也只需要在新的机器上创建 PD 实例即可。 2. TiKV 组件,TiKV 组件的性能因为很依赖磁盘IO 且数据量一般较大,因此这里建议每个 TiKV 实例独占一块 NVMe 的盘,资源配置为 8C 32GB,如果想要在一个机器上支持部署 多个 TiKV 实例,则参考这些参数去选择合适的机器,同时在规划容量的时候应当预留出足够的 buffer。 From f870587e8fc66d13492c4fdade2f8615ca46b44b Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:42:22 +0800 Subject: [PATCH 29/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 28ee733cd2b7..cb06738eaf57 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -83,7 +83,7 @@ free -m TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候一般按照可以支持多少套 TiDB 集群来算。这里按照标准的 tidb 集群 3个 PD + 3 个 TiKV + 2 个 TiDB 来算,下面是对每个组件规划的一种建议: -1. PD 组件。PD 占用资源较少,这种集群规模下分配 2C 4GB 即可,占用少量本地盘,为了便于管理,我们可以将所有集群的 PD 都放在 master 节点,比如需要支持 5套 tidb 集群,则可以规划三个 master 节点上每个支持部署 5 个 pd 实例,5 个 pd 实例使用同一块 SSD 盘即可(两三百 GB 的盘即可),通过 bind mount 的方式在这块 SSD 上创建 5个目录作为挂载点,操作方式见 [文档](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md#sharing-a-disk-filesystem-by-multiple-filesystem-pvs)。如果后面集群添加了更多的机器需要支持更多的 tidb 集群时,可以在 master 上用这种方式继续增加 PD 实例,如果 master 上资源耗尽可以找其它的 work 节点机器用同样的方式添加 PD 实例,这种方式的好处就是方便规划和管理 PD 实例,坏处就是由于 PD 实例过于集中,这些机器中如果有两台宕机会导致所有的 tidb 集群不可用。因此我们这里的建议是从所有集群里面的机器都拿出一块 SSD 盘像 master 节点一样提供 PD 实例。比如总共 7 台机器,要支持 7 套 tidb 标准集群的情况下,则需要每台机器上都能支持部署3个 PD 实例,如果后续有集群需要通过扩容机器增加容量,我们也只需要在新的机器上创建 PD 实例即可。 +1. PD 组件。PD 占用资源较少,这种集群规模下分配 2C 4GB 即可,占用少量本地盘,为了便于管理,我们可以将所有集群的 PD 都放在 master 节点,比如需要支持 5 套 TiDB 集群,则可以规划三个 master 节点上每个支持部署 5 个 PD 实例,5 个 PD 实例使用同一块 SSD 盘即可(两三百 GB 的盘即可),通过 bind mount 的方式在这块 SSD 上创建 5 个目录作为挂载点,操作方式见 [文档](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md#sharing-a-disk-filesystem-by-multiple-filesystem-pvs)。如果后面集群添加了更多的机器需要支持更多的 TiDB 集群时,可以在 master 上用这种方式继续增加 PD 实例,如果 master 上资源耗尽可以找其它的 work 节点机器用同样的方式添加 PD 实例,这种方式的好处就是方便规划和管理 PD 实例,坏处就是由于 PD 实例过于集中,这些机器中如果有两台宕机会导致所有的 TiDB 集群不可用。因此这里建议从所有集群里面的机器都拿出一块 SSD 盘像 master 节点一样提供 PD 实例。比如总共 7 台机器,要支持 7 套 TiDB 标准集群的情况下,则需要每台机器上都能支持部署3个 PD 实例,如果后续有集群需要通过扩容机器增加容量,也只需要在新的机器上创建 PD 实例。 2. TiKV 组件,TiKV 组件的性能因为很依赖磁盘IO 且数据量一般较大,因此这里建议每个 TiKV 实例独占一块 NVMe 的盘,资源配置为 8C 32GB,如果想要在一个机器上支持部署 多个 TiKV 实例,则参考这些参数去选择合适的机器,同时在规划容量的时候应当预留出足够的 buffer。 3. TiDB 组件,TiDB 组件因为不占用磁盘,因此在规划的时候只需要考虑其占用的 cpu 和 内存资源即可,这里我们也按 8C 32 GB 的容量来计算。 From 36bea1987f29edd53f49924a0814ab5c0f2bf412 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:42:52 +0800 Subject: [PATCH 30/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index cb06738eaf57..19d01cd67d21 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -98,7 +98,7 @@ TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 * 做了 RAID5 的 SAS 盘,给 docker 和 kubelet 做数据盘 * 三块 NVMe 盘给 TiKV 实例 -单个 work 节点: +单个 work 节点: * 3 PD (3 \* 2C 3 \* 4GB) + 2 TiKV (2 \* 8C 2 \* 32GB) + 2 TiDB (2 \* 8C 2 \* 32GB) 总共是 38C 140GB * 一块 SSD 盘给三个 PD 实例 From b57d4a49e7b17aec6bc07483fef748a2ab7e2bb9 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:43:16 +0800 Subject: [PATCH 31/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 19d01cd67d21..9baedbf939dd 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -84,7 +84,7 @@ free -m TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候一般按照可以支持多少套 TiDB 集群来算。这里按照标准的 tidb 集群 3个 PD + 3 个 TiKV + 2 个 TiDB 来算,下面是对每个组件规划的一种建议: 1. PD 组件。PD 占用资源较少,这种集群规模下分配 2C 4GB 即可,占用少量本地盘,为了便于管理,我们可以将所有集群的 PD 都放在 master 节点,比如需要支持 5 套 TiDB 集群,则可以规划三个 master 节点上每个支持部署 5 个 PD 实例,5 个 PD 实例使用同一块 SSD 盘即可(两三百 GB 的盘即可),通过 bind mount 的方式在这块 SSD 上创建 5 个目录作为挂载点,操作方式见 [文档](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md#sharing-a-disk-filesystem-by-multiple-filesystem-pvs)。如果后面集群添加了更多的机器需要支持更多的 TiDB 集群时,可以在 master 上用这种方式继续增加 PD 实例,如果 master 上资源耗尽可以找其它的 work 节点机器用同样的方式添加 PD 实例,这种方式的好处就是方便规划和管理 PD 实例,坏处就是由于 PD 实例过于集中,这些机器中如果有两台宕机会导致所有的 TiDB 集群不可用。因此这里建议从所有集群里面的机器都拿出一块 SSD 盘像 master 节点一样提供 PD 实例。比如总共 7 台机器,要支持 7 套 TiDB 标准集群的情况下,则需要每台机器上都能支持部署3个 PD 实例,如果后续有集群需要通过扩容机器增加容量,也只需要在新的机器上创建 PD 实例。 -2. TiKV 组件,TiKV 组件的性能因为很依赖磁盘IO 且数据量一般较大,因此这里建议每个 TiKV 实例独占一块 NVMe 的盘,资源配置为 8C 32GB,如果想要在一个机器上支持部署 多个 TiKV 实例,则参考这些参数去选择合适的机器,同时在规划容量的时候应当预留出足够的 buffer。 +2. TiKV 组件,TiKV 组件的性能因为很依赖磁盘 I/O 且数据量一般较大,因此这里建议每个 TiKV 实例独占一块 NVMe 的盘,资源配置为 8C 32GB,如果想要在一个机器上支持部署 多个 TiKV 实例,则参考这些参数去选择合适的机器,同时在规划容量的时候应当预留出足够的 buffer。 3. TiDB 组件,TiDB 组件因为不占用磁盘,因此在规划的时候只需要考虑其占用的 cpu 和 内存资源即可,这里我们也按 8C 32 GB 的容量来计算。 ## tidb 集群规划例子 From dc12d3f0dd05b64993326be108f114e2364c51ce Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:43:33 +0800 Subject: [PATCH 32/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 9baedbf939dd..d127fa1f3cdf 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -87,7 +87,7 @@ TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 2. TiKV 组件,TiKV 组件的性能因为很依赖磁盘 I/O 且数据量一般较大,因此这里建议每个 TiKV 实例独占一块 NVMe 的盘,资源配置为 8C 32GB,如果想要在一个机器上支持部署 多个 TiKV 实例,则参考这些参数去选择合适的机器,同时在规划容量的时候应当预留出足够的 buffer。 3. TiDB 组件,TiDB 组件因为不占用磁盘,因此在规划的时候只需要考虑其占用的 cpu 和 内存资源即可,这里我们也按 8C 32 GB 的容量来计算。 -## tidb 集群规划例子 +## TiDB 集群规划例子 通过上面的分析,这里给出一个支持部署 5 套规模为 3个 PD + 3 个 TiKV + 2 个 TiDB 集群的例子,其中 PD 配置为 2C 4GB,TiDB 配置为 8C 32GB,TiKV 配置为 8C 32GB。 k8s 节点有 7 个,其中三个节点既是 master 又是 work 节点,另外三个是纯 work 节点。下面是各组件分布情况。 From 70b5ad9343b985ae2fd9cf8f48b3cec6bc884976 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:44:02 +0800 Subject: [PATCH 33/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index d127fa1f3cdf..eef5eb3afe2a 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -89,7 +89,7 @@ TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 ## TiDB 集群规划例子 -通过上面的分析,这里给出一个支持部署 5 套规模为 3个 PD + 3 个 TiKV + 2 个 TiDB 集群的例子,其中 PD 配置为 2C 4GB,TiDB 配置为 8C 32GB,TiKV 配置为 8C 32GB。 k8s 节点有 7 个,其中三个节点既是 master 又是 work 节点,另外三个是纯 work 节点。下面是各组件分布情况。 +通过上面的分析,这里给出一个支持部署 5 套规模为 3个 PD + 3 个 TiKV + 2 个 TiDB 集群的例子,其中 PD 配置为 2C 4GB,TiDB 配置为 8C 32GB,TiKV 配置为 8C 32GB。Kubernetes 节点有 7 个,其中三个节点既是 master 又是 work 节点,另外三个是纯 work 节点。下面是各组件分布情况。 单个 master 节点: From a6730602ebe79d2eae9252119fff8d9639682384 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:44:25 +0800 Subject: [PATCH 34/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index eef5eb3afe2a..4b17e5dfa2cb 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -91,7 +91,7 @@ TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 通过上面的分析,这里给出一个支持部署 5 套规模为 3个 PD + 3 个 TiKV + 2 个 TiDB 集群的例子,其中 PD 配置为 2C 4GB,TiDB 配置为 8C 32GB,TiKV 配置为 8C 32GB。Kubernetes 节点有 7 个,其中三个节点既是 master 又是 work 节点,另外三个是纯 work 节点。下面是各组件分布情况。 -单个 master 节点: +单个 master 节点: * 1 etcd(2C 4GB) + 2 PD (2 \* 2C 2 \* 4GB) + 3 TiKV(3 \* 8C 3 \* 32GB) + 1 TiDB (8C 32GB) 总共是 38C 140GB * 两块 SSD 盘,一块给 etcd,另外一块给 2 个 PD 实例 From c6949257329e7f8f6090d7b98cdea244be72de97 Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:44:42 +0800 Subject: [PATCH 35/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 4b17e5dfa2cb..8f180a7caad1 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -93,7 +93,7 @@ TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 单个 master 节点: -* 1 etcd(2C 4GB) + 2 PD (2 \* 2C 2 \* 4GB) + 3 TiKV(3 \* 8C 3 \* 32GB) + 1 TiDB (8C 32GB) 总共是 38C 140GB +* 1 etcd (2C 4GB) + 2 PD (2 \* 2C 2 \* 4GB) + 3 TiKV (3 \* 8C 3 \* 32GB) + 1 TiDB (8C 32GB) 总共是 38C 140GB * 两块 SSD 盘,一块给 etcd,另外一块给 2 个 PD 实例 * 做了 RAID5 的 SAS 盘,给 docker 和 kubelet 做数据盘 * 三块 NVMe 盘给 TiKV 实例 From bf63394609203c07a9c2d427b38e7323aae2e23e Mon Sep 17 00:00:00 2001 From: onlymellb Date: Thu, 11 Jul 2019 15:45:13 +0800 Subject: [PATCH 36/39] Update tidb-in-kubernetes/k8s-deployment.md Co-Authored-By: Lilian Lee --- tidb-in-kubernetes/k8s-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 8f180a7caad1..0780d944e747 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -95,7 +95,7 @@ TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 * 1 etcd (2C 4GB) + 2 PD (2 \* 2C 2 \* 4GB) + 3 TiKV (3 \* 8C 3 \* 32GB) + 1 TiDB (8C 32GB) 总共是 38C 140GB * 两块 SSD 盘,一块给 etcd,另外一块给 2 个 PD 实例 -* 做了 RAID5 的 SAS 盘,给 docker 和 kubelet 做数据盘 +* 做了 RAID5 的 SAS 盘,给 Docker 和 kubelet 做数据盘 * 三块 NVMe 盘给 TiKV 实例 单个 work 节点: From 284937ddedc83940530b150c1df859f9d440efe9 Mon Sep 17 00:00:00 2001 From: luolibin Date: Thu, 11 Jul 2019 16:12:50 +0800 Subject: [PATCH 37/39] add blank line --- tidb-in-kubernetes/k8s-deployment.md | 1 + 1 file changed, 1 insertion(+) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 0780d944e747..4d6ee6b9329c 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -2,6 +2,7 @@ title: Kubernetes 上的 TiDB 集群环境需求 category: how-to --- + # Kubernetes 上的 TiDB 集群环境需求 ## 软件版本要求 From df6edfc770fcaeb1d45515987bb7225a11232223 Mon Sep 17 00:00:00 2001 From: Lilian Lee Date: Thu, 11 Jul 2019 17:11:11 +0800 Subject: [PATCH 38/39] tidb-in-kubernetes: update wording and format --- tidb-in-kubernetes/k8s-deployment.md | 69 +++++++++++++++------------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 4d6ee6b9329c..7bc9507ade66 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -5,10 +5,12 @@ category: how-to # Kubernetes 上的 TiDB 集群环境需求 +本文介绍在 Kubernetes 上部署 TiDB 集群的软硬件环境需求。 + ## 软件版本要求 | 软件名称 | 版本 | -| --- | --- | +| :--- | :--- | | Docker | Docker CE 18.09.6 | | Kubernetes | v1.12.2 | | CentOS | 7.6 and kernel 3.10.0-957 or later | @@ -16,7 +18,7 @@ category: how-to ## 内核参数设置 | 配置项 | 设置值 | -| --- | --- | +| :--- | :--- | | net.core.somaxconn | 32768 | | vm.swappiness | 0 | | net.ipv4.tcp_syncookies | 1 | @@ -39,7 +41,7 @@ category: how-to lsmod|grep br_netfilter ``` -如果没有加载则执行如下命令加载: +如果没有加载,则执行如下命令加载: {{< copyable "shell-regular" >}} @@ -47,7 +49,7 @@ lsmod|grep br_netfilter modprobe br_netfilter ``` -同时还需要关闭每个部署 Kubernetes 节点的 swap,执行命令如下: +同时还需要关闭每个部署 Kubernetes 节点的 swap,执行如下命令: {{< copyable "shell-regular" >}} @@ -64,11 +66,11 @@ swapofff -a free -m ``` -同时为了永久性地关闭 swap,还应该将 `/etc/fstab` 中 swap 相关的条目全部删除。 +此外,为了永久性地关闭 swap,还需要将 `/etc/fstab` 中 swap 相关的条目全部删除。 ## 硬件和部署要求 -与部署 TiDB binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,使用万兆网卡。关于 TiDB 集群在物理机上的具体部署需求,参考[这里](https://github.com/pingcap/docs-cn/blob/master/dev/how-to/deploy/hardware-recommendations.md)。 +与部署 TiDB binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,使用万兆网卡。关于 TiDB 集群在物理机上的具体部署需求,参考[这里](/dev/how-to/deploy/hardware-recommendations.md)。 对于服务器 disk、memory、CPU 的选择要根据对集群的容量规划以及部署拓扑来定。线上 Kubernetes 集群部署为了保证高可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点。同时,为了充分利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 Kubernetes 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。 @@ -76,44 +78,49 @@ free -m ## Kubernetes 系统资源要求 -1. 每个机器上的需要一块比较大的 SAS 盘(至少 1T),这块盘用来存 docker 和 kubelet 的数据目录,docker 的数据主要包括镜像和容器日志数据,kubelet 主要占盘的数据是 [emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) 所使用的数据。 -2. 如果需要部署 Kubernetes 集群的监控系统, 且监控数据需要落盘,则也需要考虑为 Prometheus 准备一块 SAS 盘,后面日志监控系统也需要大的 SAS 盘,同时考虑到机器采购最好是同构的这一因素,因此每台机器最好有两块大的 SAS 盘。生产环境建议给这两种类型的盘做 RAID5,至于使用多少块来做 RAID5 可自己决定。 -3. etcd 的分布建议是和 k8s master 节点保持一致,也就是多少个 master 节点就部署多少个 etcd 节点,etcd 数据建议使用 SSD 盘存放。 +- 每台机器需要一块比较大的 SAS 盘(至少 1T),这块盘用来存 Docker 和 kubelet 的数据目录。Docker 的数据主要包括镜像和容器日志数据,kubelet 主要占盘的数据是 [emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) 所使用的数据。 + +- 如果需要部署 Kubernetes 集群的监控系统, 且监控数据需要落盘,则也需要考虑为 Prometheus 准备一块 SAS 盘,后面日志监控系统也需要大的 SAS 盘,同时考虑到机器采购最好是同构的这一因素,因此每台机器最好有两块大的 SAS 盘。生产环境建议给这两种类型的盘做 RAID5,至于使用多少块来做 RAID5 可自己决定。 + +- etcd 的分布建议是和 Kubernetes master 节点保持一致,即有多少个 master 节点就部署多少个 etcd 节点,etcd 数据建议使用 SSD 盘存放。 -## tidb 集群资源需求 +## TiDB 集群资源需求 TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候一般按照可以支持多少套 TiDB 集群来算。这里按照标准的 tidb 集群 3个 PD + 3 个 TiKV + 2 个 TiDB 来算,下面是对每个组件规划的一种建议: -1. PD 组件。PD 占用资源较少,这种集群规模下分配 2C 4GB 即可,占用少量本地盘,为了便于管理,我们可以将所有集群的 PD 都放在 master 节点,比如需要支持 5 套 TiDB 集群,则可以规划三个 master 节点上每个支持部署 5 个 PD 实例,5 个 PD 实例使用同一块 SSD 盘即可(两三百 GB 的盘即可),通过 bind mount 的方式在这块 SSD 上创建 5 个目录作为挂载点,操作方式见 [文档](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md#sharing-a-disk-filesystem-by-multiple-filesystem-pvs)。如果后面集群添加了更多的机器需要支持更多的 TiDB 集群时,可以在 master 上用这种方式继续增加 PD 实例,如果 master 上资源耗尽可以找其它的 work 节点机器用同样的方式添加 PD 实例,这种方式的好处就是方便规划和管理 PD 实例,坏处就是由于 PD 实例过于集中,这些机器中如果有两台宕机会导致所有的 TiDB 集群不可用。因此这里建议从所有集群里面的机器都拿出一块 SSD 盘像 master 节点一样提供 PD 实例。比如总共 7 台机器,要支持 7 套 TiDB 标准集群的情况下,则需要每台机器上都能支持部署3个 PD 实例,如果后续有集群需要通过扩容机器增加容量,也只需要在新的机器上创建 PD 实例。 -2. TiKV 组件,TiKV 组件的性能因为很依赖磁盘 I/O 且数据量一般较大,因此这里建议每个 TiKV 实例独占一块 NVMe 的盘,资源配置为 8C 32GB,如果想要在一个机器上支持部署 多个 TiKV 实例,则参考这些参数去选择合适的机器,同时在规划容量的时候应当预留出足够的 buffer。 -3. TiDB 组件,TiDB 组件因为不占用磁盘,因此在规划的时候只需要考虑其占用的 cpu 和 内存资源即可,这里我们也按 8C 32 GB 的容量来计算。 +- PD 组件:PD 占用资源较少,这种集群规模下分配 2C 4GB 即可,占用少量本地盘。 -## TiDB 集群规划例子 + 为了便于管理,可以将所有集群的 PD 都放在 master 节点,比如需要支持 5 套 TiDB 集群,则可以规划三个 master 节点上每个支持部署 5 个 PD 实例,5 个 PD 实例使用同一块 SSD 盘即可(两三百 GB 的盘即可),通过 bind mount 的方式在这块 SSD 上创建 5 个目录作为挂载点,操作方式见[文档](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md#sharing-a-disk-filesystem-by-multiple-filesystem-pvs)。 + + 如果后面集群添加了更多的机器需要支持更多的 TiDB 集群时,可以在 master 上用这种方式继续增加 PD 实例,如果 master 上资源耗尽可以找其它的 work 节点机器用同样的方式添加 PD 实例,这种方式的好处就是方便规划和管理 PD 实例,坏处就是由于 PD 实例过于集中,这些机器中如果有两台宕机会导致所有的 TiDB 集群不可用。 + + 因此这里建议从所有集群里面的机器都拿出一块 SSD 盘像 master 节点一样提供 PD 实例。比如总共 7 台机器,要支持 7 套 TiDB 标准集群的情况下,则需要每台机器上都能支持部署3个 PD 实例,如果后续有集群需要通过扩容机器增加容量,也只需要在新的机器上创建 PD 实例。 -通过上面的分析,这里给出一个支持部署 5 套规模为 3个 PD + 3 个 TiKV + 2 个 TiDB 集群的例子,其中 PD 配置为 2C 4GB,TiDB 配置为 8C 32GB,TiKV 配置为 8C 32GB。Kubernetes 节点有 7 个,其中三个节点既是 master 又是 work 节点,另外三个是纯 work 节点。下面是各组件分布情况。 +- TiKV 组件:因为 TiKV 组件的性能很依赖磁盘 I/O 且数据量一般较大,因此这里建议每个 TiKV 实例独占一块 NVMe 的盘,资源配置为 8C 32GB,如果想要在一个机器上支持部署 多个 TiKV 实例,则参考这些参数去选择合适的机器,同时在规划容量的时候应当预留出足够的 buffer。 -单个 master 节点: +- TiDB 组件:TiDB 组件因为不占用磁盘,因此在规划的时候只需要考虑其占用的 CPU 和内存资源即可,这里也按 8C 32 GB 的容量来计算。 -* 1 etcd (2C 4GB) + 2 PD (2 \* 2C 2 \* 4GB) + 3 TiKV (3 \* 8C 3 \* 32GB) + 1 TiDB (8C 32GB) 总共是 38C 140GB -* 两块 SSD 盘,一块给 etcd,另外一块给 2 个 PD 实例 -* 做了 RAID5 的 SAS 盘,给 Docker 和 kubelet 做数据盘 -* 三块 NVMe 盘给 TiKV 实例 +## TiDB 集群规划例子 -单个 work 节点: +通过上面的分析,这里给出一个支持部署 5 套规模为 3个 PD + 3 个 TiKV + 2 个 TiDB 集群的例子,其中 PD 配置为 2C 4GB,TiDB 配置为 8C 32GB,TiKV 配置为 8C 32GB。Kubernetes 节点有 7 个,其中三个节点既是 master 又是 work 节点,另外三个是纯 work 节点。各组件分布情况如下: -* 3 PD (3 \* 2C 3 \* 4GB) + 2 TiKV (2 \* 8C 2 \* 32GB) + 2 TiDB (2 \* 8C 2 \* 32GB) 总共是 38C 140GB -* 一块 SSD 盘给三个 PD 实例 -* 做了 RAID5 的 SAS 盘,给 Docker 和 kubelet 做数据盘 -* 两块 NVMe 盘给 TiKV 实例 ++ 单个 master 节点: -从上面的分析来看要支持 5 套 tidb 集群容量共需要 7 台物理机,其中三台为 master 兼 work 节点,其余四台为 work 节点,机器配置需求如下。 + - 1 etcd (2C 4GB) + 2 PD (2 \* 2C 2 \* 4GB) + 3 TiKV (3 \* 8C 3 \* 32GB) + 1 TiDB (8C 32GB) 总共是 38C 140GB + - 两块 SSD 盘,一块给 etcd,另外一块给 2 个 PD 实例 + - 做了 RAID5 的 SAS 盘,给 Docker 和 kubelet 做数据盘 + - 三块 NVMe 盘给 TiKV 实例 -master 兼 work 节点: ++ 单个 work 节点: -* 48C 192GB 2 块 SSD 盘,一块做了 RAID5 的 SAS 盘,三块 NVMe 盘 + - 3 PD (3 \* 2C 3 \* 4GB) + 2 TiKV (2 \* 8C 2 \* 32GB) + 2 TiDB (2 \* 8C 2 \* 32GB) 总共是 38C 140GB + - 一块 SSD 盘给三个 PD 实例 + - 做了 RAID5 的 SAS 盘,给 Docker 和 kubelet 做数据盘 + - 两块 NVMe 盘给 TiKV 实例 -work 节点: +从上面的分析来看要支持 5 套 TiDB 集群容量共需要 7 台物理机,其中三台为 master 兼 work 节点,其余四台为 work 节点,机器配置需求如下: -* 48C 192GB 1 块 SSD 盘,一块做了 RAID5 的 SAS 盘,两块 NVMe 盘 +- master 兼 work 节点:48C 192GB 2 块 SSD 盘,一块做了 RAID5 的 SAS 盘,三块 NVMe 盘 +- work 节点:48C 192GB 1 块 SSD 盘,一块做了 RAID5 的 SAS 盘,两块 NVMe 盘 -上面的机器配置刨去各个组件占用的资源还有比较多的预留资源,如果在考虑到加监控和日志组件,用同样的方法去规划需要采购的机器类型以及配置。另外在生产环境的使用上尽量不要在 master 节点部署 TiDB 实例或者尽可能少的部署 TiDB 实例,这里的主要考虑点是网卡带宽,因为如果 master 节点网卡打满会影响到 work 节点和 master 节点之间的心跳汇报信息,导致比较严重的问题。 +使用上面的机器配置,除去各个组件占用的资源外,还有比较多的预留资源。如果再考虑到加监控和日志组件,用同样的方法去规划需要采购的机器类型以及配置。另外在生产环境的使用上尽量不要在 master 节点部署 TiDB 实例或者尽可能少地部署 TiDB 实例,这里的主要考虑点是网卡带宽,因为如果 master 节点网卡打满会影响到 work 节点和 master 节点之间的心跳汇报信息,导致比较严重的问题。 From 7a6740a829918a1040d70d90081a56037088bd75 Mon Sep 17 00:00:00 2001 From: luolibin Date: Fri, 12 Jul 2019 10:45:21 +0800 Subject: [PATCH 39/39] address comments --- tidb-in-kubernetes/k8s-deployment.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tidb-in-kubernetes/k8s-deployment.md b/tidb-in-kubernetes/k8s-deployment.md index 7bc9507ade66..9c1d2cae3681 100644 --- a/tidb-in-kubernetes/k8s-deployment.md +++ b/tidb-in-kubernetes/k8s-deployment.md @@ -12,7 +12,7 @@ category: how-to | 软件名称 | 版本 | | :--- | :--- | | Docker | Docker CE 18.09.6 | -| Kubernetes | v1.12.2 | +| Kubernetes | v1.12.5+ | | CentOS | 7.6 and kernel 3.10.0-957 or later | ## 内核参数设置 @@ -72,9 +72,9 @@ free -m 与部署 TiDB binary 集群的服务器要求一致,选用 Intel x86-64 架构的 64 位通用硬件服务器,使用万兆网卡。关于 TiDB 集群在物理机上的具体部署需求,参考[这里](/dev/how-to/deploy/hardware-recommendations.md)。 -对于服务器 disk、memory、CPU 的选择要根据对集群的容量规划以及部署拓扑来定。线上 Kubernetes 集群部署为了保证高可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 work 节点。同时,为了充分利用机器资源,master 节点一般也充当 work 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 Kubernetes 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。 +对于服务器 disk、memory、CPU 的选择要根据对集群的容量规划以及部署拓扑来定。线上 Kubernetes 集群部署为了保证高可用一般需要部署三个 master 节点,三个 etcd 节点,若干个 worker 节点。同时,为了充分利用机器资源,master 节点一般也充当 worker 节点(也就是 master 节点上也可以调度负载),通过 kubelet 设置[预留资源](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) 来保证机器上的系统进程以及 Kubernetes 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。 -下面按 3 Kubernetes master + 3 etcd + 若干 work 节点部署方案分析。Kubernetes 的多 master 节点高可用部署参考[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/)。 +下面按 3 Kubernetes master + 3 etcd + 若干 worker 节点部署方案分析。Kubernetes 的多 master 节点高可用部署参考[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/)。 ## Kubernetes 系统资源要求 @@ -91,9 +91,9 @@ TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 - PD 组件:PD 占用资源较少,这种集群规模下分配 2C 4GB 即可,占用少量本地盘。 为了便于管理,可以将所有集群的 PD 都放在 master 节点,比如需要支持 5 套 TiDB 集群,则可以规划三个 master 节点上每个支持部署 5 个 PD 实例,5 个 PD 实例使用同一块 SSD 盘即可(两三百 GB 的盘即可),通过 bind mount 的方式在这块 SSD 上创建 5 个目录作为挂载点,操作方式见[文档](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/docs/operations.md#sharing-a-disk-filesystem-by-multiple-filesystem-pvs)。 - - 如果后面集群添加了更多的机器需要支持更多的 TiDB 集群时,可以在 master 上用这种方式继续增加 PD 实例,如果 master 上资源耗尽可以找其它的 work 节点机器用同样的方式添加 PD 实例,这种方式的好处就是方便规划和管理 PD 实例,坏处就是由于 PD 实例过于集中,这些机器中如果有两台宕机会导致所有的 TiDB 集群不可用。 - + + 如果后面集群添加了更多的机器需要支持更多的 TiDB 集群时,可以在 master 上用这种方式继续增加 PD 实例,如果 master 上资源耗尽可以找其它的 worker 节点机器用同样的方式添加 PD 实例,这种方式的好处就是方便规划和管理 PD 实例,坏处就是由于 PD 实例过于集中,这些机器中如果有两台宕机会导致所有的 TiDB 集群不可用。 + 因此这里建议从所有集群里面的机器都拿出一块 SSD 盘像 master 节点一样提供 PD 实例。比如总共 7 台机器,要支持 7 套 TiDB 标准集群的情况下,则需要每台机器上都能支持部署3个 PD 实例,如果后续有集群需要通过扩容机器增加容量,也只需要在新的机器上创建 PD 实例。 - TiKV 组件:因为 TiKV 组件的性能很依赖磁盘 I/O 且数据量一般较大,因此这里建议每个 TiKV 实例独占一块 NVMe 的盘,资源配置为 8C 32GB,如果想要在一个机器上支持部署 多个 TiKV 实例,则参考这些参数去选择合适的机器,同时在规划容量的时候应当预留出足够的 buffer。 @@ -102,7 +102,7 @@ TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 ## TiDB 集群规划例子 -通过上面的分析,这里给出一个支持部署 5 套规模为 3个 PD + 3 个 TiKV + 2 个 TiDB 集群的例子,其中 PD 配置为 2C 4GB,TiDB 配置为 8C 32GB,TiKV 配置为 8C 32GB。Kubernetes 节点有 7 个,其中三个节点既是 master 又是 work 节点,另外三个是纯 work 节点。各组件分布情况如下: +通过上面的分析,这里给出一个支持部署 5 套规模为 3个 PD + 3 个 TiKV + 2 个 TiDB 集群的例子,其中 PD 配置为 2C 4GB,TiDB 配置为 8C 32GB,TiKV 配置为 8C 32GB。Kubernetes 节点有 7 个,其中三个节点既是 master 又是 worker 节点,另外三个是纯 worker 节点。各组件分布情况如下: + 单个 master 节点: @@ -111,16 +111,16 @@ TiDB 集群由 PD、TiKV、TiDB 三个组件组成,在做容量规划的时候 - 做了 RAID5 的 SAS 盘,给 Docker 和 kubelet 做数据盘 - 三块 NVMe 盘给 TiKV 实例 -+ 单个 work 节点: ++ 单个 worker 节点: - 3 PD (3 \* 2C 3 \* 4GB) + 2 TiKV (2 \* 8C 2 \* 32GB) + 2 TiDB (2 \* 8C 2 \* 32GB) 总共是 38C 140GB - 一块 SSD 盘给三个 PD 实例 - 做了 RAID5 的 SAS 盘,给 Docker 和 kubelet 做数据盘 - 两块 NVMe 盘给 TiKV 实例 -从上面的分析来看要支持 5 套 TiDB 集群容量共需要 7 台物理机,其中三台为 master 兼 work 节点,其余四台为 work 节点,机器配置需求如下: +从上面的分析来看要支持 5 套 TiDB 集群容量共需要 7 台物理机,其中三台为 master 兼 worker 节点,其余四台为 worker 节点,机器配置需求如下: -- master 兼 work 节点:48C 192GB 2 块 SSD 盘,一块做了 RAID5 的 SAS 盘,三块 NVMe 盘 -- work 节点:48C 192GB 1 块 SSD 盘,一块做了 RAID5 的 SAS 盘,两块 NVMe 盘 +- master 兼 worker 节点:48C 192GB 2 块 SSD 盘,一块做了 RAID5 的 SAS 盘,三块 NVMe 盘 +- worker 节点:48C 192GB 1 块 SSD 盘,一块做了 RAID5 的 SAS 盘,两块 NVMe 盘 -使用上面的机器配置,除去各个组件占用的资源外,还有比较多的预留资源。如果再考虑到加监控和日志组件,用同样的方法去规划需要采购的机器类型以及配置。另外在生产环境的使用上尽量不要在 master 节点部署 TiDB 实例或者尽可能少地部署 TiDB 实例,这里的主要考虑点是网卡带宽,因为如果 master 节点网卡打满会影响到 work 节点和 master 节点之间的心跳汇报信息,导致比较严重的问题。 +使用上面的机器配置,除去各个组件占用的资源外,还有比较多的预留资源。如果再考虑到加监控和日志组件,用同样的方法去规划需要采购的机器类型以及配置。另外在生产环境的使用上尽量不要在 master 节点部署 TiDB 实例或者尽可能少地部署 TiDB 实例,这里的主要考虑点是网卡带宽,因为 master 节点网卡满负荷工作会影响到 worker 节点和 master 节点之间的心跳信息汇报,导致比较严重的问题。