启停服务
- FE节点滚动重启步骤
每个FE节点都需要在其部署的服务器上独立进行重启操作
推荐采用滚动重启的方式逐台操作,以减少对集群可用性的影响
1)查询节点角色
SHOW FRONTENDS;
- 备份元数据
强烈建议在操作前备份Master FE的元数据目录(默认是doris-meta)
这是故障恢复的重要保障
2)优先重启 Observer 节点
bin/stop_fe.sh
bin/start_fe.sh --daemon
每次重启一个节点后,都通过 SHOW FRONTENDS命令
确认该节点状态是否恢复为 Alive,并关注集群是否有Master节点
3)然后重启 Follower 节点(非Master)
bin/stop_fe.sh
bin/start_fe.sh --daemon
每次重启一个节点后,都通过 SHOW FRONTENDS命令
确认该节点状态是否恢复为 Alive,并关注集群是否有Master节点
4)最后重启 Master 节点
bin/stop_fe.sh
bin/start_fe.sh --daemon
每次重启一个节点后,都通过 SHOW FRONTENDS命令
确认该节点状态是否恢复为 Alive,并关注集群是否有Master节点
务必遵守 Observer -> Follower (非Master) -> Leader (Master) 的顺序
Doris的FE高可用基于Raft协议,其核心是多数派原则,一个由3个Follower组成的集群,它的多数派是2
要选举出一个新的Leader,必须得到【多数派节点】的同意
要进行元数据写入,也必须保存集群的存活了【多数派节点】
前两次follower重启master一直在线,所以不会触发选举
最后重启Master,将以一个普通Follower的身份加入集群,,基于Raft协议进行民主选举,选举出的新Master很可能不是原来的那个 !
认证
- 用户标识
用户标识由两部分组成:【username 和 host】
host 表示该用户链接来自的 IP, 以 username@'host' 的方式呈现
host 部分可以使用 % 进行模糊匹配。如果不指定 host,默认为 '%',即表示该用户可以从任意 host 连接到 Doris
(另一种表现方式为 username@['domain'],其中 domain 为域名,通过DNS解析本质是也是一组 IP)
用户属性直接附属于 user_name,而不是 user_identity,即 user@'192.%' 和 user@['domain'] 都拥有同一组用户属性
检查现有的 admin 用户的host字段是否为 %
SELECT user, host FROM mysql.user WHERE user = 'admin';
- 密码
Doris 支持 skip_localhost_auth_check=true,开启后本机 localhost 登录时 不检查密码。
所以你可能在本地能用 admin 登录(即使密码错/空密码也能进),但远程就会报错。
如果你忘了 admin 密码,可以在 root 下重置:
SET PASSWORD FOR 'admin'@'%' = PASSWORD('新密码');
- 创建用户
创建一个无密码用户(不指定 host,则等价于 jack@'%')
CREATE USER 'yangyang';
创建一个有密码用户,允许从 '172.10.1.10' 登陆
CREATE USER jack@'172.10.1.10' IDENTIFIED BY '123456';
权限管理 / 鉴权
创建角色
CREATE ROLE role1 COMMENT "this is my first role";
删除角色
drop ROLE role1将指定的权限授予某用户或角色
GRANT <privilege_list>
ON { <priv_level>
| RESOURCE <resource_name>
| WORKLOAD GROUP <workload_group_name>
| COMPUTE GROUP <compute_group_name>
| STORAGE VAULT <storage_vault_name>
}
TO { <user_identity> | ROLE <role_name> }
GRANT GRANT_PRIV ON ..* TO 'yangyang'@'%';
GRANT SELECT_PRIV, LOAD_PRIV ON ..* TO ROLE 'developers';
GRANT GRANT_PRIV ON ..* TO ROLE 'developers';
撤销权限
REVOKE GRANT_PRIV ON ..* FROM ROLE 'developers';
REVOKE SELECT_PRIV, LOAD_PRIV ON ..* FROM ROLE 'developers';
1)<privilege_list>
需要赋予的权限列表,以逗号分隔,当前支持如下权限:
NODE_PRIV:集群节点操作权限,包括节点上下线等操作
ADMIN_PRIV:除 NODE_PRIV 以外的所有权限
GRANT_PRIV:操作权限的权限,包括创建删除用户、角色,授权和撤权,设置密码等
SELECT_PRIV:对指定的库或表的读取权限
LOAD_PRIV:对指定的库或表的【导入权限】
ALTER_PRIV:对指定的库或表的 schema 变更权限
CREATE_PRIV:对指定的库或表的创建权限
DROP_PRIV:对指定的库或表的删除权限
USAGE_PRIV:对指定【资源、Workload Group、Compute Group】 的使用权限
SHOW_VIEW_PRIV:查看 view 创建语句的权限
2)<priv_level>
支持以下四种形式:
..:权限可以应用于所有 catalog 及其中的所有库表
catalog_name..:权限可以应用于指定 catalog 中的所有库表
catalog_name.db.:权限可以应用于指定库下的所有表
catalog_name.db.tbl:权限可以应用于指定库下的指定表
3)<resource_name>
指定 resource 名,支持 % 和 * 匹配所有资源,不支持通配符,比如 res*
4)<workload_group_name>
指定 workload group 名,支持 % 和 * 匹配所有 workload group,不支持通配符
5)<compute_group_name>
指定 compute group 名称,支持 % 和 * 匹配所有 compute group,不支持通配符
6)<storage_vault_name>
指定 storage vault 名称,支持 % 和 * 匹配所有 storage vault,不支持通配符
将指定角色授予某用户
GRANT <role_list> TO <user_identity>查看权限
查看所有用户权限信息
SHOW ALL GRANTS;
查看指定 user 的权限
SHOW GRANTS FOR jack@'%';
查看当前用户的权限
SHOW GRANTS;
查看角色的权限
通过查看角色信息间接查看
SHOW ROLES;
- root和admin账号
root账号属于operator角色通常拥有Node_priv+Admin_priv(也就是集群级别的节点变更与管理员权限),而admin角色拥有Admin_priv(所有管理权限,但不一定包含节点变更权限)。也就是说 root账号权限更高**(包含节点操作权限)