|
| 1 | +Contents |
| 2 | +============= |
| 3 | + |
| 4 | + * [在 Rancher 上部署 RadonDB MySQL 集群](#在-rancher-上部署-radondb-mysql-集群) |
| 5 | + * [简介](#简介) |
| 6 | + * [部署准备](#部署准备) |
| 7 | + * [部署步骤](#部署步骤) |
| 8 | + * [步骤 1:添加 Helm 仓库](#步骤-1-添加-helm-仓库) |
| 9 | + * [步骤 2:部署 Operator](#步骤-2-部署-operator) |
| 10 | + * [步骤 3:部署 RadonDB MySQL 集群](#步骤-3-部署-radondb-mysql-集群) |
| 11 | + * [部署校验](#部署校验) |
| 12 | + * [访问 RadonDB MySQL](#访问-radondb-mysql) |
| 13 | + * [配置](#配置) |
| 14 | + * [容器配置](#容器配置) |
| 15 | + * [节点配置](#节点配置) |
| 16 | + * [持久化配置](#持久化配置) |
| 17 | + |
| 18 | +# 在 Rancher 上部署 RadonDB MySQL 集群(Operator) |
| 19 | + |
| 20 | +## 简介 |
| 21 | + |
| 22 | +RadonDB MySQL 是一款基于 MySQL 的开源、高可用、云原生集群解决方案。支持一主多从高可用架构,并具备安全、自动备份、监控告警、自动扩容等全套管理功能。目前已经在生产环境中大规模的使用,包含**银行、保险、传统大企业**等。 |
| 23 | + |
| 24 | +RadonDB MySQL 支持在 Rancher 上安装部署和管理,自动执行与运行 RadonDB MySQL 集群有关的任务。 |
| 25 | + |
| 26 | +本教程主要演示如何在 Rancher 上部署 RadonDB MySQL Operator 和 RadonDB MySQL 集群。 |
| 27 | + |
| 28 | +## 部署准备 |
| 29 | + |
| 30 | +- 已[部署 Rancher 集群](https://rancher.com/docs/rancher/v2.6/en/quick-start-guide/deployment/quickstart-manual-setup/),并已获取 Rancher 管理控制台登录账号和密码。 |
| 31 | + |
| 32 | +## 部署步骤 |
| 33 | + |
| 34 | +### 步骤 1: 添加 Helm 仓库 |
| 35 | + |
| 36 | +1. 登录 Rancher 管理控制台。 |
| 37 | +2. 点击目标集群,进入集群管理页面。 |
| 38 | +3. 选择 **App&Marketplace** > **Repositories**,进入应用仓库管理页面。 |
| 39 | +4. 点击 **Create**,配置 RadonDB MySQL 仓库。 |
| 40 | + |
| 41 | + -**Name**:自定义仓库名称。 |
| 42 | + |
| 43 | + -**Target**:可选择 http(s) 方式,配置 **Index URL** 为 `https://radondb.github.io/radondb-mysql-kubernetes/`。 |
| 44 | + |
| 45 | +5. 点击 **Create**,返回仓库管理页面。 |
| 46 | + |
| 47 | + 当仓库 **State** 切换为 `Active`,则添加仓库正常运行。 |
| 48 | + |
| 49 | +### 步骤 2: 部署 Operator |
| 50 | + |
| 51 | +一个 Rancher 集群仅需部署一次 RadonDB MySQL Operator。 |
| 52 | + |
| 53 | +1. 在集群管理页面,选择 **App&Marketplace** > **Charts**,进入 Charts 列表页面。 |
| 54 | +2. 找到 **mysql-operator**,部署 Operator 页面。 |
| 55 | + |
| 56 | + 可选择 mysql-operator Charts 版本。 |
| 57 | + |
| 58 | +  |
| 59 | + |
| 60 | +3. 点击 **Install**,配置应用基本信息。 |
| 61 | + |
| 62 | + 可勾选自定义 Helm 选项。 |
| 63 | + |
| 64 | +  |
| 65 | + |
| 66 | +4. (可选)点击 **Next**,自定义编辑应用 YAML。 |
| 67 | + |
| 68 | +  |
| 69 | + |
| 70 | +5. 点击 **Next**,配置部署属性。 |
| 71 | + |
| 72 | +  |
| 73 | + |
| 74 | +6. 点击 **Install**,跳转到 **Installed App** 管理页面。 |
| 75 | + |
| 76 | + 可在列表下方窗口,查看安装进度和状态。当应用部署完成后,可在列表查看到已安装的应用。 |
| 77 | + |
| 78 | +### 步骤 3: 部署 RadonDB MySQL 集群 |
| 79 | + |
| 80 | +#### 通过命令方式 |
| 81 | + |
| 82 | +1. 在集群管理页面,点击右上角 Kubectl 命令图标。 |
| 83 | + |
| 84 | +  |
| 85 | + |
| 86 | +2. 在命令窗口,输入创建集群命令。 |
| 87 | + |
| 88 | + 如下示例为部署一个三节点的样例集群。 |
| 89 | + |
| 90 | + ```shell |
| 91 | + # Run kubectl commands inside here |
| 92 | + # e.g. kubectl get all |
| 93 | + $ cat <<EOF | kubectl apply -f- |
| 94 | + apiVersion: mysql.radondb.com/v1alpha1 |
| 95 | + kind: MysqlCluster |
| 96 | + metadata: |
| 97 | + name: sample |
| 98 | + spec: |
| 99 | + replicas: 3 |
| 100 | + EOF |
| 101 | + ``` |
| 102 | +
|
| 103 | +3. 回车执行命令,回显提示 `created` 则部署成功。 |
| 104 | +
|
| 105 | + 预期回显信息示例: |
| 106 | +
|
| 107 | + ```shell |
| 108 | + mysqlcluster.mysql.radondb.com/sample created |
| 109 | + ``` |
| 110 | +
|
| 111 | +#### 通过导入 YAML 方式 |
| 112 | +
|
| 113 | +1. 下载 [RadonDB MySQL 集群配置样例](/config/samples/mysql_v1alpha1_mysqlcluster.yaml),修改 YAML 文件中配置参数值。 |
| 114 | +
|
| 115 | + 详细配置参数说明,请参见[配置](#配置)。 |
| 116 | +
|
| 117 | +2. 在 Rancher 集群管理页面,点击右上角 YAML 导入图标。在弹出的窗口中,导入修改后的 YAML 文件。 |
| 118 | +
|
| 119 | +  |
| 120 | +
|
| 121 | +### 部署验证 |
| 122 | +
|
| 123 | +1. 在集群管理页面,选择 **Service Discovery** > **Service**,进入服务列表页面。 |
| 124 | +2. 找到部署的集群,查看服务状态。 |
| 125 | + |
| 126 | + 状态为 `Active`,表示服务正常运行。 |
| 127 | +
|
| 128 | +3. 点击服务名称,进入服务详情页面,查看 Pod 状态。 |
| 129 | +
|
| 130 | + 状态为 `Active`,表示 Pod 正常运行。 |
| 131 | +
|
| 132 | +4. 在正在运行的 Pod 行,点击 Execute Shell,展开 Pod 命令窗口。 |
| 133 | + |
| 134 | + 执行如下命令并输入密码,验证数据库连接状态。 |
| 135 | +
|
| 136 | + ```shell |
| 137 | + $ mysql -u root -p |
| 138 | + ``` |
| 139 | +
|
| 140 | + 正常连接数据库回显信息如下图: |
| 141 | +
|
| 142 | +  |
| 143 | +
|
| 144 | +## 访问 RadonDB MySQL |
| 145 | +
|
| 146 | +> **注意** |
| 147 | +> |
| 148 | +> 准备可用于连接 MySQL 的客户端。 |
| 149 | +
|
| 150 | +- 当客户端与数据库部署在不同 Rancher 集群,请[在 Rancher 中设置 Load Balancer 和 Ingress Controller](https://rancher.com/docs/rancher/v2.6/en/k8s-in-rancher/load-balancers-and-ingress/)。 |
| 151 | + |
| 152 | + 更多访问不同集群中数据库方式说明,请参见 [Kubernetes 访问集群中的应用程序](https://kubernetes.io/zh/docs/tasks/access-application-cluster/)。 |
| 153 | +
|
| 154 | +- 当客户端与数据库部署在同一 Rancher 集群内,可选择使用 `service_name` 或者 `clusterIP` 方式,访问 RadonDB MySQL。 |
| 155 | + |
| 156 | + > **说明** |
| 157 | + > |
| 158 | + > RadonDB MySQL 提供 leader 服务和 follower 服务用于分别访问主从节点。leader 服务始终指向主节点(读写),follower 服务始终指向从节点(只读)。 |
| 159 | +
|
| 160 | +以下为客户端与数据库在同一 Rancher 集群内,访问 RadonDB MySQL 的方式。 |
| 161 | +
|
| 162 | +### `service_name` 方式 |
| 163 | +
|
| 164 | +* 连接 leader 服务(RadonDB MySQL 主节点) |
| 165 | +
|
| 166 | + ```shell |
| 167 | + $ mysql -h <leader_service_name>.<namespace> -u <user_name> -p |
| 168 | + ``` |
| 169 | +
|
| 170 | + 用户名为 `radondb_usr`,release 名为 `sample`,RadonDB MySQL 命名空间为 `default` ,连接示例如下: |
| 171 | +
|
| 172 | + ```shell |
| 173 | + $ mysql -h sample-leader.default -u radondb_usr -p |
| 174 | + ``` |
| 175 | +
|
| 176 | +* 连接 follower 服务(RadonDB MySQL 从节点) |
| 177 | +
|
| 178 | + ```shell |
| 179 | + $ mysql -h <follower_service_name>.<namespace> -u <user_name> -p |
| 180 | + ``` |
| 181 | +
|
| 182 | + 用户名为 `radondb_usr`,release 名为 `sample`,RadonDB MySQL 命名空间为 `default` ,连接示例如下: |
| 183 | +
|
| 184 | + ```shell |
| 185 | + $ mysql -h sample-follower.default -u radondb_usr -p |
| 186 | + ``` |
| 187 | +
|
| 188 | +### `clusterIP` 方式 |
| 189 | +
|
| 190 | +RadonDB MySQL 的高可用读写 IP 指向 leader 服务的 `clusterIP`,高可用只读 IP 指向 follower 服务的 `clusterIP`。 |
| 191 | +
|
| 192 | +```shell |
| 193 | +$ mysql -h <clusterIP> -P <mysql_Port> -u <user_name> -p |
| 194 | +``` |
| 195 | +
|
| 196 | +以下示例用户名为 `radondb_usr`, leader 服务的 clusterIP 为 `10.10.128.136` ,连接示例如下: |
| 197 | +
|
| 198 | +```shell |
| 199 | +$ mysql -h 10.10.128.136 -P 3306 -u radondb_usr -p |
| 200 | +``` |
| 201 | +
|
| 202 | +## 配置 |
| 203 | +
|
| 204 | +### 容器配置 |
| 205 | +
|
| 206 | +| 参数 | 描述 | 默认值 | |
| 207 | +| :--------------------------------- | :-------------------------- | :---------------------------------------------------------- | |
| 208 | +| MysqlVersion | MySQL 版本号 | 5.7 | |
| 209 | +| MysqlOpts.RootPassword | MySQL Root 用户密码 | "" | |
| 210 | +| MysqlOpts.User | 默认新建的 MySQL 用户名称 | radondb_usr | |
| 211 | +| MysqlOpts.Password | 默认新建的 MySQL 用户密码 | RadonDB@123 | |
| 212 | +| MysqlOpts.Database | 默认新建的 MySQL 数据库名称 | radondb | |
| 213 | +| MysqlOpts.InitTokuDB | 是否启用TokuDB | true | |
| 214 | +| MysqlOpts.MysqlConf | MySQL 配置 | - | |
| 215 | +| MysqlOpts.Resources | MySQL 容器配额 | 预留: cpu 100m, 内存 256Mi; </br> 限制: cpu 500m, 内存 1Gi | |
| 216 | +| XenonOpts.Image | xenon(高可用组件)镜像 | radondb/xenon:1.1.5-alpha | |
| 217 | +| XenonOpts.AdmitDefeatHearbeatCount | 允许的最大心跳检测失败次数 | 5 | |
| 218 | +| XenonOpts.ElectionTimeout | 选举超时时间(单位为毫秒) | 10000ms | |
| 219 | +| XenonOpts.Resources | xenon 容器配额 | 预留: cpu 50m, 内存 128Mi; </br> 限制: cpu 100m, 内存 256Mi | |
| 220 | +| MetricsOpts.Enabled | 是否启用 Metrics(监控)容器 | false | |
| 221 | +| MetricsOpts.Image | Metrics 容器镜像 | prom/mysqld-exporter:v0.12.1 | |
| 222 | +| MetricsOpts.Resources | Metrics 容器配额 | 预留: cpu 10m, 内存 32Mi; </br> 限制: cpu 100m, 内存 128Mi | |
| 223 | +
|
| 224 | +### 节点配置 |
| 225 | +
|
| 226 | +| 参数 | 描述 | 默认值 | |
| 227 | +| :-------------------------- | :----------------------------------------------- | :------------------------ | |
| 228 | +| Replicas | 集群节点数,只允许为0、2、3、5 | 3 | |
| 229 | +| PodPolicy.ImagePullPolicy | 镜像拉取策略, 只允许为 Always/IfNotPresent/Never | IfNotPresent | |
| 230 | +| PodPolicy.Labels | 节点 pod [标签](https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/labels/)) | - | |
| 231 | +| PodPolicy.Annotations | 节点 pod [注解](https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/annotations/) | - | |
| 232 | +| PodPolicy.Affinity | 节点 pod [亲和性](https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/#%E4%BA%B2%E5%92%8C%E6%80%A7%E4%B8%8E%E5%8F%8D%E4%BA%B2%E5%92%8C%E6%80%A7) | - | |
| 233 | +| PodPolicy.PriorityClassName | 节点 pod [优先级](https://kubernetes.io/zh/docs/concepts/configuration/pod-priority-preemption/)对象名称 | - | |
| 234 | +| PodPolicy.Tolerations | 节点 pod [污点容忍度](https://kubernetes.io/zh/docs/concepts/scheduling-eviction/taint-and-toleration/)列表 | - | |
| 235 | +| PodPolicy.SchedulerName | 节点 pod [调度器](https://kubernetes.io/zh/docs/concepts/scheduling-eviction/kube-scheduler/)名称 | - | |
| 236 | +| PodPolicy.ExtraResources | 节点容器配额(除 MySQL 和 Xenon 之外的容器) | 预留: cpu 10m, 内存 32Mi | |
| 237 | +| PodPolicy.SidecarImage | Sidecar 镜像 | radondb/mysql-sidecar:latest | |
| 238 | +| PodPolicy.BusyboxImage | Busybox 镜像 | busybox:1.32 | |
| 239 | +| PodPolicy.SlowLogTail | 是否开启慢日志跟踪 | false | |
| 240 | +| PodPolicy.AuditLogTail | 是否开启审计日志跟踪 | false | |
| 241 | +
|
| 242 | +### 持久化配置 |
| 243 | +
|
| 244 | +| 参数 | 描述 | 默认值 | |
| 245 | +| :----------------------- | :------------- | :------------ | |
| 246 | +| Persistence.Enabled | 是否启用持久化 | true | |
| 247 | +| Persistence.AccessModes | 存储卷访问模式 | ReadWriteOnce | |
| 248 | +| Persistence.StorageClass | 存储卷类型 | - | |
| 249 | +| Persistence.Size | 存储卷容量 | 10Gi | |
0 commit comments