dbpystream webapi: 一次clickhouse数据从系统盘迁至数据盘的尝试
dbpystream是个人部署在阿里云的一个开源项目。
前面介绍了,尽管阿里云站点的变更(从福州节点至上海节点),但在操作,总体上简单方便快捷。
因为个人的原因,项目当初还遗留了一个问题,就是最初在部署dbpystream服务端时,clickhouse数据库直接部署在系统盘了。以下可以参考:
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.5G 1.1M 1.5G 1% /run
/dev/vda3 492G 380G 93G 81% /
tmpfs 7.4G 0 7.4G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vda2 197M 6.1M 191M 4% /boot/efi
tmpfs 1.5G 4.0K 1.5G 1% /run/user/1000
上面可以看出,clickhouse的数据堆在系统盘上,未来扩展的空间有限。
因为当初clickhouse压缩率比较高,短期省钱省事,就没有加数据盘。随着空间越来越小,把clickhouse的数据迁至专门数据盘上,增加可扩展性,就变成了一项紧迫的任务。
当然,在加载数据盘的前提是,必须先行购买数据云盘。下面,就是如何把数据盘挂载上,以及把clickhouse的数据从现有的系统盘迁移到数据盘上的事情了。
一、加载新的数据盘
假定,我们这次计划把数据盘挂载在/home/data下:
1、进行一次性挂载
以下拟把数据盘挂载在/home/data目录上,下同。
(1)查看相关信息,找到相应的数据盘:
数据盘一般是/dev/vdb或/dev/xvdb;这里假定是前者:/dev/vdb。具体操作可以有:
查看系统盘和数据盘信息:
sudo fdisk -l
查看系统盘和数据盘挂载的信息:
df -h
查看系统盘和数据盘信息:
lsblk
(2) 确认根据需要,是否要对/dev/vdb是否要进行分区,也可以不进行分区。
2.1 若需要分区,操作如下:
fdisk /dev/vdb依次输入 n,p,1, 回车,回车, wq
2.2 若不需要分区,操作如下:
假定数据盘是/dev/vdb(即不分区的情况,下同;分区往往可能是/dev/vdb1)的情况,执行格式化:
mkfs.ext4 /dev/vdb
(3)创建确定数据盘挂载的地址
一般比如是/mnt/data;/home/data;/data等;这个可以根据自身的需要来设定。
sudo mkdir /home/data
(4)对/home/data进行数据盘挂载:
sudo mount /dev/vdb /home/data
查看一下挂载是否成功:
df -h
2、进行自动挂载配置:
上面只是进行了把一次性挂载的配置。但是一旦重新启动,这些配置就失效了,因此需要考虑,把上面的一次性转化为持久性的配置。因此,这步一定不能省。
(1)查找挂载好的数据盘的UUID信息:
通过下面的操作,我们可以获得UUID信息是:45e31162-c32a-4654-92ad-92167126ade1,这个信息会根据个人各自的系统有所不同。
sudo lsblk -f
可以看到,在/dev/vdb/目录下有相关信息:

(2)将挂载信息写入/etc/fstab:
第一步:进入/etc/fstab文件:
sudo vim /etc/fstab
vim常用的操作有:
- [Esc] 键退出插入模式
- [i] 键进入插入模式
- [:wq!] 退出保存
第二步:修改配置文件(挂载点为/home/data):
UUID=45e31162-c32a-4654-92ad-92167126ade1 /home/data ext4 defaults 0 1
保存退出,即可。
(3)自动挂载验证环节。
提醒:这步不能省,你必须对挂载操作进行验证。
第一、重启系统(这个环节是必要的)
sudo reboot
第二、 查看挂载是否成功:
df -h
二、clickhouse的数据迁移
提醒一下:在数据迁移前,务必请做好数据备份。
可以看出,clickhouse的数据在系统盘上已经占了80%,尽管按目前的进度,支撑1年没有问题,但是到了必须要进行调整的时侯了。
因为我们已经购买了新的数据盘,并挂载在/home/data下。那么,我们原来clickhouse原来的数据存放在地址进行变更即可。即目标如下:
/var/lib/clickhouse ->/home/data/clickhouse
在linux平台下,ClickHouse的配置文件通常位于/etc/clickhouse-server/目录下,ClickHouse的数据默认存储在/var/lib/clickhouse/。
在操作前,可以看看clickhouse的原有信息:
df -h /var/lib/clickhouse
在完成相关了解后,主要具体操作如下:
1、停止当前的clickhouse服务
sudo systemctl stop clickhouse-server
2、进行clickhouse数据迁移
针对[原target:/var/lib/clickhouse/]->[/home/data/clickhouse],进行以下操作:
mv /var/lib/clickhouse/* /home/data/clickhouse
这个数据迁移需要一定的时间,几十分钟到几个小时不等,都可能,甚至更长。但你可以新开一个终端来查看数据的迁移情况。
通过df -h查看,可以看到:
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.5G 1.1M 1.5G 1% /run
/dev/vda3 492G 16G 456G 4% /
tmpfs 7.4G 0 7.4G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vda2 197M 6.1M 191M 4% /boot/efi
/dev/vdb 984G 365G 569G 40% /home/data
tmpfs 1.5G 4.0K 1.5G 1% /run/user/1000
可以看到,/dev/vda3上面的数据已经大大释放了;同步,/dev/vdb上的空间已经被同步占用了。
3、增加新目录权限:
chown -R clickhouse:clickhouse /home/data/clickhouse
注意,上面不要写错了,其中“:”写成了“.”。
4、对新目录文件夹建立软链接
通软链接,把/var/lib/clickhouse指向/home/data/clickhouse,系统能自动寻址到新的地方。
ln -s /home/data/clickhouse /var/lib/
为什么不是/var/lib/clickhouse?已经没有clickhouse目录了。
5、检查新建立的软键接
ls -l /var/lib/
6、重启clickhouse服务
sudo systemctl restart clickhouse-server
7、对相关的服务进行验证:包括客户端验证和服务端验证。
重启服务端的程序后,经过客户端调用和后台数据读写的验证,若服务一切正常,表明迁移工作完成。
