Linux软件安装 —— ClickHouse集群安装(集成Zookeeper)+ 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

相关推荐
z_lices2 小时前
倪仁勇:K线语言破译者,技术分析体系的建构者与传播者
大数据·人工智能
Howrun7772 小时前
Linux网络编程_常见API
linux·运维·网络
l1t2 小时前
修改德哥的PostgreSQL求解数独SQL在cedardb上运行
数据库·sql·postgresql·cedardb
想做一只开心的菜鸡2 小时前
DARTS#01 | Tournament Sort算法 | MySQL深度翻页优化技巧 | 论文ByteSlice Review
数据库·mysql·算法
STCNXPARM2 小时前
Linux-ARM-Bootloader概述
linux·运维·arm开发·uboot·bootloader
林深现海2 小时前
宇树 Go2 + NaVILA 全栈导航系统详解 (新手入门版)
linux·vscode·yolo·ubuntu·机器人
LUCIFER2 小时前
[驱动进阶——MIPI摄像头驱动(三)]rk3588+OV13855摄像头驱动加载过程详细解析第二部分——DPHY驱动+CSI驱动
linux·驱动开发
2501_948120152 小时前
基于大数据的交通拥堵预测与优化研究
大数据
小尧嵌入式2 小时前
【Linux开发四】Linux中概念|MobaXterm和Filezilla软件使用|线程|互斥锁|读写锁
linux·运维·服务器·开发语言·数据结构