手动安装
前置条件
硬件要求
需求项 | 最低配置 |
---|---|
机器数 | 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
./build.sh 生成镜像,或直接使用 polardb/polar-mpd-controller:0.0.1-SNAPSHOT
安装 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
- 设置 node label
wget https://github.com/ApsaraDB/PolarDB-Stack-Operator/blob/master/script/set_labels.sh
./set_labels.sh
4. 安装存储管理
- 安装 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
- 编译 polardb-sms-manager 生成镜像
./build/build-manager.sh
或使用已经打包好的镜像
docker pull polardb/polardb-sms-manager:1.0.0
- 创建存储管理元数据库
元数据库需要是关系型数据库,目前暂只支持 mysql,您需要自行创建元数据库并且保证该数据库可以连通。
创建元数据表结构,示例参考 PolarDB-Stack-Storage scripts/db.sql
- 创建 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
- 等待 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 所需的共享盘。
- 在机器上安装 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. 安装网络管理模块
- 将源码编译成 docker 镜像
wget https://github.com/ApsaraDB/PolarDB-Stack-Daemon/blob/master/build.sh
./build.sh
- 下载示例 yaml
wget https://github.com/ApsaraDB/PolarDB-Stack-Daemon/blob/master/deploy/all.yaml
- 使用 ifconfig 查看您的网口信息,并修改示例 yaml
NET_CARD_NAME: bond0
MiniLvs_BackendIf: bond0
- 创建网络 DaemonSet
kubectl apply -f all.yaml
6. 创建 DB 集群
- 创建 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\"}"
- 查看 PVC 是否创建成功。
kubectl get pvc
- 创建实例集群,将前面创建的 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"