Skip to content

Commit

Permalink
Merge pull request #135 from YenchangChan/main
Browse files Browse the repository at this point in the history
v2.1.0 release
  • Loading branch information
YenchangChan committed Aug 13, 2021
2 parents 83ce5e3 + a14eb56 commit 4ba774e
Show file tree
Hide file tree
Showing 43 changed files with 515 additions and 413 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# v2.1.0
- newly frontend ui in create cluster
- support storage policy
- fix since v21.6.6.51, install clickhouse will ask for password with default issue

# v2.0.0
- single node online & offline
- do not save sshPassword if necessary
Expand Down
2 changes: 1 addition & 1 deletion controller/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ func (d *DeployController) syncUpClusters(c *gin.Context) (err error) {
// @Description Deploy clickhouse
// @version 1.0
// @Security ApiKeyAuth
// @Param req body model.DeployCkReq true "request body"
// @Param req body model.CKManClickHouseConfig true "request body"
// @Failure 200 {string} json "{"retCode":"5000","retMsg":"invalid params","entity":""}"
// @Failure 200 {string} json "{"retCode":"5011","retMsg":"init package failed","entity":""}"
// @Failure 200 {string} json "{"retCode":"5012","retMsg":"prepare package failed","entity":""}"
Expand Down
7 changes: 4 additions & 3 deletions controller/schema_ui.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,8 +202,8 @@ func RegistCreateClusterSchema() common.ConfigParams {
params.MustRegister(disklocal, "Path", &common.Parameter{
LabelZH: "挂载路径",
LabelEN: "Amount Path",
DescriptionZH: "必须存在,clickhouse用户可访问, 且必须以'/'结尾",
DescriptionEN: "need exist, can be accessed by clickhouse, and must end with '/'",
DescriptionZH: "必须存在,clickhouse用户可访问, 且必须以'/'开头和结尾",
DescriptionEN: "need exist, can be accessed by clickhouse, and must begin and end with '/'",
Regexp: "^/.+/$",
})
params.MustRegister(disklocal, "KeepFreeSpaceBytes", &common.Parameter{
Expand All @@ -215,7 +215,7 @@ func RegistCreateClusterSchema() common.ConfigParams {
params.MustRegister(disks3, "Endpoint", &common.Parameter{
LabelZH: "S3端点URI",
LabelEN: "Endpoint",
Regexp: "/$",
Regexp: "^(http|https)://.+/$",
})

params.MustRegister(disks3, "AccessKeyID", &common.Parameter{
Expand Down Expand Up @@ -245,6 +245,7 @@ func RegistCreateClusterSchema() common.ConfigParams {
params.MustRegister(diskhdfs, "Endpoint", &common.Parameter{
LabelZH: "HDFS端点URI",
LabelEN: "Endpoint",
Default: "hdfs://",
Regexp: "^hdfs://.+/$",
})

Expand Down
150 changes: 15 additions & 135 deletions docs/ckman_v2.0.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,141 +127,17 @@ make frontend

# 新版介绍

`ckman-v2.0.0`版本是一个全新的版本,在原来`1.x`版本的基础上,做了大部分的代码重构,引入了一些非常令人激动的新功能,也加强了安全方面的管控,用户的体验将会越来越好。当然肯定也还有未能完善的部分,希望广大用户在使用过程中提出宝贵的意见,我们也将汲取有用的部分,回馈到产品中,使`ckman`更加完善。
## 界面重新设计

## 功能更强大
由于创建集群时需要输入的参数越来越多,我们重新设计了创建集群的前端界面,采用了动态schema的方式,由后端控制生成,更加灵活:

### 支持逻辑集群
![image-20210813103304990](img/image-20210813103304990.png)

逻辑集群,是相对于物理集群而言的。我们通常所说的,通过`ckman`去部署创建的,都是物理集群,而逻辑集群可以将多个物理集群组合在一起,形成一个逻辑集群。
## 支持存储策略

逻辑集群存在的意义,可以解决以下问题
支持存储策略。目前支持`local``hdfs``s3`三种类型的存储策略的配置,创建集群时填写相关信息,会在`config.d`目录下自动生成`storage.xml`。如下所示

- 分担`zookeeper`集群压力
- 解决多数据中心查询问题
- 节约流量成本

创建逻辑集群,只需要在创建物理集群时指定逻辑集群的名字即可:

![image-20210725092010038](img/image-20210725092010038.png)

逻辑集群创建完毕,会在集群列表中显示出来:

![image-20210725092256387](img/image-20210725092256387.png)

我们还提供了用来在逻辑集群创建分布式表的`API``CreateDistTableOnLogic`, 具体使用细节可在接口规范中查看。

### 支持滚动升级

传统的`ClickHouse`集群升级方案是全量升级,即全停 -> 上传`rpm`包 -> 升级`rpm`包 -> 修改配置信息 -> 全部启动 -> 检查是否启动成功。

这样的好处是保证了集群内所有节点版本绝对一致,但也有不好的地方,就是要全停服务,对于某些服务不能停的业务来说,这种方式并不太适合。

所以需要有类似滚动升级的方式。

滚动升级就是一台一台的升级,第一个节点成功了才会去继续升级第二台。这样可以保证集群一直处于运行状态,保证业务的连续性。

但滚动升级带来的问题是,有可能升级到一半突然失败,这样就会导致一半新一半旧,而且升级这种操作又不太会支持回滚,因此,只能重新升级。但是重新升级(或者降级回原来的),对于已经成功升级了的服务,其实是没必要再重新安装一次的。因此,如果当前节点的版本和需要升级的版本一致,应该跳过。

因此,新版`ckman`提供可选性,用户可以选择全量升级还是滚动升级,对于相同的版本,可以选择跳过和不跳过。

![image-20210725093311720](img/image-20210725093311720.png)

## 数据更安全

### 支持https

开启`https`,只需要将配置文件中的`https`选项改为`true`,并将证书文件路径指定到`certfile``keyfile`下即可。

```yaml
server:
id: 1
port: 8808
https: true
certfile: /etc/ckman/conf/server.crt
keyfile: /etc/ckman/conf/server.key
pprof: true
session_timeout: 3600
#public_key:
```

如果不指定证书路径,默认使用`ckman`工作目录`conf`下的`server.crt``server.key``ckman`提前准备了一个自签名的证书供用户使用,如果用户有自己的证书,可以进行替换。

### 支持使用公钥部署、升级

在部署、升级、以及对节点的运维动作的过程中,如果用户配置了免密公钥,则可以在部署集群的时候勾选是用公钥的选项,这样就会不保存`ssh`密码,每次默认以公钥的方式免密登录节点。

![image-20210725100004422](img/image-20210725100004422.png)

如果用户选择使用`ssh`密码来进行登录,也可以选择保存密码和不保存密码。

保存密码的话,会在本地集群配置中将密码保存下来,每次进行集群的启停、升级等动作会使用保存下来的密码进行操作;如果选择不保存密码,则每次进行上述运维动作时都需要手动去输入密码。极大程度地减少了密码泄露出去的可能性。

![image-20210725100135428](img/image-20210725100135428.png)

### 支持使用普通用户部署、升级

`1.x`版本中,对集群的部署、升级等运维动作需要`root`用户才可以进行操作,原因是安装`rpm`包和`systemctl`服务管理,包括修改`clickhouse`配置文件,都需要`root`用户才能去操作。

`v2.0.0`版本开始支持使用普通用户去完成这些运维动作,当然前提是这些普通用户需要有`sudo`权限。

### 集群配置持久化到硬盘时密码加密

`1.x`版本在保存集群配置文件时,不论是集群的密码,还是`ssh`的密码,都是以明文的方式持久化在硬盘的,这样显然是一个极大的安全隐患,因此,在`v2.0.0`版本,对持久化到硬盘的密码,进行了`DES`加密,以密文的方式进行保存。

```json
"user": "ck",
"password": "210a3aea9e738af9",
"cluster": "abc",
"zkPort": 2181,
"zkStatusPort": 8080,
"isReplica": true,
"version": "20.8.9.6",
"sshUser": "root",
"sshPassword": "815823a203f10827167ca76c558b94d2",
"sshPasswdFlag": 0,
"sshPort": 22,
```

## 界面更美观

### 增加单节点上线、下线功能

可从界面对单个节点进行上线和下线。

![image-20210725101312639](img/image-20210725101312639.png)

### 可通过表管理页面查看建表语句

可从表监控选项中查看建表语句,另新增了读写状态监控,并可通过该页面直接删除表。

![image-20210725101417482](img/image-20210725101417482.png)

建表语句查看页面如下所示:

![image-20210725101536096](img/image-20210725101536096.png)

### 慢SQL查询更个性化

`SQL`查询页面可以根据`SQL`开始时间进行排序,且可以通过配置时间段和查询条数进行筛选。

![image-20210725101729655](img/image-20210725101729655.png)

## 升级v2.0.0注意事项

### 集群配置格式发生变化

`ckman`的集群配置文件为`clusters.json`,该文件在`v2.0.0`版本格式上做了一些改动,并使用"`FORMAT_VERSION`"字段进行标识,如果该字段值为`2`,则表示是`v2.0.0`支持的格式。

如果你是从`1.x`直接升级到`2.0.0`,该文件会被识别且自动转换为`2.0.0`的配置文件格式。但是新版的配置格式在`1.x`版本不能被识别。

因此,如果你使用的是`ckman`集群,且集群中有部分`ckman`节点使用`1.x`,部分节点使用`2.0.0`,则会导致`1.x``ckman`节点解析配置文件出错,需要将其全部升级到`2.0.0`才能正常使用。

### 密码做了加密处理

由于`2.0.0`版本的集群配置文件中对密码做了加密,因此在读取配置文件后会将密文的密码进行解密,如果解密失败,仍然会使用原来的密码作为明文,这样就保证了旧版配置文件不需要做任何修改即可使用。

但是如果恰巧原来的明文密码可以解密(这种概率极低),那么就会导致后续的运维动作密码不正确,因此这一点需要注意。
![image-20210813103450154](img/image-20210813103450154.png)

# 架构设计

Expand Down Expand Up @@ -431,13 +307,17 @@ nacos:
> - `Cluster Password`: `ck`的密码
> - `SSH Username`: `ssh`登录`ck`节点的用户名
> - 该用户必须具有`root`权限或是`sudo`权限,可以是普通用户,只需要该普通用户具有`sudo`权限即可。
> - `Public Key`: 是否使用公钥
> - 如果`ckman`服务主机与`ClickHouse`各节点之间配置了公钥免密登录,该项可以使用
> - `AuthenticateType`: 认证方式
> - 支持三种认证方式:` 0-密码认证(保存密码) `, 1-密`码认证(不保存密码)``2-公钥认证`
> - 默认方式为公钥认证,公钥认证需要配置免密登录
> - 如果认证方式为密码认证(不保存密码),则后续运维操作如增删节点、启停集群以及升级等,都需要手动输入密码
> - `SSH Password`: `ssh`登录`ck`节点的密码
> - `Save Password`: 是否保存密码
> - 保存密码的话,会在本地集群配置中将密码保存下来,每次进行集群的启停、升级等动作会使用保存下来的密码进行操作
> - 如果选择不保存密码,则每次进行上述运维动作时都需要手动去输入密码。
> - `SSH Port`: `ssh`端口,默认是`22`
> - `Storage`: 存储策略
> - `disks`
> - 支持`local``hdfs``s3`三种磁盘,`clickhouse`内置了名为`default`的磁盘策略
> - `policies`
> - 策略的磁盘必须要在上述`disks`中存在。
通过此种方式安装部署成功的集群的`mode`就是`deploy`,可以对其进行删、改、`rebalance`、启停、升级以及节点的增删等操作。

Expand Down
Loading

0 comments on commit 4ba774e

Please sign in to comment.