-
Hash分布表的分布列选取至关重要,需要满足以下原则:列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。在满足第一条原则的情况下尽量不要选取存在常量filter的列。例如,表t1相关的部分查询中出现t1的列zqdh存在常量的约束(例如zqdh=’000001’),那么就应当尽量不用zqdh做分布列。在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量。对于Hash分表策略,如果分布列选择不当,可能导致数据倾斜,查询时出现部分DN的I/O短板,从而影响整体查询性能。因此在采用Hash分表策略之后需对表的数据进行数据倾斜性检查,以确保数据在各个DN上是均匀分布的。可以使用以下SQL检查数据倾斜性select xc_node_id, count(1) from tablename group by xc_node_id order by xc_node_id desc;其中xc_node_id对应DN,一般来说,不同DN的数据量相差5%以上即可视为倾斜,如果相差10%以上就必须要调整分布列。GaussDB支持多分布列特性,可以更好地满足数据分布的均匀性要求。
-
分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储。这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。分区表和普通表相比具有以下优点:改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即可。GaussDB支持的分区表为范围分区表。范围分区表:将数据基于范围映射到每一个分区。这个范围是由创建分区表时指定的分区键决定的。分区键经常采用日期,例如将销售数据按照月份进行分区。
-
高安全GaussDB拥有TOP级的商业数据库安全特性:数据动态脱敏,TDE透明加密,行级访问控制,密态计算。能够满足政企&金融级客户的核心安全诉求。健全的工具与服务化能力GaussDB已经拥有华为云,商用服务化部署能力,同时支持DAS、DRS等生态工具。有效保障用户开发、运维、优化、监控、迁移等日常工作需要。全栈自研GaussDB基于鲲鹏生态,是当前国内唯一能够做到全栈自主可控的国产品牌。同时GaussDB能够基于硬件优势在底层不断进行优化,提升产品综合性能。开源生态GaussDB已经支持开源社区,并提供主备版版本下载。
-
默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。GaussDB部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域项目中都生效。访问GaussDB时,需要先切换至授权区域。根据授权精细程度分为角色和策略。角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于华为云各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对GaussDB服务,管理员能够控制IAM用户仅能对某一类数据库资源进行指定的管理操作。多数细粒度策略以API接口为粒度进行权限拆分。
-
本文作者:墨竹GaussDB模式匹配操作符详细介绍GaussDB数据库目前提供了三种独立的实现模式匹配的方法,分别为LIKE操作符、SIMILAR TO操作符和POSIX-风格的正则表达式 。除了这些基本的操作符外,还有一些函数可用于提取或替换匹配子串并在匹配位置分离一个串。1、likelike应该是我们经常使用的方式,判断字符串是否能匹配上LIKE后的模式字符串,如果匹配,则LIKE表达式返回为真(NOT LIKE表达式返回假),否则返回为假(NOT LIKE表达式返回真)。如果不添加%或_,即全部字符串匹配相当于=;如果要匹配在字符串内的任何位置,该模式必须以%开头和结尾。规则说明%任意字符串的通配符_(匹配)任何单个字符\\ 、%、\_转义字符,查询的内容中需要匹配%、_、\,需要在前面添加\like大小写敏感即区分大小写ilike大小写不敏感即不区分大小写通配符openGauss=# SELECT 'abc' LIKE 'abc' AS RESULT; result -------- t (1 row) openGauss=# SELECT 'abc' LIKE 'a%' AS RESULT; result -------- t (1 row) openGauss=# SELECT 'abc' LIKE '%b%' AS RESULT; result -------- t (1 row) openGauss=# SELECT 'abc' LIKE '_b_' AS RESULT; result -------- t (1 row) openGauss=# SELECT 'abc' LIKE 'c' AS RESULT; result -------- f (1 row) 是否区分大小写openGauss=# select 'abc' like 'A%' as result; result -------- f (1 row) openGauss=# select 'abc' ilike 'A%' as result; result -------- t (1 row) ESCAPE子句指定其他逃逸字符下面案例中的模式字符串’abc$%%’,第一个%由于自定义了逃逸字符$,因此$%作为一个普通字符存在,只需要匹配查询的内容中包含有%;最后一个%则是通配符作用openGauss=# with tmp as (select 'abc%def' as result union all select 'abcdef' as result) openGauss-# select * from tmp where result like 'abc$%%' escape '$'; result --------- abc%def (1 row) 2、SIMILAR TOSIMILAR TO的用法和LIK非常类似,其结果也是根据匹配结果返回真假。另外比较特殊的就是支持使用SQL标准定义的正则表达式理解模式,支持的规则除了%和_之外,也支持下面这些从POSIX正则表达式借用的模式匹配元字符。元字符含义|表示选择(两个候选之一)*表示重复前面的项零次或更多次,可以理解为任意次+表示重复前面的项一次或更多次?表示重复前面的项零次或一次{m}表示重复前面的项刚好m次。{m,}表示重复前面的项m次或更多次{m,n}表示重复前面的项至少m次并且不超过n次()把多个项组合成一个逻辑项,就相当于把整个()内的内容作为匹配项[…]声明一个字符类,就像POSIX正则表达式一样针对上述描述重复的次数,是指元字符修饰的字符或者字符组重复多少次,不要理解为该字符或字符组可以和源字符串可以匹配多少次常见元字符使用--|元字符 openGauss=# SELECT 'abc' SIMILAR TO '%(af|bc)%' AS RESULT; result -------- t (1 row) --*元字符 --当前的*时,即使没有可匹配的内容,也返回的是true openGauss=# SELECT 'abc' SIMILAR TO '%(o)*%' AS RESULT; result -------- t (1 row) openGauss=# SELECT 'abcdefosp' SIMILAR TO '%(o)*%' AS RESULT; result -------- t (1 row) --+元字符,该示例由于一次也未匹配到,所以返回false openGauss=# SELECT 'abc' SIMILAR TO '%(o)+%' AS RESULT; result -------- f (1 row) --+元字符,该示例匹配到多次o,所以返回true openGauss=# SELECT 'abcdefooosp' SIMILAR TO '%(o)+%' AS RESULT; result -------- t (1 row) --?元字符,,该示例未匹配,返回结果也是true openGauss=# SELECT 'abc' SIMILAR TO '%(o)?%' AS RESULT; result -------- t (1 row) --{m,n}元字符,对于字符组oo,需要至少匹配2次,即为oooo,可知原字符串不符合结果,返回结果为false。 openGauss=# SELECT 'abcoodefoooosp' SIMILAR TO '%(oo){2,3}%' AS RESULT; result -------- f (1 row) SELECT 'abcoodefoooosp' SIMILAR TO '%(oo){2,3}%' AS RESULT; 3、POSIX正则表达式正则表达式是一个字符序列,它是定义一个串集合(一个正则集)的缩写。 如果一个串是正则表达式描述的正则集中的一员时, 我们就说这个串匹配该正则表达式。 POSIX正则表达式提供了比LIKE和SIMILAR TO操作符更强大的含义。列出了所有可用于POSIX正则表达式模式匹配的操作符。正则表达式匹配操作符操作符描述例子~匹配正则表达式,大小写敏感,等价与like‘thomas’ ~ ‘.thomas.’~*匹配正则表达式,大小写不敏感,等价与ilike‘thomas’ ~* ‘.Thomas.’!~不匹配正则表达式,大小写敏感,等价与not like‘thomas’ !~ ‘.Thomas.’!~*不匹配正则表达式,大小写不敏感,等价与not ilike‘thomas’ !~* ‘.vadim.’--匹配正则表达式,大小写敏感 openGauss=# SELECT 'abc' ~ 'Abc' AS RESULT; result -------- f (1 row) --匹配正则表达式,大小写不敏感 openGauss=# SELECT 'abc' ~* 'Abc' AS RESULT; result -------- t (1 row) --不匹配正则表达式,大小写敏感 openGauss=# SELECT 'abc' !~ 'Abc' AS RESULT; result -------- t (1 row) --不匹配正则表达式,大小写不敏感 openGauss=# SELECT 'abc'!~* 'Abc' AS RESULT; result -------- f (1 row) 匹配规则与LIKE不同,正则表达式允许匹配串里的任何位置,除非该正则表达式显式地挂接在串的开头或者结尾。除了上文提到的元字符外, POSIX正则表达式还支持下列模式匹配元字符。元字符含义\转义字符^表示串开头的匹配$表示串末尾的匹配.匹配任意单个字符(abc)把多个字符组合成一个匹配原子,就相当于把整个()内的内容作为匹配项[abc]匹配abc中的任何一个字符,内部可以嵌套(abc),然后这个做一个原子,比如:[abc(de)][^abc]负值字符集合。匹配未包含的任意字符。例如,[^abc]可以匹配“plain”中的“plin”任一字符。|表示选择(两个候选之一)例如: a|b\d匹配任何数字,就像 [[:digit:]]\s匹配任何空白字符,就像 [[:space:]] ,包括空格、制表符和换行\w匹配任何单词字符,就像 [[:word:]]\D匹配任何非数字,就像 [^[:digit:]]\S匹配任何非空白字符,就像 [^[:space:]]\W匹配任何非单词字符,就像 [^[:word:]]\A只在串开头匹配(与^的不同)\m只在一个词的开头匹配\M只在一个词的末尾匹配\y只在一个词的开头或末尾匹配\Y只在一个词的不是开头或末尾的点上匹配\Z只在串的末尾匹配(与$的不同)\r回车常见元字符使用--()匹配规则 openGauss=# select 'abc' ~ '(ab|ac)' as result; result -------- t (1 row) --[]匹配规则,其中的任何一个字符匹配到源字符串就返回true openGauss=# select 'abc' ~ '[bef]' as result; result -------- t (1 row) --[^abc],只要源字符串含有非限定范围的字符,就返回true openGauss=# select 'china' ~ '[^abc]' as result; result -------- t (1 row) --匹配空白字符 openGauss=# select 'china ' ~ '\s' as result; result -------- t (1 row) 匹配两个词组查询场景下面的案例主要就是查询数据库会话中使用is not null或者is null语法的场景--如果两个词组中间只包含空格,可以直接添加\s,另外还需要考虑有多个空白的时候,因此也需要添加量词来修饰,可以添加+ openGauss=# select 'select * from t1 where is not null' ~ '(is)\s+(not)' as result; result -------- t (1 row) --如果两个词组中间包含不固定的字符且至少有一个字符,可以添加 .+来指定任意字符; openGauss=# select 'select * from t1 where is not null' ~ '(is).*(null)' as result; result -------- t (1 row) --如果两个词组中间,可能存在not字符串且不存在其他字符串,可以适用((not)?\s+)修饰not字符串的匹配规则,外层的括号可以不需要。 --外层的括号只是为了方便区分匹配的分组 openGauss=# select 'select * from t1 where is not null' ~ '(is)\s+((not)?\s+)(null)' as result; result -------- t (1 row) --去掉括号后的结果和之前是一致的 openGauss=# select 'select * from t1 where is not null' ~ '(is)\s+(not)?\s+(null)' as result; result -------- t (1 row) 匹配规则,是否需要考虑换行匹配多个词组的时候,目前验证,对于空格、制表符、换行,都按照匹配任何空白字符处理即可。create table t1 (id int,context varchar(1000)); insert into t1 values(1,'select * from t1 where is not null'); insert into t1 values(2,'select * from t1 where is null'); insert into t1 values(3,'select * from t1 where 1=2'); insert into t1 values(4,'not else'); insert into t1 values(5,'ifnot else'); insert into t1 values(6,'notrr else'); insert into t1 values(7,'select * from t1 where is not null'); --查询 openGauss=> select * from t1 where regexp_like(context,'(is)\s+(not)?\s?(null)','i'); id | context ----+------------------------------------ 1 | select * from t1 \r + | where is \r + | not null 2 | select * from t1 where is \r + | null 7 | select * from t1 where is not null (3 rows) --插入 insert into t1 values(8,'where group by '); insert into t1 values(9,'where group by '); --匹配换行\r openGauss=> select * from t1 where regexp_like(context,'(group)\r+','i'); id | context ----+--------------- 8 | where group\r+ | by (1 row) --匹配任何空白字符\s,根据结果可知,\s是包含换行信息的 openGauss=> select * from t1 where regexp_like(context,'(group)\s+','i'); id | context ----+----------------- 8 | where group\r + | by 9 | where group by (2 rows) 按照词组匹配,精确查找我们在查询匹配关键字的时候,一般需要精确查找匹配,而不需要那些包含有查询关键字的数据行--通过正则表达式约束\m和\M来限定一个词的开头和结尾匹配 openGauss=> select * from t1 where regexp_like(context,'\mnot\M','i'); id | context ----+------------------------------------ 1 | select * from t1 \r + | where is \r + | not null 4 | not else 7 | select * from t1 where is not null (3 rows) --\m一个词的开头匹配 openGauss=> select * from t1 where regexp_like(context,'\mnot','i'); id | context ----+------------------------------------ 1 | select * from t1 \r + | where is \r + | not null 4 | not else 6 | notrr else 7 | select * from t1 where is not null (4 rows) --\M一个词的末尾匹配 openGauss=> select * from t1 where regexp_like(context,'not\M','i'); id | context ----+------------------------------------ 1 | select * from t1 \r + | where is \r + | not null 4 | not else 5 | ifnot else 7 | select * from t1 where is not null (4 rows) ?和*量词的区别在查询匹配场景下,我个人理解应该是一致的,但是对于一些替换场景则是有区别的--?是匹配0或1次,所以(o)?b匹配的子串为ob,替换为了foearbaz openGauss=> SELECT regexp_replace('foobarobaz', '(o)?b', 'e'); regexp_replace ---------------- foearobaz (1 row) --*是匹配0或更多次,所以(o)?b匹配的子串为oob,替换为了e,结果为fearbaz openGauss=> SELECT regexp_replace('foobarobaz', '(o)*b', 'e'); regexp_replace ---------------- fearobaz (1 row) --对于flat参数,i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个 openGauss=> SELECT regexp_replace('foobarobaz', '(o)*b', 'e','g'); regexp_replace ---------------- feareaz (1 row)正则表达式支持的函数对于具体的正则函数的使用,本文不做详细介绍,后续再写文章详细介绍。正则表达式支持的函数如下,substring(string from pattern) 描述:截取匹配POSIX正则表达式的子字符串。如果没有匹配它返回空值,否则返回文本中匹配模式的那部分。 regexp_count(string text, pattern text [, position int [, flags text]]) 描述:获取满足匹配的子串个数 regexp_instr(string text, pattern text [, position int [, occurrence int [, return_opt int [, flags text]]]]) 描述:获取满足匹配条件的子串位置(从1开始)。如果没有匹配的子串,则返回0。 regexp_substr(string text, pattern text [, position int [, occurrence int [, flags text]]]) 描述:正则表达式的抽取子串函数。与substr功能相似,正则表达式出现多个并列的括号时,也全部处理 regexp_replace(string, pattern, replacement [,flags ]) 描述:替换匹配POSIX正则表达式的子字符串。如果没有匹配pattern,那么返回不加修改的string串。如果有匹配,则返回的string串里面的匹配子串将被replacement串替换掉。 replacement串可以包含\n,其中\n是1到9,表明string串里匹配模式里第n个圆括号子表达式的子串应该被插入,并且它可以包含\&表示应该插入匹配整个模式的子串。 可选的flags参数包含零个或多个改变函数行为的单字母标记。flags 支持的选项值及含义描述如表1 flags 支持的选项值所示。返回值类型:varchar regexp_matches(string text, pattern text [, flags text]) 描述:返回string中所有匹配POSIX正则表达式的子字符串。如果pattern不匹配,该函数不返回行。如果模式不包含圆括号子表达式,则每一个被返回的行都是一个单一元素的文本数组,其中包括匹配整个模式的子串。如果模式包含圆括号子表达式,该函数返回一个文本数组,它的第n个元素是匹配模式的第n个圆括号子表达式的子串。 flags参数为可选参数,包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。 regexp_split_to_array(string text, pattern text [, flags text ]) 描述:用POSIX正则表达式作为分隔符,分隔string。和regexp_split_to_table相同,不过regexp_split_to_array会把它的结果以一个text数组的形式返回。返回值类型:text[] regexp_split_to_table(string text, pattern text [, flags text]) 描述:用POSIX正则表达式作为分隔符,分隔string。如果没有与pattern的匹配,该函数返回string。如果有至少有一个匹配,对每一个匹配它都返回从上一个匹配的末尾(或者串的开头)到这次匹配开头之间的文本。当没有更多匹配时,它返回从上一次匹配的末尾到串末尾之间的文本。 flags参数包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配。返回值类型:setof text regexp_like(text,text,text) 描述:正则表达式的模式匹配函数。返回值类型:bool总结本文中整理的正则匹配规则为比较常见的规则,相对来说上手还是比较容易的,这些规则对于我们的日常运维开发应该是足够使用的。另外这三种模式匹配,其实使用场景也是稍微有所不同。1、like常用于简单的模糊匹配查询2、SIMILAR TO语法可以支持正则模式匹配,适用于大部分场景3、正则表达式相比SIMILAR TO,支持一些正则函数的使用并且支持一些其他特殊的匹配规则总之,正则表达式是一种强大的工具,它在文本处理领域具有广泛的应用,并且具有灵活性、通用性和高效性等优点。通过掌握正则表达式,开发或运维人员能够更高效地处理文本数据。上述的整理,是通过查看GaussDB的官网文档并结合PG官网资料整理常用的正则表达式。如果个别内容有误,望各位大佬多多指正。
-
通过GRANT把角色授予用户后,用户即具有了角色的所有权限。推荐使用角色进行高效权限分配。例如,可以为设计、开发和维护人员创建不同的角色,将角色GRANT给用户后,再向每个角色中的用户授予其工作所需数据的差异权限。在角色级别授予或撤消权限时,这些更改将作用到角色下的所有成员。 GaussDB提供了一个隐式定义的拥有所有角色的组PUBLIC,所有创建的用户和角色默认拥有PUBLIC所拥有的权限。关于PUBLIC默认拥有的权限请参考GRANT。要撤销或重新授予用户和角色对PUBLIC的权限,可通过在GRANT和REVOKE指定关键字PUBLIC实现。 要查看所有角色,请查询系统表PG_ROLES:创建、修改和删除角色非三权分立时,只有系统管理员和具有CREATEROLE属性的用户才能创建、修改或删除角色。三权分立下,只有初始用户和具有CREATEROLE属性的用户才能创建、修改或删除角色。要创建角色,请使用CREATE ROLE。要在现有角色中添加或删除用户,请使用ALTER ROLE。要删除角色,请使用DROP ROLE。DROP ROLE只会删除角色,并不会删除角色中的成员用户账户。内置角色提供了一组默认角色,以gs_role_开头命名。它们提供对特定的、通常需要高权限的操作的访问,可以将这些角色GRANT给数据库内的其他用户或角色,让这些用户能够使用特定的功能。在授予这些角色时应当非常小心,以确保它们被用在需要的地方。表1描述了内置角色允许的权限范围:关于内置角色的管理有如下约束:以gs_role_开头的角色名作为数据库的内置角色保留名,禁止新建以“gs_role_”开头的用户/角色/模式,也禁止将已有的用户/角色/模式重命名为以“gs_role_”开头;禁止对内置角色的ALTER和DROP操作;内置角色默认没有LOGIN权限,不设预置密码;gsql元命令\du和\dg不显示内置角色的相关信息,但若显示指定了pattern为特定内置角色则会显示。三权分立关闭时,初始用户、具有SYSADMIN权限的用户和具有内置角色ADMIN OPTION权限的用户有权对内置角色执行GRANT/REVOKE管理。三权分立打开时,初始用户和具有内置角色ADMIN OPTION权限的用户有权对内置角色执行GRANT/REVOKE管理。
-
通过GRANT把角色授予用户后,用户即具有了角色的所有权限。推荐使用角色进行高效权限分配。例如,可以为设计、开发和维护人员创建不同的角色,将角色GRANT给用户后,再向每个角色中的用户授予其工作所需数据的差异权限。在角色级别授予或撤消权限时,这些更改将作用到角色下的所有成员。 GaussDB提供了一个隐式定义的拥有所有角色的组PUBLIC,所有创建的用户和角色默认拥有PUBLIC所拥有的权限。关于PUBLIC默认拥有的权限请参考GRANT。要撤销或重新授予用户和角色对PUBLIC的权限,可通过在GRANT和REVOKE指定关键字PUBLIC实现。 要查看所有角色,请查询系统表PG_ROLES:创建、修改和删除角色非三权分立时,只有系统管理员和具有CREATEROLE属性的用户才能创建、修改或删除角色。三权分立下,只有初始用户和具有CREATEROLE属性的用户才能创建、修改或删除角色。要创建角色,请使用CREATE ROLE。要在现有角色中添加或删除用户,请使用ALTER ROLE。要删除角色,请使用DROP ROLE。DROP ROLE只会删除角色,并不会删除角色中的成员用户账户。内置角色提供了一组默认角色,以gs_role_开头命名。它们提供对特定的、通常需要高权限的操作的访问,可以将这些角色GRANT给数据库内的其他用户或角色,让这些用户能够使用特定的功能。在授予这些角色时应当非常小心,以确保它们被用在需要的地方。表1描述了内置角色允许的权限范围:关于内置角色的管理有如下约束:以gs_role_开头的角色名作为数据库的内置角色保留名,禁止新建以“gs_role_”开头的用户/角色/模式,也禁止将已有的用户/角色/模式重命名为以“gs_role_”开头;禁止对内置角色的ALTER和DROP操作;内置角色默认没有LOGIN权限,不设预置密码;gsql元命令\du和\dg不显示内置角色的相关信息,但若显示指定了pattern为特定内置角色则会显示。三权分立关闭时,初始用户、具有SYSADMIN权限的用户和具有内置角色ADMIN OPTION权限的用户有权对内置角色执行GRANT/REVOKE管理。三权分立打开时,初始用户和具有内置角色ADMIN OPTION权限的用户有权对内置角色执行GRANT/REVOKE管理。
-
4D是意思我知道,是代表4个DataNode。4副本的意义是有4个数据分片吗?4C的意思是4的CN节点吗?
-
小白入门,在搜索文档的时候被这些概念绕晕了,这些说的都是一个东西吗?比如:我看有的地方说是GaussDB,有的地方又说是GaussDB(DWS),有没有大佬解释一下?
-
各位大佬,信创迁移,应用系统的mysql数据库业务数据迁移到高斯数据库迁移方案有吗,高斯数据库数据迁移接口支持哪些mysql版本?
-
GaussDB数据库主备架构的基本组件,以及基于华为云底座和轻量化部署TPOPS两种方式的典型高可用部署场景介绍。1、GaussDB数据库组件1.1 GaussDB数据库集中式主备集群基本组件CM由CM Agent、CM Server和OM monitor构成:CM Agent:管理服务组件,由OMM拉起(周期1秒),主要负责CMS、DN进程的保活及启停,仲裁指标采集、仲裁命令执行等。集群的每台主机上均有CM Agent进程。CMA故障可能会导致启停能力丢失、实例故障检测能力丢失。CM Server:管理服务组件,由CMA拉起(周期1秒),根据CM Agent上报的实例状态判定当前状态是否正常,是否需要修复,并下发指令给CM Agent执行。CM Server会将集群的拓扑信息保存在ETCD。OM Monitor:管理服务组件,由crontab定时任务控制拉起(周期1分钟),主要负责OMM、etcd、cm_agent进程的保活及启停DN节点:数据服务组件,由CMA拉起(周期1秒),负责存储业务数据、执行数据查询任务以及返回应用结果。DN主备节点之间采用Quorum复制或Paxos协议复制。ETCD节点:管理服务组件,由OMM自动拉起(周期1秒),主要协助CMS选主、持久化集群仲裁信息、保存集群的拓扑信息等。1.2 区域和可用区在高可用部署架构中区域(Region)和可用区(Available Zone)用来描述数据中心的位置。区域Region:指物理上相对独立的数据中心。每个区域完全独立,这样可以实现最大限度的容错能力和稳定性。在GaussDB数据库中资源创建成功后不能更换区域。可用区AZ:指同一区域内,电力和网络互相隔离的物理区域,比如同一个区域内的两个机房,一个AZ故障不会影响其它AZ。GaussDB数据库中在同一个Region内可以有多个AZ可用区,不同可用区之间物理隔离,但内网互通,既保障了可用区的独立性,又提供了低价、低时延的网络连接。不同Region的划分和多中心的高可用架构有关,比如生产/同城/灾备机房划分为不同的Region,然后在同一个Region内按照机房模块划分为不同的AZ域。也有可能生产和同城划分为同一个Region,灾备作为一个单独的Region,不同Region之间的RPO要求也是不同的。1.3 主备节点数据同步机制1.3.1 WAL日志机制GaussDB数据库为了保证数据在数据库发生故障时候可恢复,引入了Redo机制,也就是WAL日志,其思想是对数据文件的修改在提交之前都需要记录到日志文件中,也就是先写日志后写数据。当事务发生时,相关的操作记录会被组装并写入基于内存的RedoLogBuffer中。当RedoLogBuffer写满或事务没有更多日志记录需要写入时,这些日志记录会被提交给RedoLogHandler,并最终写入到XLog(即WAL日志)中。这样不需要在每次事务提交的时候都把数据页刷回到磁盘,因为出现崩溃的情况下可以用日志REDO来恢复数据库。WAL日志机制在数据库发生故障后可以通过xlog日志文件恢复数据、主备节点也可以通过日志文件进行数据同步、备份恢复时通过WAL日志可以实现PITR恢复。与MySQL中binlog不同之处是WAL日志主要关注于数据的物理修改记录,确保在数据文件修改之前相应的日志已经写入磁盘;而binlog日志则可能更侧重于记录数据的逻辑变化,如SQL语句的执行等。在GaussDB中可以使用逻辑复制的功能将xlog日志转换为类binlog日志格式进行逻辑回放等使用场景。1.3.2 同Region内主备节点复制在一主多备架构中,主机通过WalSender线程向备机同步日志,备机通过WalReceiver线程接受日志,并刷到本地盘,备机读取redo日志,完成主备之间的数据同步。WAL:Write-Ahead Logging,也称为XLog,预写日志系统。实现事务日志的标准方法,是指对数据文件(表和索引的载体)持久化修改之前必须先持久化相应的日志。WAL Receiver:数据库复制时备机创建的一个线程的名称。此线程用于从主机接收数据、命令,并反馈确认信息至主机。一个备机只有一个WALReceiver线程。WAL Sender:数据库复制过程中,主机接受到备机的连接请求后创建的一个线程的名称。此线程用于发送命令、数据到备机,并从备机接收信息。一个主机可能会有多个WAL Sender线程,每一个WAL Sender线程对应一个备机的一个连接请求。WAL Writer:数据库启动时创建的一个写Redo日志的线程,用于将内存中的日志写入到持久性设备中。REDO日志:记录对数据库进行操作的日志,这些日志包含重新执行这些操作所需要的信息。当数据库故障时,可以利用REDO日志将数据库恢复到故障前的状态。GaussDB数据库在同一个Region内1主多备的部署架构下,主备节点间采用Quorum或Paxos一致性复制协议,在事务提交前会进行一致性检测,满足半数以上的多数派响应后才可以提交。因此为了满足多数派选举,日志节点会部署为奇数。同时根据不同的业务可用模式,将日志同步分为不同的模式,有以下几种:最大保护模式:一主多备场景下,如果主机的一个事务必须等到该事务对应的xlog日志在多数派主机上都落盘后才能提交。如果因为网络原因或者多数的备机发生故障,此时主机的事务将无法提交。该模式下,可以保证RPO=0,参数设置synchronous_commit=on最大可用模式:当发现备机不可用时,会自动从最大保护模式切换为最大可用模式,保证在备机不可用时主机的事务能够继续执行。该模式下无法保证RPO=0,参数设置most_avaiable_sync=on最大性能模式:主机的事务在该事务对应的xlog日志在本地落盘之后就可以提交,主机的性能不受备机的影响。该模式下,在主机故障时,可能会有一定的数据丢失,参数配置synchronous_commit=off1.3.3 跨Region流式复制GaussDB跨Region之间的数据同步采用流式复制的方式,一般是在生产和灾备建立两套数据库集群,基于WAL日志建立日志复制关系。跨Region之间的复制不能保证RPO=0。流式复制是使用max_replication_slots(日志复制槽)、max_keep_log_seg(逻辑日志数)等配置来控制复制的速率,防止备机堆积过多日志影响性能。2、华为云GaussDB数据库高可用部署华为云GaussDB数据库有两种部署模式,一种是基于华为云HCS底座的,适合于本身已经建设了华为云IAAS平台,基于现有的云平台底座的运维和管理能力,减少重复建设的成本;另一种是轻量化TPOPS平台,TPOPS不依赖于华为云底座实现对GaussDB数据库实例的运维管理。本文主要介绍集中式架构下的高可用部署。2.1 基于华为云底座的高可用部署集中式主备版本的同城和异地部署的时候有不同的组合,有同Region多AZ部署、跨Region的多AZ部署。这里介绍几种典型的部署方案,其它参考官网材料。1)生产同城单Region部署左图为生产单中心1AZ3副本部署,适用于不要求站点级容灾,但是需要保证单中心故障高可用的场景。DN主备之间采用流复制进行数据同步,至少同步到一台备机,保证RPO=0。DN备节点故障,不中断业务的进行;DN主节点故障,自动进行主备切换。右图为生产同城3AZ4副本同城双活部署,由两个业务AZ和1个仲裁AZ组成,任何AZ故障能够保证RPO=0。AZ1和AZ2对等部署,AZ3作为第三方仲裁节点,不接入业务;AZ3作为仲裁AZ,在1个AZ故障状态下,保证ETCD的存活节点超过多数,从而保证数据的一致性DN主备之间采用流复制进行数据同步,跨AZ存在同步备,数据不会丢失。DN备节点故障,不中断业务的进行;DN主节点故障,自动进行主备切换。AZ1和AZ2之间可以手动切换,切换完成后业务继续运行2)生产同城跨Region部署(保证同城RPO=0)前文已经介绍到GaussDB数据库在不同Region之间划分为不同的集群进行部署,不同集群之间采用流式复制,不能保证RPO=0。基于华为云底座部署的时候,可能因为生产和同城机房在网络部署上划分为不同的网络区域Region,此时如果要保证RPO=0只能采用存储复制的方案。GaussDB数据库结合Dorado存储实现存算分离和存储级别的高可用方案,两个不同Region之间通过存储复制保证RPO=0。每个Region都有一套完整的数据库集群,并有完整的数据;集群内主备节点之间采用共享卷进行数据同步,保证RPO=0DN备节点故障,不中断业务的进行;DN主节点故障,自动进行主备切换跨region容灾需要手工切换闪存存储需要支持远程复制LUN,支持NAS文件系统并且和主机之间的连接使用IP网络连接如果没有要求生产和同城之间RPO=0,采用双Region部署,两个集群之间采用数据库跨Region流式复制的方式实现数据同步。另外有时候考虑到生产和同城的网络带宽及时延限制,主备之间的强一致同步会影响到性能,也会考虑生产同城双Region部署。但其实大多数场景下,生产和同城之间的网络时延在0.5ms左右,已经满足业务访问的时延要求了。对于灾备站点由于物理距离上的限制,网络时延会大很多,所以需要单独划分Region部署,并且不能保证RPO=0。因此,对于不想使用存储复制方案的高可用部署,推荐生产和同城一个Region、灾备站点一个Region的方案。2.2 基于轻量化TPOPS高可用部署GaussDB数据库的TPOPS轻量化部署不依赖于华为云底座,只需要部署TPOPS云数据库管理平台,然后基于TPOPS进行数据库实例的纳管和维护即可。在部署形态上也是支持多种,这里介绍几种典型的部署方案,其它参考官网材料。1)生产同城单Region部署与基于云底座的部署方式相同,DN主备复制支持Quorum和Paxos两种协议,跨AZ存在同步备,数据不会丢失。2)同城3AZ5节点+异地1AZ1节点(同城RPO=0)生产同城双活部署,由两个业务AZ和一个仲裁AZ组成。两个业务AZ之间对等部署,任何一个机房都接入业务;仲裁AZ不接入业务;任何机房故障可保证RPO=0;异地Region支持跨Region的容灾能力。同城和异地跨Region分别部署一套单独的数据库集群;单AZ故障下,保证ETCD存活节点为多数,从而保证数据一致性;DN主备节点之间采用流式复制,至少同步到2台备机,保证RPO=0;同城切换支持跨AZ切换;跨Region容灾需要手动切换相比基于华为云底座的部署,异地Region支持单节点部署,并且生产和同城不需要和云底座的Region网络域捆绑,在部署方式上更为灵活。3、总结华为云GaussDB数据库高可用架构能够保证AZ内RPO=0、同城AZ间RPO=0,异地RPO<10s。另外高可用部署上有灵活的配置满足不同的场景,同时还有以下特性:为保证一致性协议的多数派选举成功,ETCD实例或日志副本等按照奇数部署;集中式架构下管控平台和数据库实例之间解耦,每个数据库集群都有自己的元数据管理节点、故障检测节点,在故障检测、DDL变更等场景下不依赖于集中式的管理节点。而管控平台的作用就是资源的管理、性能指标数据的采集和展示等。缺点就是需要维护的节点增多了,比如每个集群都有自己的ETCD、CMS等。在部署模式上如果没有现成的华为云底座,还是轻量化部署更为合适,数据库也不需要和某一类云厂商捆绑,在实际部署方案上也会更为灵活。GaussDB数据库基于云底座和云管平台实现实例的统一管理、指标采集展示、DBMind智能化运维等功能模块,并且结合DRS等迁移工具和Oracle数据库迁移国产中的兼容性及性能上的优势,在国产数据库的引进中已经具备相当的竞争力。不过吐槽一点是GaussDB数据库在实例部署时候的资源最小限制为8C64G并且在实例纳管时候无法规避,这对于小的应用或开发测试环境来说是相当不友好的。参考资料:https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/tg/gaussdb-38-0122.html作者:大唐小少
-
现象:执行升级命令时,提示influxdb is not ok,升级阻塞在提示influxdb is not ok的节点上执行如下步骤步骤1执行 systemctl status influxd.service确认 influxd 状态为running步骤2执行 crontab -e注释掉 * * * * * /usr/bin/python3 /opt/cloud/monitor/monitor.py >> /dev/null 2>&1 & 这个监控进程任务步骤3执行 ps -ef | grep monitor.pykill -9 杀掉监控进程pid步骤4重新执行升级命令,正常升级步骤5升级完成后,执行 crontab -e 打开 * * * * * /usr/bin/python3 /opt/cloud/monitor/monitor.py >> /dev/null 2>&1 & 监控进程任务
-
GaussDB(DWS)默认就是分布式系统的,和GaussDB的【分布式版】有什么区别吗?
-
初次接触openGauss或GaussDB数据库的逻辑对象,被其中的表空间、数据库、schema和用户之间的关系,以及授权管理困惑住了,与熟悉的MySQL数据库的逻辑对象又有明显的不同。本文旨在简要梳理下GaussDB数据库逻辑对象之间的关系,以加深理解。1、GaussDB数据库逻辑对象1.1 表空间、Database和表GaussDB数据库中逻辑对象包括表空间、Database和表、索引等,其中Database是数据的集合、表空间是数据在物理上的位置,数据库中的所有对象都存储在表空间中。表空间Tablespace:表空间是一个目录,数据库中可以存在多个表空间,其中存储的是它所包含的数据库的各种物理文件。每个表空间可以对应多个Database。gaussdb中系统默认表空间pg_default,当建表时未指定表空间都使用默认表空间。Database:数据库是逻辑上的抽象,各个database之间相互隔离,同一个database上的数据库对象可以存在多个表空间中。Gaussdb中会默认创建postgres数据库表Table:Table是数据的结构化视图,存储特定类型的数据。每张表只能属于一个数据库,也只能对应到一个Tablespace。每张表对应的数据文件必须在同一个Tablespace中。其中关系如图所示,总结如下:数据库实例中可以定义多个Database和表空间;一个Database中可以包含多个表空间;一个表空间中可以包含多个数据库;一个数据库中可以包含多个表;一个表必须属于一个数据库,并存储在一个表空间中。1.2 用户和SchemaGaussDB数据库中用户user、角色role和schema各自不同的作用:用户是数据库中的实体,用于标识和管理数据库中的各种操作权限和资源使用权限。每个用户都有唯一的用户名,用于登录数据库和执行相关操作。在GaussDB中,用户和用户组在实例范围内是共享的,也就是默认情况下通过单个用户可以连接到任一数据库,但是数据不是共享的,受到权限的管控。角色是一组用户的集合,通过角色可以将权限授予一组用户,而不是单独授予每个用户。角色可以包含其他角色,形成层次结构。通过为角色分配权限,然后将角色授予用户,可以实现权限的快速分配和撤销。Schema是数据库对象的集合,它包含了数据库中的所有表、视图、存储过程、函数等对象。每个数据库可以包含一个或多个Schema,用于将数据库对象组织成逻辑上独立的组。通过Schema,可以允许多个用户使用同一数据库而不相互干扰,将数据库对象组织成易于管理的逻辑组。在数据库创建后,会有一个默认的名为Public的schema。需要注意的是,在GaussDB中,每次创建新用户时,系统会在当前登录的数据库中默认为新用户创建一个同名Schema,此时在当前数据库中创建同名的schema会提示已存在。对于其他数据库,若需要同名Schema,则需要用户手动创建。另外,如果未指定schema访问表时,系统会通过search_path(搜索路径)来判断该表是哪个schema下的表(其中pg_temp和pg_catalog默认会作为搜索路径顺序中的前两位)。search_path(搜索路径)是一个schema名列表,在其中找到的第一个表就是目标表,如果没有找到则报错。在搜索路径中的第一个schema叫做current schema(通过show current_schema可以查看),在没有声明schema名时,新创建的数据库对象会默认存放在该schema下。用户、Database和schema之间关系如图所示,总结如下:每个数据库中可以包含多个用户,用户在实例范围内是共享的;每个数据库中可以定义多个schema,schema之间是互相隔离的,不同数据库之间可以定义相同的schema名;每个schema包含多个数据库对象,但每个数据库对象只能属于一个Schema。用户对不同的Database中不同schema的访问通过设置不同的权限进行管理控制。1.3 不同对象之间权限管理GaussDB数据库中的权限管理沿用了Oracle数据库的权限管理特性,权限层级分为多个级别,包括系统权限和对象权限:系统权限:系统规定用户使用数据库的权限,如登录数据库(LOGIN)、创建数据库(CREATEDB)、创建用户/角色(CREATEROLE)等。对象权限:指在数据库对象(如数据库、模式、表、视图、函数等)上执行特殊动作的权限,如查看(SELECT)、更新(UPDATE)、插入(INSERT)、删除(DELETE)等。在对角色和用户授权时候,主要有以下场景:将系统权限授予角色或用户:比如授予数据库管理员SYSADMIN、MONADMIN权限,监控用户MONADMIN权限;将数据库对象授予角色或用户:将数据库对象的相关权限授予特定的角色或用户,比如对schema的所有权限、schema下表的所有权限。将角色或用户授予其它用户或角色:将一个角色或用户的权限授予其它多个角色,比如创建了一个只读的角色,将该role授予其它用户。将ANY权限授予角色或用户:ANY权限有很多种,比如CREATE ANY、SELECT ANY,当授予SELECT ANY TABLE权限给某个用户后,该用户在当前数据库下既有所有schema的查询权限,对于一些只读的查询用户还是很方便的。GaussDB数据库中的权限管理颗粒度非常细,按照最小授权的原则管理上也相当复杂,因此在实际授权过程中按照schema和schema内的对象维度进行分别授权,全局的只读用户具备SELECT ANY的权限、业务读写用户具备对象级别的增删改查权限、系统视图如pg_catalog和sys等的查询权限。不过需要注意的是:DBE_PREF系统schema访问需要MONADMIN权限,单独授予SELECT权限不生效;Schema内的对象授权时,需要具备schema的usage权限才能正常访问其中的schema;1.4 MySQL数据库中逻辑对象对比在MySQL数据库中,数据库也是存储数据的容器,它包含了表、视图、存储过程、函数、触发器、事件等数据库对象。schema通常与数据库是同义词,指的是数据库结构的集合,创建一个新的数据库时,实际上已经创建了一个新的schema。表也是数据库中最基本的存储单元,它以行和列的形式存储数据。表空间在innodb存储引擎中分为系统表空间和数据表空间,系统表空间包含数据字典、事务信息和undo日志等信息,而打开innodb_file_per_table配置后会为每张表单独创建一个表空间文件,每个表空间文件中存放的是数据、索引和插入缓存等信息。因此,在逻辑结构上MySQL系的数据库中的数据库实例与GaussDB数据库中的database相当,一个数据库中可以创建多个database或schema,每个database中又可以创建不同的表,不同database间共享系统表空间和资源。1.5 总结总结GaussDB数据库的逻辑对象之间的关系,如下图所示:在逻辑层面,GaussDB数据库以不同的database进行逻辑上的区分,一个数据库实例中可以定义多个database,database内可以定义不同的schema、schema内又包含不同的数据库对象。在物理存储层面,表空间对应的是实际的数据存储目录,同一个database可以使用不同的表空间、同一个表空间又可以被不同的database使用。不过在实际使用过程中建议使用默认的表空间。在权限控制上,通过对不同用户或角色授予不同对象的访问权限进行细粒度的权限管控,达到最小化授权的目的。https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30https://blog.csdn.net/weixin_38623994/article/details/100047552https://bbs.huaweicloud.com/blogs/236381本文作者:大唐小少
Gauss松鼠会小助手2
发表于2024-09-09 14:11:58
2024-09-09 14:11:58
最后回复
Gauss松鼠会小助手2
2024-09-09 14:11:58
1415 0 -
我们没有support网站的权限啊
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中 -
华为云监控CES新特性解读2026/08/26 周三 19:00-20:30
刘英杰-华为云监控产品专家
华为云监控 CES H1 版本重磅全新升级!本次直播特邀华为云监控产品专家,围绕特性深度解读 + 现场实操演示 + 实时线上答疑三大模块,全方位拆解版本核心亮点,直击运维各类痛点难题。助力实现告警高效配置、指标快速检索、插件便捷部署,切实降低运维工作负担,提升监控运维工作效率。欢迎预约观看,互动提问交流!
回顾中
热门标签