clickhouse模拟主从部署(1分片2副本使用单独分片配置文件metrika.xml)
环境
OS:Centos 7
clickhouse:24.8.11.5
拓扑结构:3分片单副本
节点ip 角色
192.168.1.102 副本1
192.168.1.105 副本2, zookeeper
1.安装zookeeper(单机)
或是参考如下安装部署连接:
https://www.cnblogs.com/hxlasky/p/18683624
1.准备安装介质
介质下载地址:
https://packages.clickhouse.com/rpm/stable/
或是
https://packagecloud.io/Altinity/clickhouse
我这里下载的是如下三个包
clickhouse-client-24.8.11.5.x86_64.rpm
clickhouse-common-static-24.8.11.5.x86_64.rpm
clickhouse-server-24.8.11.5.x86_64.rpm
[root@node1 soft]# mkdir /soft/clickhouse
[root@node1 soft]# cd /soft/clickhouse
wget https://packages.clickhouse.com/rpm/stable/clickhouse-client-24.8.11.5.x86_64.rpm
wget https://packages.clickhouse.com/rpm/stable/clickhouse-common-static-24.8.11.5.x86_64.rpm
wget https://packages.clickhouse.com/rpm/stable/clickhouse-server-24.8.11.5.x86_64.rpm
2.安装
[root@localhost clickhouse]#rpm -ivh clickhouse-common-static-24.8.11.5.x86_64.rpm
[root@localhost clickhouse]#rpm -ivh clickhouse-client-24.8.11.5.x86_64.rpm
[root@localhost clickhouse]#rpm -ivh clickhouse-server-24.8.11.5.x86_64.rpm
3.修改数据目录和日志目录
创建数据目录和日志目录
[root@localhost ~]# mkdir -p /home/middle/clickhouse/data
[root@localhost ~]# mkdir -p /home/middle/clickhouse/log
[root@localhost ~]# chown -R clickhouse:clickhouse /home/middle/clickhouse/
修改数据目录
vi /etc/clickhouse-server/config.xml
原来的
<!-- Path to data directory, with trailing slash. -->
<path>/var/lib/clickhouse/</path>
修改为
<!-- Path to data directory, with trailing slash. -->
<path>/home/middle/clickhouse/data/</path>
修改日志目录
原来的:
<level>trace</level>
<log>/var/log/clickhouse-server/clickhouse-server.log</log>
<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
修改为:
<level>trace</level>
<log>/home/middle/clickhouse/log/clickhouse-server.log</log>
<errorlog>/home/middle/clickhouse/log/clickhouse-server.err.log</errorlog>
4.配置远程登录
[root@localhost clickhouse]#vi /etc/clickhouse-server/config.xml
把下面2行注释去掉,之前是注释的,现在要开启
原来的:
<!-- Default values - try listen localhost on IPv4 and IPv6. -->
<!--
<listen_host>::1</listen_host>
<listen_host>127.0.0.1</listen_host>
-->
修改为:
<!-- Default values - try listen localhost on IPv4 and IPv6. -->
<listen_host>::1</listen_host>
<listen_host>0.0.0.0</listen_host>
5.修改允许删除掉任何表和表分区,将如下两行去掉注释,使其生效
[root@localhost clickhouse]#vi /etc/clickhouse-server/config.xml
原来的:
<!-- <max_table_size_to_drop>0</max_table_size_to_drop> -->
<!-- <max_partition_size_to_drop>0</max_partition_size_to_drop> -->
修改为:
<max_table_size_to_drop>0</max_table_size_to_drop>
<max_partition_size_to_drop>0</max_partition_size_to_drop>
6.拷贝配置文件到另外的实例
scp /etc/clickhouse-server/config.xml root@192.168.1.105:/etc/clickhouse-server/
7.启动clickhouse-server
每个节点都尝试启动
centos 7需要使用systemctl启动
systemctl status clickhouse-server.service
systemctl start clickhouse-server.service
systemctl stop clickhouse-server.service
clickhouse默认使用的是9000端口,注意避免端口冲突:
<tcp_port>9000</tcp_port>
8尝试登录
每个节点都尝试登录,目前是免密登录的
clickhouse-client --host localhost
##########################集群部署##################################
1.修改config.xml配置文件
注释掉默认分片配置(直接修改default栏目段)
先做备份
[root@master clickhouse-client]# cd /etc/clickhouse-server
[root@master clickhouse-server]# ls
config.d config.xml users.d users.xml
[root@master clickhouse-server]# cp config.xml bak20250121_config.xml
找到配置文件的<remote_servers>栏目,修改default里面的配置
注释掉原有的<shard>段落,或是直接删除掉
目的是我们自定义默认分片,创建表的时候直接使用on cluster default
2.拷贝配置文件到另外机器
scp /etc/clickhouse-server/config.xml root@192.168.1.105:/etc/clickhouse-server/
3.修改配置项interserver_http_host(好像不设置也可以)
vi /etc/clickhouse-server/config.xml
192.168.1.102节点
<interserver_http_host>192.168.1.102</interserver_http_host>
192.168.1.105节点
<interserver_http_host>192.168.1.105</interserver_http_host>
4.准备集群配置文件(/etc/clickhouse-server/config.d/metrika.xml)
<yandex>
<remote_servers>
<default>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>192.168.1.102</host>
<port>9000</port>
</replica>
<replica>
<host>192.168.1.105</host>
<port>9000</port>
</replica>
</shard>
</default>
</remote_servers>
<zookeeper>
<node index="1">
<host>192.168.1.105</host>
<port>2181</port>
</node>
</zookeeper>
<macros>
<shard>01</shard>
<replica>192.168.1.102</replica>
</macros>
<networks>
<ip>::/0</ip>
</networks>
<clickhouse_compression>
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>lz4</method>
</case>
</clickhouse_compression>
</yandex>
说明:
A.红色部分根据分片实际情况修改
B.我这里分片名称定义为default 当然也可以自己取其他的名称
C.该文件拷贝到另外只修改对应的ip地址,<shard>01</shard>保持不变,因为只有一个分片
5.配置文件拷贝到另外的节点
scp /etc/clickhouse-server/config.d/metrika.xml root@192.168.1.105:/etc/clickhouse-server/config.d/
该配置文件拷贝过去后需要进行修<macros></macros>
分片1:
<macros>
<shard>01</shard>
<replica>192.168.1.102</replica>
</macros>
分片2:
<macros>
<shard>01</shard>
<replica>192.168.1.105</replica>
</macros>
因为只有一个分片,所以 <shard></shard>段落保持不变
6.修改文件权限为clickhouse
chown -R clickhouse:clickhouse /etc/clickhouse-server/config.d
7.重启动每个节点
systemctl restart clickhouse-server.service
8.验证
查询集群信息
[root@master clickhouse-server]# clickhouse-client --host 192.168.1.102 --port=9000
select cluster,shard_num,shard_weight,internal_replication,replica_num,host_name,host_address,port,is_local from system.clusters;
创建数据库
节点1创建数据库
CREATE DATABASE db_test ON CLUSTER default;
这里需要加上ON CLUSTER default,这样每个分片都执行创建库,否则只在本地分片上创建而已
创建副本引擎表(ReplicatedMergeTree)并写入数据
clickhouse-client --host 192.168.1.102 --port=9000 -m
use db_test;
CREATE TABLE tb_rep_test ON CLUSTER default
(
id Int32,
name String,
timestamp DateTime DEFAULT now(),
day date DEFAULT now()
)
engine = ReplicatedMergeTree( '/clickhouse/tables/replicated/tb_rep_test', '{replica}')
partition by day
order by id
settings index_granularity = 8192;
insert into tb_rep_test(id,name) values(1,'name1');
insert into tb_rep_test(id,name) values(2,'name2');
insert into tb_rep_test(id,name) values(3,'name3');
insert into tb_rep_test(id,name) values(4,'name4');
insert into tb_rep_test(id,name) values(5,'name5');
insert into tb_rep_test(id,name) values(6,'name6');
insert into tb_rep_test(id,name) values(7,'name7');
insert into tb_rep_test(id,name) values(8,'name8');
insert into tb_rep_test(id,name) values(9,'name9');
insert into tb_rep_test(id,name) values(10,'name10');
节点1查看查看数据
节点2查看数据
clickhouse-client --host 192.168.1.105 --port=9000 -m
说明:
不同的库,如出现相同的表名称,需要确保如下的路径不能一样
engine = ReplicatedMergeTree( '/clickhouse/tables/replicated/tb_rep_test', '{replica}')
可以在表名路径前面加上库名,如下
CREATE TABLE tb_rep_test01 ON CLUSTER default
(
`id` Int32,
`name` String,
`timestamp` DateTime DEFAULT now(),
`day` date DEFAULT now()
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/replicated/db_hxl_tb_rep_test01', '{replica}')
PARTITION BY day
ORDER BY id
SETTINGS index_granularity = 8192
9.设置default账号的密码
生产加密密码,我这里明文密码是 clickhouse123 对其加密后生成的串如下:
[root@master clickhouse-server]# echo -n clickhouse123 | openssl dgst -sha256
(stdin)= 2cca9d8714615f4132390a3db9296d39ec051b3faff87be7ea5f7fe0e2de14c9
修改配置文件
vi /etc/clickhouse-server/users.xml
在
<users><default></default></users>
加入如下项(红色部分):
<password_sha256_hex>2cca9d8714615f4132390a3db9296d39ec051b3faff87be7ea5f7fe0e2de14c9</password_sha256_hex>
同时注释掉原有的<password> 段落,如下:
同时确保access_management设置为1,旧版本默认是0的
把该节点的users.xml文件拷贝到其他各节点
scp /etc/clickhouse-server/users.xml root@192.168.1.105:/etc/clickhouse-server/
每个节点重启动:
systemctl restart clickhouse-server.service
这个时候就需要密码登录了
clickhouse-client --host 192.168.1.102 --port=9000 --password=clickhouse123
clickhouse-client --host 192.168.1.105 --port=9000 --password=clickhouse123
10.重启集群
systemctl restart clickhouse-server.service
11.模拟节点故障
写入数据
我们这里上2个副本,我们模拟停掉一个副本
停掉192.168.1.105
systemctl stop clickhouse-server.service
另外一个节点可以正常登录
[root@master clickhouse]# clickhouse-client --host 192.168.1.102 --port=9000 --password=clickhouse123
写入数据
insert into tb_rep_test01(id,name) values(11,'name11');
insert into tb_rep_test01(id,name) values(12,'name12');
insert into tb_rep_test01(id,name) values(13,'name13');
insert into tb_rep_test01(id,name) values(14,'name14');
insert into tb_rep_test01(id,name) values(15,'name15');
启动刚才停掉的实例
[root@node1 clickhouse-server]# systemctl start clickhouse-server.service
登录查看数据
clickhouse-client --host 192.168.1.105 --port=9000 --password=clickhouse123
数据同步过来了
加字段
会话会一直请求对方机器
[root@master clickhouse]# systemctl start clickhouse-server.service
死掉的机器启动后发现新增的字段会同步过来了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2024-01-24 db2安装部署
2019-01-24 es安装elasticsearch-sql插件
2019-01-24 elastichd安装部署
2019-01-24 获取从库Seconds_Behind_Master监控主从同步
2019-01-24 采用xtrabackup部署主从同步