ClickHouse 管理与运维(用户配置&权限配置&备份)

分析用户配置文件结构

打开配置文件 /etc/clickhouse-server/users.xml

<?xml version="1.0"?>
<yandex>
    <profiles><!-- 类似于角色的作用,支持继承-->
        <default><!-- 自定义名称,默认角色-->
            <max_memory_usage>10000000000</max_memory_usage>
            <load_balancing>random</load_balancing>
        </default>

        <test1> <!-- 自定义名称,默认角色-->
			<allow_experimental_live_view>1</allow_experimental_live_view>
			<distributed_product_mode>allow</distributed_product_mode>
		</test1>
    </profiles>
    
    <users><!-- 定义用户信息 -->

        <default>
            <password></password>
            <networks incl="networks" replace="replace">
				<ip>::/0</ip>
			</networks>
            <profile>default</profile>
            <quota>default</quota>
        </default>
		
		<user_demo>
			<networks incl="networks" replace="replace">
				<ip>::/0</ip>
			</networks>
			<password>123</password>
			<profile>default</profile>
            <quota>default</quota>
		</user_demo>

        <root>
            <networks incl="networks" replace="replace">
				<ip>::/0</ip>
			</networks>
			<password_sha256_hex>4813494d137e1631bba301d5acab6e7bb7aa74ce1185d456565ef51d737677b2</password_sha256_hex>
			<profile>default</profile>
            <quota>default</quota>
		</root>

    </users>

    <quotas> <!-- 配置熔断信息 -->
        <default>
            <interval>
                <duration>3600</duration>
                <errors>0</errors>
                <result_rows>0</result_rows>
                <read_rows>0</read_rows>
                <execution_time>0</execution_time>
            </interval>
        </default>
    </quotas>
</yandex>

用户创建

找到 users 标签, profile是用户所用的profile配置,直接引用相应的名称即可。quota是设置该用户能使用的资源限额,可以理解为一种熔断机制。ip是限制用户登录的ip地址,也可以用 host 标签

如下图所示

  • default 是默认用户,没有配置密码,即不需要填写用户名和密码就可以连接ck
  • user_demo 是使用的明文密码
  • root 使用的是 SHA256 加密
#生成 SHA256 加密字符串,root 是你要加密的字符串
echo -n root | openssl dgst -sha256
# 使用用户名密码登录 ck
clickhouse-client -n root --password root;
clickhouse-client -n user_demo --password 123;

角色权限

networks

  1. 使用 ip 标签来限制客户端登录的 ip 地址
<ip>127.0.0.1</ip>
  1. 使用 host 标签来限制客户端登录的 host 名称
<host>xxx.xxx.com</host>
  1. 正则匹配 host 标签
<host>正则匹配内容</host>

allow_databases,allow_dictionaries

配置用户访问数据库和字典的权限

<allow_databases>
	<database>xxx</database>
	<database>xxx2</database>
</allow_databases>
<allow_dictionaries>
	<dictionariy>xxx</dictionariy>
</alow_dictionaries>

查询权限

  • 读权限 select, exists, show, describe
  • 写权限 insert, optimize
  • 设置权限 set
  • DDL权限 create, drop, alter, rename, attach, detach, truncate
  • 其他权限 kill, use 此类权限任何用户都拥有

readonly 设置读权限,写权限,设置权限

  • 0:不进行任何限制(默认值)
  • 1:只拥有读权限
  • 2:拥有读权限和设置权限

allow_ddl 设置 ddl 权限

  • 0:不允许 DDL 查询
  • 1: 允许 DDL 查询(默认值)

测试:新增两个角色 role1 和 role2

<profiles>
	...
	<role1> <!-- 只有读权限 -->
		<readonly>1</readonly>
		<allow_ddl>0</allow_ddl>
	</role1>
	<role2> <!-- 有读权限和设置参数权限 -->
		<readonly>2</readonly>
		<allow_ddl>0</allow_ddl>
	</role2>
</profiles>

databases

数据行级权限,可以通过条件进行过滤

<role1>
	...
	<databases>
		<default><!--默认数据库-->
			<test_row_level><!--表名称-->
				<filter>id < 10</filter>
			</test_row_level>
			<!--支持组合条件 <test_query_all>
			<filter>id <= 100 or repo >= 100</filter>
			</test_query_all> -->
		</default>
		</databases>
</role1>

熔断机制

当使用的资源数量达到阈值,那么正在进行的操作就会中断

根据时间周期的累计用量熔断

<quotas>
	<default> <!-- 自定义名称 -->
		<interval>
			<duration>3600</duration><!-- 时间周期 单位:秒 -->
			<queries>0</queries>
			<errors>0</errors>
			<result_rows>0</result_rows>
			<read_rows>0</read_rows>
			<execution_time>0</execution_time>
		</interval>
	</default>
</quotas>
  • default: 自定义名称,全局唯一,类似于id
  • duration:表示累积的时间周期,单位秒
  • queries:周期内允许执行的查询次数,0表示不限制
  • errors:周期内允许发生的异常次数,0表示不限制
  • result_row:表示周期内允许查询返回的结果行数,0表示不限制
  • read_rows:表示周期内在分布式查询中,允许远端节点读取的数据行数,0表示不限制
  • execution_time:表示周期内允许执行的查询时间,单位是秒,0表示不限制

数据备份

导出文件备份

适用于数据体量较小

  • 导出
clickhouse-client --query="SELECT * FROM table_name" > /chbase/table_name.tsv
  • 将备份数据导入
cat /chbase/table_name.tsv | clickhouse-client --query "INSERT INTO table_name FORMAT TSV"

优势:

  • 利用select查询筛选列,按需备份

快照表备份

就是一张普通表,按照一定的频率备份业务表数据,然后使用 INSERT INTO SELECT 插入数据

CREATE TABLE table_backup_01_01 as table_backup;
INSERT INTO TABLE table_backup_01_01 SELECT * FROM table_backup;

按分区备份

  1. 使用 FREEZE 备份
ALTER TABLE tb_name FREEZE PARTITION xxxx
  1. 使用 FETCH 备份
    只支持 ReplicatedMergeTreee
ALTER TABLE tb_name FETCH PARTITION xxx FROM zk_path

具体备份操作可以查看
ClickHouse 备份与恢复 -万能修实验室

posted @ 2021-04-27 13:31  正在路上的兔子  阅读(1039)  评论(0编辑  收藏  举报