PostgreSQL-集群管理器-pgclusteradmin
阿弟 2017-3-7
欢迎大家踊跃投稿,投稿信箱:press@postgres.cn
阿弟,自2001年就开始使用postgresql,为中国较早的postgresql使用者。自2003年底至2014年一直担任PGSQL中国社区论坛“PostgreSQL的论坛”板块版主、管理员,参与Postgresql讨论并发表专题文章7000多帖。拥有15年的erp设计、开发和实施经验,为开源mrp系统PostMRP的作者,该系统是一套基于Postgresql专业的制造业管理软件系统。目前任职于中国第一物流控股有限公司/运力宝(北京)科技有限公司,任研发部经理。
pgclusteradmin是一款基于go开发的PostgreSQL集群管理工具,当前主要功能是实现对PostgreSQL服务进行管理,主备切换进行管理;系统支持多用户,操作认证;操作人员通过浏览器从远程登录进入管理平台,前台界面使用easyui实现。
功能列表
- 节点资料增加、编辑、删除
- 单一节点服务start、stop、restart、reload及显示服务状态
- 主备节点一键切换
部署环境
- IP:192.168.1.10
- OS:centos 7.0
- golang: go version go1.7.4 linux/amd64
- Postgresql:9.6.1
部署方法
安装golang
[root@ad ~]# yum install golang-1.7.4-1.el6.x86_64.rpm [root@ad ~]# yum install golang-src-1.7.4-1.el6.noarch.rpm [root@ad ~]# yum install golang-bin-1.7.4-1.el6.x86_64.rpm
安装PostgreSQL
使用PostgreSQL主要是用于存储管理节点资料,操作员资料及操作日志
--下载源码
wget https://ftp.postgresql.org/pub/source/v9.6.1/postgresql-9.6.1.tar.gz
--解压
tar zxf postgresql-9.6.1.tar.gz
--编译
cd postgresql-9.6.1 ./configure --prefix=/usr/local/pgsql9.6.1 --with-perl --with-tcl --with-python --with-openssl --with-pam --without-ldap --with-libxml --with-libxslt gmake gmake install
--初始化
su postgres /usr/local/pgsql9.6.1/bin/initdb -D /home/postgres/data9.6.1 -E utf8 -U postgres -W
--postgresql.conf配置
listen_addresses = '*' log_destination = 'stderr' logging_collector = on
--pg_hba.conf配置
# IPv4 local connections: host all all 192.168.1.0/24 md5
配置完成后需要重启服务,其它参数视需要自己配置
建立pgclusteradmin库并导入建立资料表
/usr/local/pgsql9.6.1/bin/psql -h 192.168.1.10 -U postgres -d postgres -p 5432 postgres=# create database pgcluster ENCODING 'utf8' template template0; \c pgcluster
--导入下面数据表及数据
--节点资料表
create table nodes ( id serial not null unique, node_name text not null unique, createtime timestamp not null default now(), host text not null, ssh_port integer not null, ssh_user text not null, ssh_password text not null, pg_bin text not null, pg_data text not null, pg_port integer not null, pg_database text not null, pg_user text not null, pg_password text not null, master_vip text, master_vip_networkcard text, slave_vip text, slave_vip_networkcard text, bind_vip_user text, bind_vip_password text, remark text ); COMMENT ON TABLE nodes IS '节点资料表'; COMMENT ON COLUMN nodes.id IS '系统编号'; COMMENT ON COLUMN nodes.node_name IS '节点名称'; COMMENT ON COLUMN nodes.createtime IS '建立时间'; COMMENT ON COLUMN nodes.host IS '主机名或ip'; COMMENT ON COLUMN nodes.ssh_port IS 'ssh服务端口号'; COMMENT ON COLUMN nodes.ssh_user IS 'ssh用户'; COMMENT ON COLUMN nodes.ssh_password IS 'ssh密码'; COMMENT ON COLUMN nodes.pg_bin IS 'pg管理程序所在路径'; COMMENT ON COLUMN nodes.pg_data IS 'pgDATA所在路径'; COMMENT ON COLUMN nodes.pg_port IS 'pg服务端口号'; COMMENT ON COLUMN nodes.pg_user IS 'pg用户'; COMMENT ON COLUMN nodes.pg_password IS 'pg密码'; COMMENT ON COLUMN nodes.master_vip IS '主节点时绑定VIP'; COMMENT ON COLUMN nodes.master_vip_networkcard IS '主节点时绑定网卡设备号'; COMMENT ON COLUMN nodes.slave_vip IS '备节点时绑定VIP'; COMMENT ON COLUMN nodes.slave_vip_networkcard IS '备节点时绑定网卡设备号'; COMMENT ON COLUMN nodes.bind_vip_user IS '绑定网卡操作用户'; COMMENT ON COLUMN nodes.bind_vip_password IS '绑定网卡操作密码';
--操作员资料表
CREATE TABLE users ( id serial not null unique, username text not null unique, password text not null ); COMMENT ON TABLE users IS '操作员资料表'; COMMENT ON COLUMN users.id IS '系统编号'; COMMENT ON COLUMN users.username IS '登录账号'; COMMENT ON COLUMN users.password IS '登录密码md5值';
--增加一个操作员记录表
INSERT INTO users (username,password) values('admin',md5('admin'));
--操作日志表
CREATE TABLE log ( id serial not null unique, createtime timestamp not null default now(), remote_ip text, modlename text, username text, log_level text, remark text ); COMMENT ON TABLE log IS '日志表'; COMMENT ON COLUMN log.id IS '系统编号'; COMMENT ON COLUMN log.createtime IS '访问时间'; COMMENT ON COLUMN log.remote_ip IS '访问客户端ip地址'; COMMENT ON COLUMN log.username IS '用户名'; COMMENT ON COLUMN log.modlename IS '模块名称'; COMMENT ON COLUMN log.log_level IS '日志级别'; COMMENT ON COLUMN log.remark IS '日志内容';
下载pgclusteradmin所需要的go支持包
--ssh支持包
[root@ad ~]# cd /usr/lib/golang/src [root@ad src]# mkdir golang.org [root@ad src]# cd golang.org/ [root@ad golang.org]# mkdir x [root@ad src]# cd x/ [root@ad x]# git clone https://github.com/golang/crypto.git 正克隆到 'crypto'... remote: Counting objects: 3256, done. remote: Total 3256 (delta 0), reused 0 (delta 0), pack-reused 3255 接收对象中: 100% (3256/3256), 2.31 MiB | 958.00 KiB/s, done. 处理 delta 中: 100% (2106/2106), done.
--session支持包
[root@ad x]# cd /usr/lib/golang/src [root@ad src]# mkdir github.com [root@ad src]# cd github.com [root@ad github.com]# mkdir astaxie [root@ad github.com]# cd astaxie/ [root@ad astaxie]# git clone https://github.com/astaxie/session 正克隆到 'session'... remote: Counting objects: 50, done. remote: Total 50 (delta 0), reused 0 (delta 0), pack-reused 50 Unpacking objects: 100% (50/50), done. [root@ad astaxie]# ll 总用量 8
--postgresql操作支持包
[root@ad astaxie]# cd /usr/lib/golang/src/github.com/ [root@ad github.com]# mkdir jackc [root@ad github.com]# cd jackc [root@ad jackc]# git clone https://github.com/jackc/pgx 正克隆到 'pgx'... remote: Counting objects: 3613, done. remote: Compressing objects: 100% (243/243), done. remote: Total 3613 (delta 157), reused 0 (delta 0), pack-reused 3370 接收对象中: 100% (3613/3613), 1.24 MiB | 228.00 KiB/s, done. 处理 delta 中: 100% (2481/2481), done.
部署配置和访问
下载pgclusteradmin源码
[root@ad pgclusteradmin]# cd /home/ad [root@ad ad]# git clone https://github.com/chenaisheng/pgclusteradmin 正克隆到 'pgclusteradmin'... remote: Counting objects: 374, done. remote: Compressing objects: 100% (177/177), done. remote: Total 374 (delta 201), reused 348 (delta 185), pack-reused 0 接收对象中: 100% (374/374), 284.09 KiB | 197.00 KiB/s, done. 处理 delta 中: 100% (201/201), done. [root@ad ad]#
配置连接数据库参数
打开pgclusteradmin.go文件,拉下最后面,找到函数extractConfig(),代码如下所示
/* 功能描述:配置postgresql连接参数 参数说明:无 返回值说明: pgx.ConnConfig -- pg连接参数结构体 */ func extractConfig() pgx.ConnConfig { var config pgx.ConnConfig config.Host = "192.168.1.10" //数据库主机host或ip config.User = "postgres" //连接用户 config.Password = "pgsql" //用户密码 config.Database = "pgcluster" //连接数据库名 config.Port = 5432 //端口号 return config }
修改成上面部署postgresql的相应参数即可
运行pgclusteradmin
[root@ad ad]# cd pgclusteradmin/ [root@ad pgclusteradmin]# go run pgclusteradmin.g
访问pgclusteradmin
打开一个浏览器,输入 http://192.168.1.10:10001即可进入管理器,192.168.1.10换成你自己ip地址即可。
使用说明
主界面说明
增加要维护的节点资料
编辑窗口如下所示
说明:
1、要维护的节点如果非主备节点,则不需要配置vip相关参数
2、Vip绑定和解绑“设备号”如果不清楚请询问你们的sa,千万别配置错了,用命令ip a可查询“设备号”
3、编辑完成后按“保存”即可
编辑节点资料
说明:节点资料维护窗口跟新增节点资料一致,说明请参考“增加节点”
删除节点资料
节点服务管理
弹出窗口如下所示
说明:
1、关闭模式只能stop/restart操作有作用
2、执行返回的结果显示在“执行结果”显示框中
主备节点切换管理
弹出窗口如下所示,下面是显示“主节点”信息
说明:
1、点击“刷新ip绑定详情”,可以把节点的最新ip绑定情况显示到“IP绑定详情”框里面
2、主备切换只能同时勾选两个节点记录
3、两个节点必需是一主一备
4、要切换的两个节点当前状态必需是处于“运行中”
5、系统自动判断两个节点是否为主备关系
6、如果需要解绑和绑定vip的话,则需要配置绑定vip的操作用户和密码,一般为root
7、系统自动检测绑定的vip是否被其它节点使用
8、设置完参数后,按“一键切换”即可
下图是“切换参数配置”框
修改登录密码
下面是修改登录密码窗口
说明:
1、修改登录密码需要先输入旧的登录密码
2、新的密码需要连续连接两次
3、录入完成后按“确认修改”即可完成登录密码的修改
退出登录状态
退出后系统返回到登录页面
开发计划
短期
1、增加单节点vip管理
2、增加postgresql参数配置
3、增加操作员管理
4、增加权限管理
5、根据go的异步执行特性,重写部分代码,提高应用执行效率
长期
1、数据库相关对象管理模块
2、数据库一些指标监控模块
3、数据库巡检相关模块
https://hubin.tiancebbs.cn/ http://huilong.sctcbmw.cn/sdtas/ http://shenghuo.china-bbs.com/yiyang/ http://shenghuo.china-bbs.com/bjpg/ http://fuyang.tjtcbmw.cn/hainan/ http://shenghuo.china-bbs.com/nhq/ https://ljchengdong.tiancebbs.cn/ http://nalei.zjtcbmw.cn/scbg/ http://cf.lstcxxw.cn/bjcd/ https://fenlei.tiancebbs.cn/xinyu/ https://gushancunjing.tiancebbs.cn/ https://heqing.tiancebbs.cn/ http://tuiguang.hntcxxw.cn/wujiaqu/ http://js.sytcxxw.cn/qingdao/ http://ly.shtcxxw.cn/rizhao/ http://jinqiang.ahtcbmw.cn/chongmingxian/ http://wutai.cqtcxxw.cn/pudongsh/
https://zulin.tiancebbs.cn/sh/1970.html https://aihuishou.tiancebbs.cn/sh/3648.html https://aihuishou.tiancebbs.cn/sh/1124.html https://dazhou.tiancebbs.cn/qths/467033.html https://aihuishou.tiancebbs.cn/sh/1117.html https://taicang.tiancebbs.cn/hjzl/456847.html https://changshushi.tiancebbs.cn/hjzl/461403.html https://zulin.tiancebbs.cn/sh/4082.html https://changshushi.tiancebbs.cn/hjzl/462838.html https://zulin.tiancebbs.cn/sh/1249.html https://zulin.tiancebbs.cn/sh/2781.html https://zulin.tiancebbs.cn/sh/388.html https://zulin.tiancebbs.cn/sh/1537.html https://taicang.tiancebbs.cn/hjzl/456891.html https://taicang.tiancebbs.cn/hjzl/459747.html https://zulin.tiancebbs.cn/sh/3431.html https://chengde.tiancebbs.cn/qths/466201.html
http://ty.cqtcxxw.cn/maanshan/ http://ouyu.hftcbmw.cn/qingdao/ http://ouyu.hftcbmw.cn/sjsq/ http://bjtcxxw.cn/wuzhong/ https://bsqgaoxin.tiancebbs.cn/ http://wogao.ahtcbmw.cn/shaoyang/ https://yongqing.tiancebbs.cn/ http://shengshun.njtcbmw.cn/luwansh/ http://js.sytcxxw.cn/hnqz/ http://js.sytcxxw.cn/xuzhou/ http://yuanbang.tjtcbmw.cn/jinzhou/ https://luoyuanzhen.tiancebbs.cn/ http://shimai.zjtcbmw.cn/huangpush/ http://bjtcxxw.cn/tjhb/ http://km.lstcxxw.cn/danzhou/ https://fenlei.tiancebbs.cn/dgsz/ http://yz.cqtcxxw.cn/bazp/
七夕写给老婆的暖心话:https://www.nanss.com/yulu/3883.html 激励名言:https://www.nanss.com/xuexi/3642.html 抗击疫情作文:https://www.nanss.com/xuexi/3183.html 黑暗系冰冷名字:https://www.nanss.com/mingcheng/3771.html 妻子送老公生日祝福语:https://www.nanss.com/yulu/3851.html 小露珠像什么:https://www.nanss.com/xuexi/3809.html 微信标签名称大全集:https://www.nanss.com/mingcheng/3580.html 吹泡泡作文:https://www.nanss.com/xuexi/3312.html 个性另类网名:https://www.nanss.com/mingcheng/3814.html 短暂的相聚:https://www.nanss.com/wenan/3537.html 送别的话:https://www.nanss.com/mingcheng/3930.html 无偿献血倡议书:https://www.nanss.com/shenghuo/3527.html 劳动创造幸福作文:https://www.nanss.com/xuexi/3210.html 我想变成一只小鸟:https://www.nanss.com/xuexi/3199.html 理发店名字大全:https://www.nanss.com/shenghuo/3869.html 三个鬼念什么:https://www.nanss.com/shenghuo/3627.html 余生看淡一切善待自己的说说:https://www.nanss.com/wenan/3525.html 表扬孩子的奖状的短句:https://www.nanss.com/wenan/3797.html 恰同学少年读后感:https://www.nanss.com/xuexi/3443.html 党性锻炼总结:https://www.nanss.com/gongzuo/3416.html 专业技术工作总结:https://www.nanss.com/gongzuo/3380.html 任何题目都可以套的万能作文:https://www.nanss.com/xuexi/3682.html 低调晒儿子的赞美话:https://www.nanss.com/yulu/3828.html 征求意见稿:https://www.nanss.com/gongzuo/2690.html cf战队名字:https://www.nanss.com/mingcheng/3790.html 蜘蛛开店续写:https://www.nanss.com/xuexi/3201.html 一件难忘的事作文:https://www.nanss.com/xuexi/2878.html 伤感短句:https://www.nanss.com/yulu/3769.html 安全工作的重要性:https://www.nanss.com/gongzuo/3629.html 邀请信:https://www.nanss.com/shenghuo/3590.html
pgcluster发布一个新的版本
本次更新“巡检报告”这一模块内容比较多,涉及到10多个接口和,总共20多个函数
巡检报告统计的内容有
1、表空间--统计表空间占用大小,表及索引文件数量
2、角色--统计各个角色具有的权限,准许并发连接数,口令状态,角色拥有的数据库数,数据库表,索引数。
3、数据库--统计数据库默认的属性值,准许并发连接数,占用空间,拥有数据表数,索引数。
4、数据表--统计数据表存储表空间,所有者,记录数,索引数,占用空间(表文件,索引文件分别统计),顺序扫描,索引扫描访问情况,以及垃圾回收情况。
5、索引--统计索引存储表空间,所有者,是否唯一索引,占用空间,索引扫描次数以及返回索引定义。
6、节点的一些状态值统计。
7、支持统计结果生成excel报表
更多详细情况见
https://github.com/chenaisheng/pgclusteradmin
或者
https://git.oschina.net/chenaisheng/pgclusteradmin
最近更新
1、增加参数配置多版本管理及参数模板文件管理
2、所有涉及到ssh登录的接口或函数增加公钥、私钥认证方法
pgclusteradmin增加几个功能模块和重写了部分接口
1、增加postgreql.conf,pg_hba.conf,recovery.conf一键配置reload,restart
2、增加“VIP绑定”的解绑功能
3、增加“备机唤醒”。支持一键唤醒并且绑定VIP。唤醒成功后系统会检查节点是否为“同步复制模式”和是否有“同步备机”连接上来,如果是“同步复制模式”并且没有“同步备机”连接上来,程序会主动把节点降级为“异步复制”模式。
4、重写了“服务管理”接口,解决了日志重定向后错误日志提取问题
5、修复了使用pg_basebackup生成备节点后还没启动前或者备机启动后连接不上主机时,使用pg_controldata获取节点的运行状态错误判断
6、优化了部分接口,由原来的顺序执行修改为异步执行,大大的提高执行效率
升级或查看更详细的内容见下面连接
https://github.com/chenaisheng/pgclusteradmin
或者
https://git.oschina.net/chenaisheng/pgclusteradmin
pgpool本身就自带了pgpooladmin工具了
我好像没有看到这个工具可以管理pgpool。
今晚修改"getnoderowsHandler"接口,由原来的顺序获取列表中各个节点的运行状态修改为异步获取,大大的提高了列表接口返回效率,特别是节点多的情况下