一、服务器
三台服务器,openEuler系统,都是100g系统,1t数据。
二、linux挂载数据盘
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 100G 0 disk # 这是100G系统盘(用户说的系统盘)
├─vda1 252:1 0 512M 0 part /boot/efi
├─vda2 252:2 0 1G 0 part /boot
└─vda3 252:3 0 98.5G 0 part
├─rootvg-root 253:0 0 30G 0 lvm /
├─rootvg-var 253:1 0 10G 0 lvm /var
# (其他逻辑卷省略)
vdb 252:16 0 1.0T 0 disk # 这就是你要找的1T数据盘!
1、第一步:给 1T 盘(vdb)分区(仅需执行 1 次)
目的是给 vdb 划分一个完整的分区(用整个 1T 空间),命令如下:
# 执行分区命令,操作vdb盘
fdisk /dev/vdb
进入 fdisk 交互模式后,按以下步骤输入指令(输入后按回车):
n→ 新建分区(create a new partition);- 连续按 3 次回车 → 选择默认选项(分区类型:primary,分区编号:1,起始扇区:默认),直接用满整个 1T 空间;
w→ 保存分区表并退出(write table to disk and exit)。
执行完后,用 lsblk 验证,会看到 vdb 下面多了一个分区 vdb1(比如 vdb1 253:17 0 1T 0 part),说明分区成功。
2、第二步:格式化分区(vdb1)(仅需执行 1 次)
分区后需要格式化才能使用,推荐用 xfs 格式(ClickHouse 兼容好,性能稳定),命令:
# 格式化vdb1为xfs格式(注意:此命令会清空分区数据,当前是空盘,放心执行)
mkfs.xfs /dev/vdb1
等待几秒,出现类似 “meta-data=/dev/vdb1 isize=512 agcount=4, agsize=67108864 blks” 的输出,说明格式化成功。
3、第三步:创建挂载点 + 挂载磁盘(立即生效)
目的是把格式化后的 vdb1 挂载到一个目录,让系统和 ClickHouse 能访问,建议挂载到 /data(专门存数据的目录):
# 1. 创建挂载点目录(如果不存在)
mkdir -p /data
# 2. 挂载vdb1到/data目录
mount /dev/vdb1 /data
验证是否挂载成功:执行 df -h,会看到 /dev/vdb1 对应的挂载点是 /data,容量为 1T,说明挂载成功。
4、第四步:设置开机自动挂载(避免重启后失效)
当前挂载是临时的,服务器重启后会失效,需要写入 /etc/fstab 文件:
-
先获取
vdb1的 UUID(唯一标识,比设备名更稳定):
blkid /dev/vdb1
-
输出示例:
/dev/vdb1: UUID="abc123-def4-5678-90gh-ijklmnopqrst" TYPE="xfs",复制里面的UUID字符串(不含引号)。 -
编辑
/etc/fstab文件,添加自动挂载配置:
vi /etc/fstab
在文件末尾添加一行(把下面的 UUID 替换成你实际复制的,其他不变):
UUID=abc123-def4-5678-90gh-ijklmnopqrst /data xfs defaults 0 0
-
保存退出(vi 编辑器按
ESC,输入:wq回车)。 -
验证自动挂载配置是否正确(避免写错导致开机故障):
# 测试挂载所有fstab中的配置(无报错即正常)
mount -a
三、安装Clickhouse
安装的是23.3.10.5版本,分别上传到三台服务器,然后分别进行安装,但是安装可以参考。
安装过程中,密码要注意需要完全一致,在文档中准备好复制粘贴,别搞错了,最后组不成集群。
cd /tmp/clickhouse
sudo rpm -ivh clickhouse-common-static-23.3.10.5.aarch64.rpm
sudo rpm -ivh clickhouse-server-23.3.10.5.aarch64.rpm
sudo rpm -ivh clickhouse-client-23.3.10.5.aarch64.rpm
安装完之后,可以运行,查看状态、验证密码,不需要嫌麻烦,三台都要验证。
# 启动服务
sudo systemctl start clickhouse-server
# 查看服务状态(确保是 active (running))
sudo systemctl status clickhouse-server
# 用客户端连接(问我们要密码就输入)
clickhouse-client
# 查看版本(确认安装成功)
SELECT version();
需要注意日志级别,还是config.xml,最上面就是日志的配置,自己行考虑,如果配置的颗粒度太细,非常占地方,可以考虑error级别啥的日志。
四、修改数据存储路径
首先我们要停止服务,三台都要操作。
systemctl stop clickhouse-server
systemctl status clickhouse-server
准备新的数据盘目录,假设新数据盘挂载在 /data/(需确保磁盘已挂载、权限正确),创建目标目录:
# 创建新目录(自定义名称,比如clickhouse_data)
mkdir -p /data/clickhouse
# 赋予clickhouse用户权限(关键!否则启动失败)
chown -R clickhouse:clickhouse /data/clickhouse
chmod -R 755 /data/clickhouse
迁移原有数据到新目录,将默认目录 /var/lib/clickhouse/ 下的所有文件完整移动到新目录:
# 移动数据(mv比cp快,且保留权限;如果数据量大,可先用cp验证再删原目录)
mv /var/lib/clickhouse/* /data/clickhouse/
# 验证移动结果(新目录应有data、metadata、tmp等子目录)
ls /data/clickhouse/
ClickHouse 的存储路径主要在 /etc/clickhouse-server/config.xml 中定义,需修改以下关键参数:
这个是最主要的。
<path>/data/clickhouse/</path>
修改之后重新启动
systemctl start clickhouse-server
# 查看启动状态
systemctl status clickhouse-server
五、修改配置组成集群
三台服务器都都要配置,都是修改/etc/clickhouse-server/config.xml,(<macros><shard>1</shard><replica>replica_1</replica></macros>)这个三台服务器不能一样。
keeper_server、zookeeper三个节点都要一样。
<macros><shard>1</shard><replica>replica_1</replica></macros>
<!-- ClickHouse Keeper配置(节点1:server_id=1) -->
<keeper_server>
<tcp_port>9181</tcp_port>
<server_id>1</server_id> <!-- 节点1=1,节点2=2,节点3=3 -->
<log_storage_path>/data/clickhouse/keeper/log</log_storage_path>
<snapshot_storage_path>/data/clickhouse/keeper/snapshot</snapshot_storage_path>
<coordination_settings>
<operation_timeout_ms>10000</operation_timeout_ms>
<session_timeout_ms>30000</session_timeout_ms>
</coordination_settings>
<raft_configuration>
<server><id>1</id><hostname>10.36.39.123</hostname><port>9182</port></server>
<server><id>2</id><hostname>10.36.39.124</hostname><port>9182</port></server>
<server><id>3</id><hostname>10.36.39.125</hostname><port>9182</port></server>
</raft_configuration>
</keeper_server>
<!-- 连接Keeper的客户端配置 -->
<zookeeper>
<node><host>10.36.39.123</host><port>9181</port></node>
<node><host>10.36.39.124</host><port>9181</port></node>
<node><host>10.36.39.125</host><port>9181</port></node>
</zookeeper>
然后还是/etc/clickhouse-server/config.xml文件,找到remote_servers,好像在700多行,增加你自己集群的配置。
<my_clickhouse_cluster>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>10.36.39.123</host>
<port>9000</port>
<user>default</user>
<password_sha256_hex>f3efbde1c50789f7f92099ff9ae15bc8c6b12562e04b5545836310edc42e8b31</password_sha256_hex>
<!--<password><![CDATA[9opdAidmi&35*]]></password>-->
</replica>
<replica>
<host>10.36.39.124</host>
<port>9000</port>
<user>default</user>
<password_sha256_hex>f3efbde1c50789f7f92099ff9ae15bc8c6b12562e04b5545836310edc42e8b31</password_sha256_hex>
<!--<password><![CDATA[9opdAidmi&35*]]></password>-->
</replica>
<replica>
<host>10.36.39.125</host>
<port>9000</port>
<user>default</user>
<password_sha256_hex>f3efbde1c50789f7f92099ff9ae15bc8c6b12562e04b5545836310edc42e8b31</password_sha256_hex>
<!--<password><![CDATA[9opdAidmi&35*]]></password>-->
</replica>
</shard>
</my_clickhouse_cluster>
修改每个机器的host,增加内容,因为我测试的时候发现是使用机器名互相访问的,也有可能是confgi.xml的ip端口啥的配置的不对,但是配置完就好了。
10.36.39.123 ecs-001
10.36.39.125 ecs-002
10.36.39.124 ecs-003
六、测试方式
1、在任意节点创建一个表(创建表时,必须用 Replicated* 引擎(比如上面的 ReplicatedMergeTree),才能触发副本同步 —— 如果用普通引擎(比如 MergeTree),数据不会自动同步,只会存在你写入的那台节点上。),然后在其他节点show tables,看看是否已经存在了。
2、在任意节点插入几条数据,到其它节点查询是否数据已经同步了。
如果有问题,需要查看日志仔细排查。
七、java连接
url: jdbc:clickhouse://10.36.39.123:8123,10.36.39.124:8123,10.36.39.125:8123/default


3826

被折叠的 条评论
为什么被折叠?



