文章目录
- 一、节点规划
- 二、JDK安装
- 三、Zookeeper安装
- 四、ClickHouse安装
-
-
- 1、软件下载
- 2、前置准备
- 3、安装
- 4、配置clickhouse
- 5、启动clickhouse集群
- 6、集群验证
- 7、密码配置
-
- (1)default用户密码设置
- (2)新建用户
-
- [① 使用文本方式](#① 使用文本方式)
- [② 使用SQL命令(官方推荐)](#② 使用SQL命令(官方推荐))
-
- 五、chproxy安装
- 六、远程连接
一、节点规划
| IP | 主机名 | 软件 |
|---|---|---|
| 192.168.10.102 | node02 | jdk,zookeeper,clickhouse,chproxy |
| 192.168.10.103 | node03 | jdk,zookeeper,clickhouse |
| 192.168.10.104 | node04 | jdk,zookeeper,clickhouse |
二、JDK安装
参考本人此篇文章:Linux软件安装 ------ JDK安装
三、Zookeeper安装
参考本人此篇文章:Linux软件安装 ------ zookeeper集群安装
四、ClickHouse安装
1、软件下载
本文使用:
clickhouse-client-24.12.1.1614 --- ClickHouse 命令行客户端工具;
clickhouse-common-static-24.12.1.1614 --- ClickHouse 核心共享库和二进制文件;
clickhouse-common-static-dbg-24.12.1.1614 --- 调试符号包;
clickhouse-server-24.12.1.1614 --- ClickHouse 服务器主程序。
(1)tar安装包下载
下载地址:https://packages.clickhouse.com/tgz/stable/

(2)rpm安装包下载
下载地址:https://packages.clickhouse.com/rpm/stable/

2、前置准备
(1)CentOS取消打开文件数限制
shell
# 查看限制
ulimit -a
vim /etc/security/limits.conf
# 添加以下内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
vim /etc/security/limits.d/20-nproc.conf
# 添加以下内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
# 重新登录用户再次查看
ulimit -a
第一列:用户; *表示所有用户,正常格式:用户@组,如mysql@mysql;
第二列:soft:软限制; hard:硬限制;
第三列:nofile:打开文件数; nproc:打开进程数;
修改用户配置,退出用户重新登录即可生效

(2)CentOS取消SELINUX
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现
shell
# 查看是否开启
getenforce
# 临时禁用
setenforce 0
# 永久禁用
vim /etc/selinux/config
SELINUX=disabled
注意:内核级别的配置需要重启虚拟机才能生效,但生产环境一般不支持可设置临时配置,本次有效,下次重启时,配置文件生效


3、安装
所有节点都要安装,如果要设密码,所有节点保持一致
(1)tar安装
请按下面顺序安装:
clickhouse-common-static
clickhouse-common-static-dbg
clickhouse-server:需要设置密码,最好从文本粘贴进去,也可以直接回车不设密码
clickhouse-client
shell
tar -zxvf clickhouse-common-static-24.12.1.1614-amd64.tgz
./clickhouse-common-static-24.12.1.1614/install/doinst.sh
tar -zxvf clickhouse-common-static-dbg-24.12.1.1614-amd64.tgz
./clickhouse-common-static-dbg-24.12.1.1614/install/doinst.sh
tar -zxvf clickhouse-server-24.12.1.1614-amd64.tgz
./clickhouse-server-24.12.1.1614/install/doinst.sh
# 需要设密码的话最好从文本粘贴,不需要就直接回车
tar -zxvf clickhouse-client-24.12.1.1614-amd64.tgz
./clickhouse-client-24.12.1.1614/install/doinst.sh
(2)rpm安装
准备好安装包,放入一个空的文件夹,确保文件夹里只有这四个安装包

shell
# 只需执行这个命令,就会自动安装这个文件夹下的rpm包
rpm -ivh *.rpm --nodeps --force

4、配置clickhouse
(1)创建必须的目录
shell
# 创建clickhouse数据,日志目录
mkdir -p /opt/module/clickhouse/data
mkdir -p /opt/module/clickhouse/logs
# 需要clickhouse用户
chown -R clickhouse:clickhouse /opt/module/clickhouse/
(2)配置config.xml
此项内容均在config.xml中操作
shell
vim /etc/clickhouse-server/config.xml
①基本配置
xml
<!-- 日志级别: trace, debug, information, warning, error -->
<level>information</level>
<log>/opt/module/clickhouse/logs/clickhouse-server.log</log>
<errorlog>/opt/module/clickhouse/logs/clickhouse-server.err.log</errorlog>
<!-- 日志文件大小,达到后会轮转 -->
<size>50M</size>
<listen_host>::</listen_host>
<!-- 数据存储路径,修改为自定义目录 -->
<path>/opt/module/clickhouse/data/</path>
<!-- 临时文件路径 -->
<tmp_path>/opt/module/clickhouse/data/tmp/</tmp_path>
<!-- 时区设置 -->
<timezone>Asia/Shanghai</timezone>
②配置集群
xml
<!-- 创建集群 -->
<!-- 原配置文件是有默认集群的(单节点:本节点)直接注释掉即可 -->
<!-- <default>
<shard>
<replica>
<host>localhost</host>
<port>9000</port>
</replica>
</shard>
</default> -->
<!-- 创建一分片三副本的集群-->
<myCluster>
<!-- 分片 -->
<shard>
<!-- 开启节点间复制,数据写入只一个节点,其他两个节点复制它 -->
<internal_replication>true</internal_replication>
<!-- 副本一 -->
<replica>
<host>node02</host>
<port>9000</port>
<!-- 节点间用于通信的账户密码 -->
<user>default</user>
<password>default_123456</password>
</replica>
<!-- 副本二 -->
<replica>
<host>node03</host>
<port>9000</port>
<user>default</user>
<password>default_123456</password>
</replica>
<!-- 副本三 -->
<replica>
<host>node04</host>
<port>9000</port>
<user>default</user>
<password>default_123456</password>
</replica>
</shard>
</myCluster>
③配置节点宏
类似节点ID,仅此项三节点单独配置
xml
<!-- 配置节点宏,内丝节点ID,三节点单独配置 -->
<!-- 一号分片node02节点 -->
<macros>
<shard>01</shard>
<replica>node02</replica>
</macros>
<!-- 一号分片node03节点 -->
<macros>
<shard>01</shard>
<replica>node03</replica>
</macros>
<!-- 一号分片node04节点 -->
<macros>
<shard>01</shard>
<replica>node04</replica>
</macros>
④配置Zookeeper
xml
<zookeeper>
<node>
<host>node02</host>
<port>2181</port>
</node>
<node>
<host>node03</host>
<port>2181</port>
</node>
<node>
<host>node04</host>
<port>2181</port>
</node>
</zookeeper>
5、启动clickhouse集群
(1)启动zookeeper
shell
# 启动命令:在三个节点分别执行
zkServer.sh start
# 查看集群状态
zkServer.sh status
# 停止命令:在三个节点分别执行
zkServer.sh stop
(2)启动clickhouse
三台节点都启动
bash
# 启动服务
systemctl start clickhouse-server
# 查看状态
systemctl status clickhouse-server
# 停止服务
systemctl stop clickhouse-server
# 关闭开机自启动
systemctl disable clickhouse-server
# 进入客户端
clickhouse-client [-m]

6、集群验证
(1)查看集群信息
sql
# 登录客户端
clickhouse-client -m
# 查询集群信息
select
cluster, shard_num, replica_num, host_name, port
from system.clusters;

(2)创建复制表
sql
# 建库
create database test_db on cluster myCluster;
# 查询三个节点
use test_db;
# 建表
# ReplicatedMergeTree第一个参数是Zookeeper路径,第二个是副本名称,集群根据Zookeeper中的信息关联,
# 同一路径下的副本会进行复制数据,所以配置文件中shard一致,replica分别为node02,node03,node04
# shard和replica自动映射配置文件中的配置
create table test on cluster myCluster (
id int,
city varchar(5),
date DATE
) ENGINE = ReplicatedMergeTree('/clickhouse/test_db/test/{shard}', '{replica}')
ORDER BY id
COMMENT '测试表';
# 插入数据
insert into test values (1, '上海', '2020-01-01');
# 查询三个节点
select * FROM test;
# 删除表
# clickhouse删除表是异步进行的,删除完只是查不到,并不代表Zookeeper里面信息也删除了
# 再建表的时候可能出现Zookeeper路径已存在报错,所以加上sync实现同步删除
drop table if exists test on cluster myCluster sync;




7、密码配置
(1)default用户密码设置
此方法集群所有节点得同步修改,所有节点密码一致
在default用户的"密码本"存在/etc/clickhouse-server/users.d路径下为sha256_hex,修改密码的时候只需要把密码生成sha256_hex译码替换再重启clickhouse即可
shell
echo -n "default_123456" | sha256sum | tr -d '-'


(2)新建用户
① 使用文本方式
此方法集群所有节点得同步修改,所有节点密码一致
- 新建用户
xml
# click用户配置
vim /etc/clickhouse-server/users.xml
# 在现有配置不变的情况下,模仿default配置,在<users></users>标签下添加新用户
<admin01>
<!-- 此处不写,配置在单独密码配置中 -->
<password></password>
<networks>
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
<!-- 允许访问管理 -->
<access_management>1</access_management>
<!-- 允许管理命名集合 -->
<named_collection_control>1</named_collection_control>
<!-- 可以查看命名集合的列表和配置 -->
<show_named_collections>1</show_named_collections>
<!-- 可以查看命名集合中的 敏感信息(如密码、密钥)-->
<show_named_collections_secrets>1</show_named_collections_secrets>
<!-- 授予所有权限,此项与上面四个权限相冲突,要么使用上述指定权限,要么只留下面所有权限 -->
<!-- <grants>
<query>GRANT ALL ON *.* TO admin01 WITH GRANT OPTION</query>
</grants> -->
</admin01>
- 创建密码文件
xml
# 编译密码
echo -n "admin01_123456" | sha256sum | tr -d '-'
# 创建密码文件
vim /etc/clickhouse-server/users.d/admin01-password.xml
<clickhouse>
<users>
<admin01>
<password remove='1' />
<password_sha256_hex>3bf185266a5bad05d3f518dc74453151a864275b56c99e7855ab475f087a308c</password_sha256_hex>
</admin01>
</users>
</clickhouse>
# 修改用户组
chown clickhouse:clickhouse admin01-password.xml
- 重启clickhouse并验证
sql
# 重启clickhouse
systemctl restart clickhouse-server
# 使用admin01用户登录
clickhouse-client -m -u admin01
# 查看用户
SELECT
name, id, storage, auth_type, host_ip, host_names, default_roles_all
FROM system.users;
# 查看权限
SELECT
user_name, access_type, database, `table`, column, is_partial_revoke
FROM system.grants
ORDER BY user_name, access_type;

② 使用SQL命令(官方推荐)
因为default用户没有配置赋予用户所有权限的权限,此处用admin01用户创建
shell
clickhouse-client -m -u admin01
- 创建用户:一个节点执行即可
sql
# 删除用户
DROP USER IF EXISTS 'admin02' ON CLUSTER myCluster;
# 创建用户,使用sha256_password加密
CREATE USER 'admin02' ON CLUSTER myCluster IDENTIFIED WITH sha256_password BY 'admin02_123456' HOST ANY;
# 赋予权限
GRANT ALL ON *.* TO 'admin02' ON CLUSTER myCluster WITH GRANT OPTION;

- 查看:所有节点
sql
# 查看用户
SELECT
name, id, storage, auth_type, host_ip, host_names, default_roles_all
FROM system.users;
# 查看权限
SELECT
user_name, access_type, database, `table`, column, is_partial_revoke
FROM system.grants
ORDER BY user_name, access_type;


至此ClickHouse复制集群已经搭建完毕,下面是配置chproxy负载均衡器,没需求的就不用操作
五、chproxy安装
1、软件下载
CHProxy:https://github.com/ContentSquare/chproxy/releases/tag/v1.24.0
本文使用:chproxy_1.24.0_linux_amd64.tar.gz

2、解压
shell
mkdir -p /opt/module/chproxy
tar -zxvf chproxy_1.24.0_linux_amd64.tar.gz -C /opt/module/chproxy/
cd /opt/module/chproxy/
3、配置chproxy
shell
# 创建config.yml增加配置
vim config.yml
# 对外提供服务:chproxy地址
server:
http:
listen_addr: ":8126"
allowed_networks: ["192.168.10.102/0"]
# 对外用户:chproxy用户
users:
- name: "CHProxy"
password: "chproxy_123456"
allowed_networks: ["192.168.10.102/0"]
to_cluster: "CHProxy" # 对应下方配置ClickHouse的集群
to_user: "admin01" # 对应下方配置ClickHouse用户
max_concurrent_queries: 200
max_execution_time: "300s"
max_queue_size: 100
max_queue_time: "300s"
clusters:
- name: "CHProxy" # ClickHouse集群
nodes: [
"192.168.10.102:8123",
"192.168.10.103:8123",
"192.168.10.104:8123"
]
users: # ClickHouse用户
- name: "admin01"
password: "admin01_123456"
4、启动
shell
# 启动
nohup /opt/module/chproxy/chproxy -config=/opt/module/chproxy/config.yml >> /opt/module/chproxy/chproxy.out 2>1 &
# 查看进程
ps -ef | grep chproxy
# 查看端口
telnet 192.168.10.102 8126

六、远程连接
此处使用datagrip连接chproxy
