数据库管理
1. 简介
数据库管理功能包含数据库列表、会话管理、锁管理、日志查看的子功能,数据库列表中包含一系列数据库的操作,如创建数据库、删除数据库、一键搭建备库、调整备库级联关系、修改数据库的配置文件等功能。
2. 数据库列表
数据库列表的界面:
数据库管理列表字段说明:
- 数据库ID: 数据库在CLup中的唯一ID,用于唯一标识一个数据库。
- 上级库:代表该数据库的流复制(streaming replicatioin)的上一级库,上一级库可能是一个主库,也可能是一个备库,即多级级联备库的情况。
- 集群ID:该数据库所在集群的ID,没有加到HA集群的主备库没有这个ID。
- 状态:数据库的运行状态,状态类型查看手册4.1总览-数据库实例信息概览。
- 数据库名称:主要为了标识数据库,可以在增加数据库实例时给此数据库实例添加的名字,可以为任何的一个名字,只要我们看到这个名字就知道这是那个数据库可以可以了。
- 机房名称:数据库所在机房名称。
- 所在主机:该数据库所在主机的IP。
- 版本:数据库版本号。
- 端口:该数据库占用的端口。
- 数据库目录:该数据库的数据所在目录。
- 数据库类型:数据库的实例类型。
- 主备库:该数据库的主备信息,单独的数据库显示为主库 该数据库的主备信息,单独的数据库显示为主库。
- 操作:对数据库的一系列操作启动、停止、更多(编辑、删除、查询计划、重启、登录主机、psql、搭备库、切换备库级联、激活)。
- 资源隔离:在一台物理机/虚拟机上创建多个实例时,为防止实例之间的资源争抢,对不同实例做的资源隔离限制,独享:只能使用该实例分配到的cpu和内存;共享:可以使用所有共享实例共享的资源。
在此界面中,可以导入数据库、新建数据库、删除数据库、修改已有数据库的信息;启动、重启、停止数据库;查看某条SQL的执行计划;WEB界面中登录主机和用psql登录数据库;搭建备库;把此备库激活成主库;修改数据库的配置等功能。后面的小节中会详细介绍这些功能
3. 导入数据库
该功能主要是为了把您在使用CLup之前已经有的数据库纳入到CLup中集中管理。
在数据库列表界面中点导入数据库
按钮,出现弹出框:
添加的时候会检查数据目录和端口是否正确。
- 数据库名称: 方便用来标识数据库,可以是任何一个容易标识这个数据库的字符串。
- 所在主机: 数据库所在的主机,只能选择运行clup-agent的主机。
- 数据库端口: 数据库占用的端口。
- 数据目录: 数据库数据所在目录。
- DB中的用户: 此用户需要有数据库超级管理员的权限,所以我们通常默认是postgres。
- DB中的密码:用户的密码。
4. 创建数据库
在数据库列表界面中点创建数据库
按钮,出现弹出框:
这个操作会创建一个新的数据库。
填写的各个项说明如下:
- 数据库名称: 方便用来标识数据库,可以是任何一个容易标识这个数据库的字符串。
- 所在主机: 数据库所在的主机,只能选择有运行clup-agent的主机
- 数据库软件:是一个不同类型和版本的数据库软件的目录列表,当选择中一个软件目录后,后面的版本字段会自动显示这个数据库软件的版本,如“10.6”、“11.12”等等。当这台机器安装了不同版本的PostgreSQL数据库,就会自动出现在这个下拉框中。
- 数据库端口: 数据库占用的端口。
- 操作系统用户:指定数据库运行在哪个操作系统用于下,通常输入postgres。注意如果此用户不存在,后续的“创建操作系统”的选择框会亮起来,需要输入这个用户的UID,系统会自动创建这个用户。通常我们习惯把postgres用户的UID设置为701。
- 数据目录: 数据库数据所在目录。
- DB中的HA用户: 此用户需要有数据库超级管理员的权限,所以我们通常默认是postgres。
- DB中的HA密码:HA用户的密码。
- 资源隔离配置:对创建的实例进行资源隔离限制(主机资源不足时不能创建实例),默认为共享模式,1核cpu,1G内存,如果需要修改则在
更多
->弹性伸缩
内进行调整。
请确保填写的参数没有问题,创建数据库过程需要花一些时间,所以这个操作是一个异步的,会在后台创建,页面会显示数据库的状态是正在创建中,可以到数据库管理-日志查看 查看相关创建过程日志。
从第二个步开始,都是在设置数据库的一些配置,我们程序提供了这些配置项的默认值,可以根据实际情况进行修改。其中默认会加载pg_stat_statements和pg_store_plans两个插件,即把这两个插件配置到数据库参数shared_preload_libraries中,请根据实际情况修改,默认至少需要保留pg_stat_statements,以便于后续监控中可以启用TopSQL功能,如果没有装此插件,将不能使用TopSQL的功能。如果不选择pg_store_plans,将在TopSQL的功能中不能查看SQL的历史执行计划。
5. 分配数据库给指定用户
在数据库列表页面点击分配
,弹出数据库列表,类型分为集群和非集群中的数据库,点击选择用户
,勾选或者取消勾选对应的集群/数据库即可将资源分配或取消分配给该用户,该用户(非管理员)登录时只能操作被分配的数据库。
6. 启动、重启、停止数据库
在数据库列表界面中点未启动的数据库那一行中的启动
,就可以启动这个数据库。如果这个数据库本身是启动的,则不显示启动
按钮,只显示停止
按钮,点停止
按钮则可以停止数据库,点更多
按钮,会弹出一个菜单,点菜单项目中的重启
则可以重启数据库,如果数据库正在运行,点更多
按钮出来的菜单中,删除
项是发灰不能操作的,所以需要先停止数据库后才能删除数据库。
7. 编辑数据库在CLup中的配置信息
点更多
按钮,会弹出一个菜单,点菜单项目中的“编辑”即可以编辑此数据库在CLup中的配置信息:
界面中有“一般信息”、“数据库密码”两个TAB页。
“一般信息”页面可以更改数据库名称和数据库的复制IP:
此界面的一些修改项目说明如下:
- 数据库名称: 是之前创建数据库时方便标识数据库的一个字符串。
- 复制IP:主备库的流复制使用的IP,通常与数据库主机的IP相同。但如果主机上有多块网卡和多个IP, 可以把流复制IP填成另一个IP地址,这样流复制的流量就走另一个网卡了,这样不挤占主网络的带宽。如果这个库是一个单独的数据,后续也不建备库,可以设置为空。
- 数据库软件版本:显示当前数据库使用的PostgreSQL软件路径和数据库版本。如果版本为空或发生了变化,可以点击“更新”按钮来自动获取数据库软件的版本信息。
- 端口:数据库的监听端口
- 数据目录:数据存储目录。
“数据库密码”页面,此界面记录了CLup管理数据库使用的数据库用户和密码和流复制时使用的用户和密码。当我们改变了数据库用户的密码时,需用在此界面同步的修改数据库的密码。注意该操作只会修改CLup中存储的密码,不会更改数据库的真实密码。当数据库用户与流复制用户名相同时,流复制用户的密码与数据库用户的密码同步,所以只需修改数据库用户密码即可:
点密码框后面的“小眼睛”图标,可以明文显示密码:
8. 修改数据库配置
此功能主要是修改PostgreSQL数据库配置文件postgresql.conf或postgresql.auto.conf中的配置。注意此处仅仅是修改文件中的配置参数,并不会使用让这些参数生效,如果想生效,还需要手动点击reload 数据库
的命令或重启数据库后才会生效。
点“更多”按钮弹出菜单,然后在菜单中点“修改数据库配置”:
上图中有一个选项“同步修改备库参数”,意思时把修改的参数同时应用到备库上。有三个参数[‘max_connections’, ‘max_worker_processes’, ‘max_prepared_transactions’],PostgreSQL要求备库设置的值不能小于主库,否则修改后重启备库将无法启动,所以即使没有勾中选项“同步修改备库参数”,CLup也会智能的保证备库设置的参数不会小于主库,保证不会因为修改参数而导致备库无法启动的严重故障。
点击页面修改配置
按钮即可修改对应参数的配置值,修改完是否生效在页面的【是否生效】列可以看到。
一些参数说明:
- Listen_address: 通常配置为”*“,表示数据库在本地的所有IP地址上监听。一般保持不变就可以了。
- max_connections: 数据库接受的最大连接数,由于修改此值需要重启数据库,通常我们设置一个较大的值,比如2000。
- superuser_reserved_connection: 保证默认的10即可。
- max_worker_processes: 保持默认的256即可。
- shared_preload_libraries: 配置一些常用的插件。CLup要求要把pg_stat_statements配置上去,如果没有配置上,会导致后续的数据库监控中的TopSQL的功能不正常。通常还需要把pg_store_plans插件也配置上去,这个插件可以看运行过的SQL的历史执行计划。
- archive_mode:保持默认的on即可。
- archive_command:如果不使用归档,默认的命令可以不改。如果想使用归档,请配置相应的命令,如“cp %p /data/archives/%f”,注意修改此命令时需要确保命令可以执行成功,否则会导致WAL堆积。
- shared_buffers:通常配置为机器内存的四分之一或更低一些。
- work_mem: 通常保持默认值4MB就可以了。如果经常要排序或hash join的数据量超过了4MB,可以调的大一些,这样更多的数据在内存中处理性能会好一些。但配置太大的值,当同时有多个SQL运行时,可能会消耗太多的内存,导致内存不足。
- maintenance_work_mem:一般保持默认值就可以了。
- rand_page_cost:如果数据库使用的是SSD,保持默认值即可,如果是机械硬盘,可以改大一些,比如4。
- max_wal_senders:保持默认的64即可。
- wal_keep_segments:这是PostgreSQL12版本及之前使用的参数,如果后面要为此数据库搭建备库,为了防止备库与主库延迟过大导致流复制失效,则需要设置一个比较大的值,这里是2048,当WAL文件大小是16M时,大于时保留32G的WAL日志。如果是比较小的数据库,也可以设置的小一些。通常设置为数据库大小的5%~10%的大小,具体取决于主库WAL的生成速度。
- wal_keep_size:这是PostgreSQL13版本及之后,使用此参数控制主库保留更多的WAL日志,以防止备库失效。如果后面要为此数据库搭建备库,为了防止备库与主库延迟过大导致流复制失效,则需要设置一个比较大的值,如设置为32GB, 如果是比较小的数据库,也可以设置的小一些。通常设置为数据库大小的5%~10%的大小,具体取决于主库WAL的生成速度。
- max_wal_size:通常设置为1GB至几十GB,控制产生checkpoint的频度,写的WAL的日志量超过 max_wal_size的1/3~1/2时,就会发生一次checkpoint。具体是多数还取决于参数checkpoint_completion_target,具体参见:max_wal_size、min_wal_size、wal_keep_segments参数详解
- min_wal_size:通常保持默认值即可。具体参见:max_wal_size、min_wal_size、wal_keep_segments参数详解
- checkoint_timeout: 通常保持默认5分钟即可。当然也可以适当调大,如15分钟。“一般参数”和“其它参数”Tab页中的配置项如果没有特殊要求保持默认即可。
9. 获得SQL的执行计划点“更多”按钮弹出菜单,然后在菜单中点“查询计划”:
查询计划
上图中,可以选择在那个database中执行这个SQL,“analyze”选项可以选择“true”或“false”,选择true,是用“explain analyze SQL”的方式获得SQL的执行计划,即真实执行这台SQL,选择“fasle”,是用“explain SQL”获得执行计划。
10. WEB界面中登录主机
提供WEB版本的ssh功能。
点更多
按钮弹出菜单,然后在菜单中点“登录主机”,浏览器会弹出一个新的WEB版本的ssh窗口:
11. WEB界面中psql登录数据库
点更多
按钮弹出菜单,然后在菜单中点“psql”,浏览器会弹出一个新的窗口:
12. 搭建备库
这个功能会为当前选择的数据库搭建一个新的备库。CLup可以从一个主库搭建备库,也可以从一个备库搭建另一个备库。
点更多
按钮弹出菜单,然后在菜单中点“搭备库”,然后弹出一个搭建备库的框。搭备库过程可能会比较慢,搭建时间要看数据库大小,所以这是一个异步的功能。
页面提交之后会显示搭建的备库状态是在创建中,可以到数据库管理-日志查看查看搭建过程日志,日志的最后显示success表示搭建成功
- 源复制ip:要搭建的备库的流复制的上级库的IP
- 源端口:要搭建的备库的流复制的上级库的IP
- 源库数据库软件及版本:后面选择备库的软件及版本时时需要选择与此处相同版本的数据库软件
- 流复制用户:流复制用户,如果源库已配置,则会禁止修改
- 流复制密码:源库的流复制用户密码,如果源库已配置,则会禁止修改
- 备库主机: 选择在哪台主机上建这个备库。下拉列表是运行了clup-agent的主机列表
- 备库名称: 用于标识数据库
- 备库复制ip:填写新建的备库复制IP,如果没有为流复制分布单独的网络,则填写主机的IP
- 备库端口:备库的数据库端口,默认同主库端口一样,不能修改
- 数据库软件及版本:需要选择与源库相同版本的数据库软件,选择后会自动获得版本信息
- 数据目录:备库数据存放目录,目录不存在会自动创建
- 操作系统用户:备库运行在哪个操作系统用户。如果没有此操作系统用户,需要输入后面的操作系统用户的UID,系统会自动创建此用户
- 延迟时间:用以延时搭建备库,单位毫秒,默认无延迟
- other_param:系统使用pg_basebackup搭建备库时需要带的一些附带参数,默认-P -Xs。
点击提交后开始自动创建备库,同时弹出一个框显示创建备库过程的日志:
13. 修改数据库的上级库
在一主多备的环境中,每个备库不一定都要从主库接收流复制数据,也可以从另一个备库接收流复制数据,我们可以修改某一个备库,让其从另外一个库接收流复制数据。
点更多
按钮弹出菜单,然后在菜单中点“切换备库级联”,就可以修改当前备库的上级库。注意如果当前备库在HA集群中,需要先将HA集群离线后才可以操作。弹出一个对话框:
选择为此备库选择一个新的上级库,点确定即可以完成此备库的上级库的切换。
选择一个数据库作为他的上一级主库,当前节点的所有子节点关系不变。
如果选择的上级库是他的子节点,就会将当前数据库单独分离出来作为选择的上级主库的备库,之前的子节点跟在之前的上一级节点上。
如果将一个主库的上级库指向一个备库,会在此备库会变成新主库。
例子:
- 如果所选的上级库在当前库的子节点中,所选库会作为当前库上级库的备库,其他的字节点关系不变:A(主库)—>B(当前库)—>C(所选上级库) 操作后关系变成:A—>C—>B
- 如果当前库是主库,会将所选的库作为新的主库,旧的主库作为新的主库的备库,其他的上下级关系不变:A(主库也是当前库)—>B—>C(所选库) 操作后关系变成: C(主库)—> A —>B
14. 激活备库
该功能会将一个备库激活为主库。点“更多”按钮弹出菜单,然后在菜单中点“激活”既可以完成备库的激活操作。如果备库是在一个HA集群中,则会弹出一个对话框:
激活这个备库,会导致这个备库和它的所有子节点都脱离HA集群,这些节点在后面的HA集群中将看不到。
15. 会话管理
该页面对数据库的连接(即session)进行管理,在左上角选择数据库,列表中可以查看各个连接的进程ID、状态、数据库名、用户名、应用程序、客户端地址、客户端端口、事务开始时间、SQL开始时间、等待事件、运行SQL、进程类型)。 然后根据需求可以对进程取消和强制终止:
16. 锁管理
锁管理页面,可以在这个页面看到数据库被阻塞的sql,也可以直接将sql结束掉:
17. 日志查看
可以在日志查看页面找到数据库管理模块所做的相关操作: