PostgreSQL-集群管理器-pgclusteradmin

pgclusteradmin是一款基于go开发的PostgreSQL集群管理工具,当前主要功能是实现对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" //数据库主机hostip

    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地址即

可。

 使用说明

 

主界面说明

attachments-2017-03-1eo65kBA58ca2d4c30a1

增加要维护的节点资料

attachments-2017-03-BQxEleMz58ca2d6b26fe

编辑窗口如下所示

attachments-2017-03-Q5gfdnpK58ca2d835200

说明:

1、要维护的节点如果非主备节点,则不需要配置vip相关参数

2、Vip绑定和解绑“设备号”如果不清楚请询问你们的sa,千万别配置错了,用命令ip a可查询“设备号”

3、编辑完成后按“保存”即可

 

编辑节点资料

attachments-2017-03-lxWY6RJr58ca2da90468

说明:节点资料维护窗口跟新增节点资料一致,说明请参考“增加节点”

 

删除节点资料

 

attachments-2017-03-UkNVZmAk58ca2dcfecce

节点服务管理

attachments-2017-03-ygRSmZMk58ca2e1707ab

弹出窗口如下所示

attachments-2017-03-FROjLBzU58ca2e3664e1

说明:

1、关闭模式只能stop/restart操作有作用

2、执行返回的结果显示在“执行结果”显示框中

 

主备节点切换管理


attachments-2017-03-37DyKEvw58ca2e7d0f07

弹出窗口如下所示,下面是显示“主节点”信息

attachments-2017-03-993VGq4H58ca2ea4abb1

说明:

 

1、点击“刷新ip绑定详情”,可以把节点的最新ip绑定情况显示到“IP绑定详情”框里面

2、主备切换只能同时勾选两个节点记录

3、两个节点必需是一主一备

4、要切换的两个节点当前状态必需是处于“运行中”

5、系统自动判断两个节点是否为主备关系

6、如果需要解绑和绑定vip的话,则需要配置绑定vip的操作用户和密码,一般为root

7、系统自动检测绑定的vip是否被其它节点使用

8、设置完参数后,按“一键切换”即可

 

下图是“切换参数配置”框



attachments-2017-03-DpUvJxZu58ca2eeeb043

attachments-2017-03-DpUvJxZu58ca2eeeb043


修改登录密码

attachments-2017-03-3CWbeYIb58ca2f0fc943下面是修改登录密码窗口

attachments-2017-03-BIcgTVXY58ca2f33be16


说明:

1、修改登录密码需要先输入旧的登录密码

2、新的密码需要连续连接两次

3、录入完成后按“确认修改”即可完成登录密码的修改

 

退出登录状态

attachments-2017-03-o9zs5lJF58ca2f4b57ed



退出后系统返回到登录页面

attachments-2017-03-dOtDEMRX58ca2f7d0fba

开发计划

 

短 期

 

1、增加单节点vip管理

2、增加postgresql参数配置

3、增加操作员管理

4、增加权限管理

5、根据go的异步执行特性,重写部分代码,提高应用执行效率

 

长 期

 

1、数据库相关对象管理模块

2、数据库一些指标监控模块

3、数据库巡检相关模块

 






  • 发表于 2017-03-16 14:08
  • 阅读 ( 51 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
石天
石天

437 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章