手动安装

前置条件

硬件要求

需求项 最低配置
机器数 3台
服务器架构 支持x86架构和ARM架构
硬盘 系统盘使用SSD,容量300 GB以上;两块单独的NVMe (每块容量 200GB 以上,生产环境建议 1TB 以上),一块作为管控数据存储盘,一块作为redline数据盘,分别挂载在 /disk1 /disk2 目录下
存储 共享存储,分布式存储或者 SAN,要求支持 SCSI 或者 NVME 协议,支持 PR 锁,已挂载到所有机器上。multipath -ll可以看到您的共享盘

软件要求

需求项 要求
docker
kubenetes 1.14.8+
root 密码 服务器的root密码需要保持一致,且可免密操作
时钟同步 操作系统中已经配置NTP时钟同步

准备环境

给机器分配大页内存,分配的大页内存建议大约占机器总内存的 75%。

#!/bin/bash
hugepage_mem_gb=256  # 256G
hugepages=`echo "${hugepage_mem_gb} * 1024 / 2" | bc`
hugepages=${hugepages%%.*}
echo $hugepages
grep 'vm.nr_hugepages=' /etc/sysctl.conf
if [ $? != 0 ]; then
    echo -e "\nvm.nr_hugepages=${hugepages}" >> /etc/sysctl.conf
else
    sed -i "/^vm.nr_hugepages/vm.nr_hugepages=${hugepages}" /etc/sysctl.conf
fi
sysctl -p /etc/sysctl.conf
grep 'none /dev/hugepages1G hugetlbfs pagesize=1G 0 0' /etc/fstab
if [ $? != 0 ]; then
    sed -i '$a\none /dev/hugepages1G hugetlbfs pagesize=1G 0 0' /etc/fstab
fi
grep 'none /dev/hugepages2M hugetlbfs pagesize=2M 0 0' /etc/fstab
if [ $? != 0 ]; then
    sed -i '$a\none /dev/hugepages2M hugetlbfs pagesize=2M 0 0' /etc/fstab
fi
sed -i 's/default_hugepagesz=1G hugepagesz=1G hugepages=20/default_hugepagesz=2M hugepagesz=1G hugepagesz=2M hugepages=5120/g' /etc/default/grub
grub2-mkconfig -o "$(sudo readlink -e /etc/grub2.cfg)"

修改完大页内存后,请手动重启服务器。

安装步骤

1. 安装Docker

安装docker,请参见Docker安装指南

2. 安装Kubernetes

请安装kubernetes,版本要求1.14及以上版本。请参见K8S安装指南

3. 安装 mpd controller

  1. ./build.sh 生成镜像,或直接使用 polardb/polar-mpd-controller:0.0.1-SNAPSHOT

  2. 安装 mpdcluster crd

    a. 下载示例 yaml

wget https://github.com/ApsaraDB/PolarDB-Stack-Operator/blob/master/config/all.yaml

​ b. 修改 KUBERNETES_SERVICE_HOST 及 KUBERNETES_SERVICE_PORT 为您 k8s 集群 apiserver 的 IP 及端口

- name: KUBERNETES_SERVICE_HOST
  value: 10.0.0.77
- name: KUBERNETES_SERVICE_PORT
  value: "6443"

​ c. 修改镜像版本病应用apply 修改好的配置

kubectl apply -f all.yaml
  1. 设置 node label
wget https://github.com/ApsaraDB/PolarDB-Stack-Operator/blob/master/script/set_labels.sh
./set_labels.sh

4. 安装存储管理

  1. 安装 sms-agent

​ a. 安装 multipath

​ b. 安装并启动 supervisord ,并确认正常运行。

​ c. 在 sms 工程编译 agent,生成二进制包 bin/sms-agent。

make build-agent

​ d. 拷贝二进制包到主机的 /home/a/project/t-polardb-sms-agent/bin/polardb-sms-agent 目录上。

​ e. 配置 /etc/supervisord.d/polardb-sms-agent.ini

AGENT_INI="/etc/supervisord.d/polardb-sms-agent.ini"

NODE_IP=$(ifconfig bond0 | grep netmask | awk '{print $2}')

cat <<EOF >$AGENT_INI
[program:polardb-sms-agent]
command=/home/a/project/t-polardb-sms-agent/bin/polardb-sms-agent --port=18888 --node-ip=$NODE_IP --node-id=%(host_node_name)s
process_name=%(program_name)s
startretries=1000
autorestart=unexpected
autostart=true
EOF

​ f. 配置 /etc/polardb-sms-agent.conf

AGENT_CONF="/etc/polardb-sms-agent.conf"

cat <<EOF >$AGENT_CONF
blacklist {
    attachlist {
    }
    locallist {
    }
}
EOF
  1. 编译 polardb-sms-manager 生成镜像
./build/build-manager.sh

或使用已经打包好的镜像

docker pull polardb/polardb-sms-manager:1.0.0
  1. 创建存储管理元数据库

元数据库需要是关系型数据库,目前暂只支持 mysql,您需要自行创建元数据库并且保证该数据库可以连通。

创建元数据表结构,示例参考 PolarDB-Stack-Storage scripts/db.sql

  1. 创建 sms-manager deployment

​ a. 下载示例 yaml

wget https://github.com/ApsaraDB/PolarDB-Stack-Storage/blob/master/deploy/all.yaml

​ b. 修改 KUBERNETES_SERVICE_HOST 及 KUBERNETES_SERVICE_PORT 为您 k8s 集群 apiserver 的 IP 及端口

- name: KUBERNETES_SERVICE_HOST
  value: 10.0.0.77
- name: KUBERNETES_SERVICE_PORT
  value: "6443"

​ c. 将元数据库的信息配置进 config map

apiVersion: v1
data:
  metabase.yml: |-
    metabase:
      host: 10.0.0.77
      port: 3306
      user: polar
      password: password
      type: mysql
      version: 8.0.26
kind: ConfigMap
metadata:
  name: metabase-config
  namespace: kube-system

​ d. apply 修改好的配置

kubectl apply -f all.yaml
  1. 等待 sms 启动,如启动正常将能够看到 cloud-provider-wwid-usage- 开头的几个 cm 配置。
[root@dbm-01 ~]# kubectl -n kube-system get cm 
NAME                                 DATA   AGE
cloud-provider-wwid-usage-dbm-01     4      31s
cloud-provider-wwid-usage-dbm-02     4      33s
cloud-provider-wwid-usage-dbm-03     4      33s

注意:DATA 中有数据表示已经扫描到 polardb 所需的共享盘。

  1. 在机器上安装 pfs,需要分别在您所有的机器上安装 pfs rpm 包,参见安装部署PFS
wget https://github.com/ApsaraDB/PolarDB-FileSystem/releases/download/pfsd4pg-release-1.2.41-20211018/t-pfsd-opensource-1.2.41-1.el7.x86_64.rpm
rpm -ivh t-pfsd-opensource-1.2.41-1.el7.x86_64.rpm

5. 安装网络管理模块

  1. 将源码编译成 docker 镜像
wget https://github.com/ApsaraDB/PolarDB-Stack-Daemon/blob/master/build.sh
./build.sh
  1. 下载示例 yaml
wget https://github.com/ApsaraDB/PolarDB-Stack-Daemon/blob/master/deploy/all.yaml
  1. 使用 ifconfig 查看您的网口信息,并修改示例 yaml
NET_CARD_NAME: bond0

MiniLvs_BackendIf: bond0
  1. 创建网络 DaemonSet
kubectl apply -f all.yaml

6. 创建 DB 集群

  1. 创建 PVC ,调用接口,示例如下,IP 需要换成您的主机 IP 。
curl -X POST "http://10.0.0.77:2002/pvcs" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"name\": \"pvc-32ze341nncwlczm47bsre\", \"namespace\": \"default\", \"need_format\": true, \"volume_id\": \"32ze341nncwlczm47bsre\", \"volume_type\": \"lun\"}"
  1. 查看 PVC 是否创建成功。
kubectl get pvc
  1. 创建实例集群,将前面创建的 PVC name 填入您的集群配置。
apiVersion: mpd.polardb.aliyun.com/v1
kind: MPDCluster
metadata:
  name: mpdcluster-sample-2
  namespace: default
spec:
  operatorName: polar-mpd
  dbClusterType: share
  followerNum: 1
  classInfo:
    className: polar.o.x4.medium
  classInfoModifyTo:
    className: ""
  versionCfg:
    versionName: image-open
  netCfg:
    engineStartPort: 5780
  shareStore:
    drive: "pvc"
    sharePvcNamespace: "default"
    sharePvcName: "pvc-32ze341nncwlczm47bsre"
    diskQuota: "300000"
    volumeId: "32ze341nncwlczm47bsre"
    volumeType: "multipath"