部署Skylab的基础服务Lava#
Lava是Skylab基础组件,包含Lava命令行工具与Lava基础服务两部分。Lava命令行工具包含了平台组件部署所需命令,比如lava scp, lava ssh等。Lava基础服务提供基础的可视化部署WebUI与服务。本节主要介绍Lava基础组件的安装流程。
安装单节点Lava#
前提#
本节默认yum源已经配置在IP为192.168.1.10的机器。
本节安装之前需要准备1台主机,默认使用root用户,各个节点上即将安装的组件如下表所示:
角色主机 |
oushu1 |
---|---|
IP |
192.168.1.11 |
role |
lava master |
配置yum源:
# 从yum源所在机器获取repo文件
scp oushu@192.168.1.10:/etc/yum.repos.d/oushu.repo /etc/yum.repos.d/oushu.repo
# 安装lava命令行管理工具
yum clean all
yum makecache
yum install lava
安装#
修改安装脚本配置lava-env.sh
:
位置:/usr/local/oushu/lava/conf/lava-env.sh
单节点 standalone 为 true
master节点信息为必填(hostname、username、password为当前机器 linux ssh登陆信息)
#!/bin/bash
############ deploy mode ################
export standalone=true # lava deploy in standalone mode
export start_mode=premise # premise / k8s / cloud
######## machine basic config ###########
export master_hostname= # hostname of master machine
export master_username= # ssh username of master machine
export master_password= # ssh password of master machine
export master_data_ip= # data ip of master machine
export master_manage_ip= # manage ip of master machine
export standby_hostname= # hostname of standby machine
export standby_username= # ssh username of standby machine
export standby_password= # ssh password of standby machine
export standby_data_ip= # data ip of standby machine
export standby_manage_ip= # manage ip of standby machine
######## postgres basic config ##########
export PGDATA=/usr/pgdata # postgres data dir
export PGPORT=4432 # postgres listener port
export PGUSER=oushu # postgres default user
export PGPASSWORD=Oushu6@China # postgres default password
export PGMASTER=${master_data_ip} # postgres master ip
export PGSTANDBY=${standby_data_ip} # postgres standby ip (empty if postgres run as standalone)
export PGHOME=/usr/pgsql-14 #
export POSTGRES_VIP= # postgres vip entry (only works in ha mode)
export POSTGRES_VIP_PORT=9999 # postgres vip entry port (only works in ha mode)
######## nginx basic config #############
export nginx_vip= # nginx entry ip (standalone nginx ip or vip)
########## web port config ##############
export SSL=false #
export LAVASERVER_HTTPS_PORT=1611 #
export LAVASERVER_HTTP_PORT=1612 #
export LAVASERVER_HTTP_PROXY_PORT=1614 #
export LAVASERVER_HTTPS_PROXY_PORT=1616 #
export LAVASERVER_RPC_PORT=1613 #
export LAVASERVER_RPC_PROXY_PORT=1615 #
export LAVAADMIN_HTTPS_PORT=1651 #
export LAVAADMIN_HTTP_PORT=1652 #
export LAVAADMIN_TCP_PROXY_PORT=1655 #
export LAVAADMIN_RPC_PORT=1653 #
export LAVAADMIN_RPC_PROXY_PORT=1656 #
export LAVADATAEND_HTTP_PORT=1671 #
export LAVADATAEND_HTTPS_PORT=1671 #
export LAVADATAEND_TCP_PROXY_PORT=1673 #
按顺序执行下列命令安装lava基础组件:
(注意看log 如果有报错 就别往下执行了)
lava postgres-install master
lava infra-install master
lava infra-start master
lava infra-register master
配置#
默认Lava配置一般无需手动修改就可以启动,常见的配置修改为:
修改端口配置
在 /usr/local/oushu/conf/lava-admin文件夹修改basic.config.xml
在 /usr/local/oushu/conf/lava-server文件夹修改basic.config.xml
前端路由配置
在 /usr/local/oushu/premise-ui-common/lava-fe-core/conf文件夹修改routes.json
验证安装结果#
访问
http://192.168.1.11:3000
默认登陆用户:oushu
默认登陆密码:Oushu6@China
登陆之后可以看到首页,如图所示:
使用#
常用功能 |
命令 |
---|---|
启动主节点 |
lava infra-start master |
停止主节点 |
lava infra-stop master |
查看状态 |
lava infra-status |
启动postgres |
lava postgres-start master |
停止postgres |
lava postgres-stop master |
安装高可用Lava#
前提#
本节默认yum源已经配置在IP为192.168.1.10的机器。
本节安装之前需要准备2台主机,2个可以绑定上述2台主机的虚拟IP,下称 VIP1 和 VIP2
两个 VIP 一个保证 nginx 高可用,下称VIP1,另一个保证 pg-pool 高可用,下称VIP2
默认使用root用户,各个节点上即将安装的组件如下表所示:
角色主机 |
oushu1 |
oushu2 |
---|---|---|
IP |
192.168.1.11 |
192.168.1.12 |
role |
lava master |
lava standby |
在master节点和standby节点分别配置yum源:
# 从yum源所在机器获取repo文件
scp oushu@192.168.1.10:/etc/yum.repos.d/oushu.repo /etc/yum.repos.d/oushu.repo
# 安装lava命令行管理工具
yum clean all
yum makecache
yum install lava
安装#
首先,需要在两台机器上安装 keepalived 配置 VIP1 可以跳转访问两台机器,keepalived 监听脚本先配置个返回true的
keepalived 的安装包和安装方式需要参考 keepalived 官网,https://www.keepalived.org/
在master节点和standby节点分别修改安装脚本配置lava-env.sh
:
位置:/usr/local/oushu/lava/conf/lava-env.sh
单节点 standalone 为 false
master 和 standby 节点信息为必填(hostname、username、password为当前机器 linux ssh登陆信息)
nginx_vip 为 VIP1 保证 nginx 高可用,由 keepalived 负责转发/漂移
POSTGRES_VIP 为 VIP2 保证 pg_pool 高可用,不需要配置在 keepalived 中
#!/bin/bash
############ deploy mode ################
export standalone=true # lava deploy in standalone mode
export start_mode=premise # premise / k8s / cloud
######## machine basic config ###########
export master_hostname= # hostname of master machine
export master_username= # ssh username of master machine
export master_password= # ssh password of master machine
export master_data_ip= # data ip of master machine
export master_manage_ip= # manage ip of master machine
export standby_hostname= # hostname of standby machine
export standby_username= # ssh username of standby machine
export standby_password= # ssh password of standby machine
export standby_data_ip= # data ip of standby machine
export standby_manage_ip= # manage ip of standby machine
######## postgres basic config ##########
export PGDATA=/usr/pgdata # postgres data dir
export PGPORT=4432 # postgres listener port
export PGUSER=oushu # postgres default user
export PGPASSWORD=Oushu6@China # postgres default password
export PGMASTER=${master_data_ip} # postgres master ip
export PGSTANDBY=${standby_data_ip} # postgres standby ip (empty if postgres run as standalone)
export PGHOME=/usr/pgsql-14 #
export POSTGRES_VIP= # postgres vip entry (only works in ha mode)
export POSTGRES_VIP_PORT=9999 # postgres vip entry port (only works in ha mode)
######## nginx basic config #############
export nginx_vip= # nginx entry ip (standalone nginx ip or vip)
########## web port config ##############
export SSL=false #
export LAVASERVER_HTTPS_PORT=1611 #
export LAVASERVER_HTTP_PORT=1612 #
export LAVASERVER_HTTP_PROXY_PORT=1614 #
export LAVASERVER_HTTPS_PROXY_PORT=1616 #
export LAVASERVER_RPC_PORT=1613 #
export LAVASERVER_RPC_PROXY_PORT=1615 #
export LAVAADMIN_HTTPS_PORT=1651 #
export LAVAADMIN_HTTP_PORT=1652 #
export LAVAADMIN_TCP_PROXY_PORT=1655 #
export LAVAADMIN_RPC_PORT=1653 #
export LAVAADMIN_RPC_PROXY_PORT=1656 #
export LAVADATAEND_HTTP_PORT=1671 #
export LAVADATAEND_HTTPS_PORT=1671 #
export LAVADATAEND_TCP_PROXY_PORT=1673 #
按顺序执行
master节点执行下列命令安装lava基础组件:
lava postgres-install master
lava postgres-install pgpool
lava infra-install master
lava infra-start master
standby节点执行下列命令安装lava基础组件:
lava postgres-install standby
lava postgres-install pgpool
lava infra-install standby
lava infra-start standby
安装完成之后,在master节点执行:
lava infra-register ha
配置#
默认Lava配置一般无需手动修改就可以启动,常见的配置修改为:
修改端口配置
在 /usr/local/oushu/conf/lava-admin文件夹修改basic.config.xml
在 /usr/local/oushu/conf/lava-server文件夹修改basic.config.xml
前端路由配置
在 /usr/local/oushu/premise-ui-common/lava-fe-core/conf文件夹修改routes.json
验证安装结果#
访问
http://192.168.1.11:3000
默认登陆用户:oushu
默认登陆密码:Oushu6@China
登陆之后可以看到首页,如图所示:
成功访问后,修改 keepalived 监听脚本,改为监听nginx。
#!/bin/bash
killall -0 nginx
if [[ $? -ne 0 ]]; then
sudo systemctl stop keepalived.service
fi
验证 VIP1 通过 3000 端口也可以访问 Skylab
使用#
常用功能 |
命令 |
---|---|
启动主节点 |
lava infra-start master |
停止主节点 |
lava infra-stop master |
查看状态 |
lava infra-status |
启动postgres |
lava postgres-start master |
停止postgres |
lava postgres-stop master |
节点恢复#
从节点停止postgres#
主节点查看pg集群状态#
/usr/pgsql-14/bin/repmgr -f /usr/local/oushu/conf/repmgr.conf service status
将pg从节点删除#
执行下面命令并验证是否删除节点成功 /usr/pgsql-14/bin/repmgr -f /usr/local/oushu/conf/repmgr.conf primary unregister –node-id 1
将pg从节点重新加入集群#
拉取主节点数据#
repmgr -F -h lavaha524109-12183-12269-1 -U repmgr -d repmgr -f -p 4432 /usr/local/oushu/conf/repmgr.conf standby clone
启动postgres服务#
注册为集群的从节点#
/usr/pgsql-14/bin/repmgr -f /usr/local/oushu/conf/repmgr.conf standby register
再次查看集群状态#
启动守护进程#
/usr/pgsql-14/bin/repmgrd -f /usr/local/oushu/conf/repmgr.conf
查看pgpool中pg节点状态#
down,执行节点状态命令修改状态 /bin/pcp_attach_node -U pgpool -h 10.0.195.101 -p 9898 -n 0 再次查看节点状态
此时数据库集群从节点重新加入完成!
单节点升级高可用#
高可用准备#
首先,需要在两台机器上安装 keepalived 配置 VIP1 可以跳转访问两台机器,keepalived 监听脚本先配置个返回true的
keepalived 的安装包和安装方式需要参考 keepalived 官网,https://www.keepalived.org/
在master节点和standby节点分别修改安装脚本配置lava-env.sh
:
位置:/usr/local/oushu/lava/conf/lava-env.sh
单节点 standalone 为 false
master 和 standby 节点信息为必填(hostname、username、password为当前机器 linux ssh登陆信息)
需设置 postgres集群所在服务器下 postgres用户 之间的ssh 免密登录
nginx_vip 为 VIP1 保证 nginx 高可用,由 keepalived 负责转发/漂移
POSTGRES_VIP 为 VIP2 保证 pg_pool 高可用,不需要配置在 keepalived 中
无论单点还是HA,机器信息必须完整。
暂停现节点服务#
sudo lavaadmin stop
sudo lavaadmin prometheus stop
sudo lavaserver stop
sudo lava-dataend stop
sudo su root -c "export LD_LIBRARY_PATH=/usr/local/oushu/nginx/lib;/usr/local/oushu/nginx/sbin/nginx -p /usr/local/oushu/nginx -s stop"
(检查nginx进程 如果没有关闭 使用kill命令)
升级 postgres 为高可用#
在上述 高可用准备 阶段,将主从节点信息补全
将目前存在的单点作为postgres集群主节点#
确定主节点是否安装 repmgr,验证方式如下,已安装省略此步骤,理论上6x环境以下配置项是存在的
#切换至postgres用户
bash-4.2$ /usr/pgsql-14/bin/repmgr -v
bash: /usr/pgsql-14/bin/repmgr: 没有那个文件或目录
查看pg 当前配置文件 对比以下配置项是否完整,理论上6x环境以下配置项是存在的
listen_addresses = '*'
port = $PGPORT
password_encryption = md5
log_filename = 'postgresql-%Y-%m-%d.log'
max_wal_senders = 10
max_replication_slots = 10
wal_level = hot_standby
archive_mode = always
archive_command = '/bin/bash archive.sh %p %f'
archive_timeout = 1800
hot_standby = on
wal_keep_size = 64
full_page_writes = on
wal_log_hints = on
shared_preload_libraries = repmgr
recovery_target_timeline = 'latest'
max_connections = 1000
查看repmgr配置文件是否存在
less /usr/local/oushu/conf/repmgr.conf
#示例如下
node_id=1
node_name='lava-217-1'
conninfo='host=lava-217-1 user=repmgr dbname=repmgr port=4432 connect_timeout=2'
data_directory='/data1/pgdata'
failover=automatic
promote_command='/usr/pgsql-14/bin/repmgr standby promote -f /usr/local/oushu/conf/repmgr.conf --log-to-file'
follow_command='/usr/pgsql-14/bin/repmgr standby follow -f /usr/local/oushu/conf/repmgr.conf --log-to-file --upstream-node-id=%n'
service_start_command = '/usr/pgsql-14/bin/pg_ctl start -D /data1/pgdata'
service_stop_command = '/usr/pgsql-14/bin/pg_ctl stop -D /data1/pgdata'
service_restart_command = '/usr/pgsql-14/bin/pg_ctl restart -D /data1/pgdata'
service_reload_command = '/usr/pgsql-14/bin/pg_ctl reload -D /data1/pgdata'
repmgrd_pid_file='/tmp/repmgrd.pid'
log_file='/tmp/repmgrd.log'
priority=100
monitor_interval_secs = 2
connection_check_type ='ping'
reconnect_attempts = 4
reconnect_interval = 5
前三步应该是 统一状态,6x环境理论上都有
查看当前pg主节点所在服务器 pg服务、repmgr服务是否正常启动
ps -ef |grep postgres
ps -ef |grep repmgr
ps -ef |grep repmgrd
若上述服务不存在,需启动服务,启动命令如下
postgres用户下执行
export LD_LIBRARY_PATH=/usr/pgsql-14/lib;export PATH=/usr/pgsql-14/bin:$PATH
//启动pg主库
pg_ctl start
//启动repmgr
/usr/pgsql-14/bin/repmgr -F -f /usr/local/oushu/conf/repmgr.conf primary register;
//启动repmgrd
/usr/pgsql-14/bin/repmgrd -f /usr/local/oushu/conf/repmgr.conf;
安装pgpool
#确认pgpool是否安装
#切换至root用户下执行,展示以下信息则说明已安装,
pgpool -v
pgpool-II version 4.3.9 (tamahomeboshi)
#若已安装 确认在lava-env.sh中已填写 standby节点信息,确认完毕后重启pgpool服务
su postgres -c "export LD_LIBRARY_PATH=/usr/pgsql-14/lib;export PATH=/usr/pgsql-14/bin:$PATH;/bin/pgpool -f /etc/pgpool.conf -m fast stop"
su postgres -c "export LD_LIBRARY_PATH=/usr/pgsql-14/lib;export PATH=/usr/pgsql-14/bin:$PATH;/bin/pgpool -f /etc/pgpool.conf -n -D > /tmp/pgpool.log 2>&1 &"
#此时服务重启完成
ps -ef|grep pgpool
ifconfig
#查看pgpool服务是否启动成功,且执行ifconfig查看虚拟ip是否绑定成功
#以上均完成 切换至postgres用户下,尝试执行psql 终端命令测试9999端口是否可以连接数据库,密码为:passwd,
#若pgpool用户密码错误,尝试修改为nobody用户
/usr/pgsql-14/bin/psql -h $虚拟ip -Upgpool -p 9999 -d postgres
#连接成功,说明主节点完成
postgres从服务器操作开始
配置lava-env.sh 填写主从节点信息
安装postgres、repmgr并启动
lava postgres-install standby
安装pgpool并启动
lava postgres-install pgpool
重复执行4步骤验证postgres,repmgr服务是否正常
#查看pgpool服务是否启动成功,且执行ifconfig查看虚拟ip是否绑定成功
#以上均完成 切换至postgres用户下,尝试执行psql 终端命令测试9999端口是否可以连接数据库,密码为:passwd,
#若pgpool用户密码错误,尝试修改为nobody用户
/usr/pgsql-14/bin/psql -h $虚拟ip -Upgpool -p 9999 -d postgres
#连接成功,说明主节点完成
show pool_nodes;
#展示节点状态
当pg_status状态皆为up时,说明多节点可用 至此,pg节点升级多节点完成
修改现节点(master)配置#
修改 /usr/local/oushu/conf/lava-server/postgres.config.xml
postgres.host 修改为 postgres 虚拟 ip 地址
postgres.port 修改为 pgpool 监听的端口 9999
修改 /usr/local/oushu/conf/lava-server/basic.config.xml
Web.vip 修改为 nginx 虚拟 ip 地址
Web.seed 修改为主备两台机器的数据网络 ip:1660 逗号分隔
修改 /usr/local/oushu/conf/lava-admin/assistpg.config.xml
postgres.host 修改为 postgres 虚拟 ip 地址
postgres.port 修改为 pgpool 监听的端口 9999
修改 /usr/local/oushu/conf/lava-admin/basic.config.xml
Sys.lava_server_port 修改为 nginx LavaServerHTTP proxy 的端口 1614
Sys.lava_server_host 修改为 nginx 虚拟 ip 地址
Sys.lava_server_rpc_port 修改为 nginx LavaServerRPC proxy 的端口 1615
Sys.oushudb_auth 修改为 nginx 虚拟 ip 地址 + nginx LavaServerHTTP proxy 的端口 1614
Web.vip 修改为 nginx 虚拟 ip 地址
修改 /usr/local/oushu/conf/lava-admin/postgres.config.xml
postgres.host 修改为 postgres 虚拟 ip 地址
postgres.port 修改为 pgpool 监听的端口 9999
修改 /usr/local/oushu/conf/lava-dataend/jdbc.properties
jdbc.host 修改为 nginx 虚拟 ip 地址
jdbc.port 修改为 pgpool 监听的端口 9999
修改 /usr/local/oushu/nginx/include/http/premise-frontend.conf
需要修改下列 upstream
websocket,api-common 应为两台 lavaserver 的 ip 和监听的端口
websocket-monitor,websocket-dashboard,api-admin 应为两台 lavaadmin 的 ip 和监听的端口
api-datasource 应为两台 lavadataend 的 ip 和监听的端口
示例:
upstream websocket {
server 10.0.196.97:1612;
server 10.0.195.76:1612;
}
upstream websocket-monitor {
server 10.0.196.97:1652;
server 10.0.195.76:1652;
}
upstream websocket-dashboard {
server 10.0.196.97:1652;
server 10.0.195.76:1652;
}
upstream api-admin {
server 10.0.196.97:1652;
server 10.0.195.76:1652;
}
upstream api-common {
server 10.0.196.97:1612;
server 10.0.195.76:1612;
}
upstream api-datasource {
server 10.0.196.97:1671;
server 10.0.195.76:1671;
}
upstream api-dbServer {
server 10.0.196.97:1632;
server 10.0.195.76:1632;
}
创建 /usr/local/oushu/nginx/include/stream/premise-backstage-ha.conf
upstream 同上需要添加两台高可用服务器的 ip 和对应服务监听的端口(端口一般不用动,把ip换了就行)
# LavaServer 代理端口
server {
listen 1614;
proxy_timeout 1d;
proxy_pass LavaServerHttp;
}
server {
listen 1616;
proxy_timeout 1d;
proxy_pass LavaServerHttps;
}
# LavaServer RPC请求 代理端口
server {
listen 1615;
proxy_timeout 1d;
proxy_pass LavaServerRPC;
}
# LavaAdmin 代理端口
server {
listen 1655;
proxy_timeout 1d;
proxy_pass LavaAdmin;
}
# LavaAdmin RPC请求 代理端口
server {
listen 1656;
proxy_timeout 1d;
proxy_pass LavaAdminRPC;
}
# DataEnd代理端口
server {
listen 1673;
proxy_timeout 1d;
proxy_pass DataEnd;
}
# upstream
upstream LavaServerHttp {
server 10.0.201.75:1612;
server 10.0.202.104:1612;
}
upstream LavaServerHttps {
server 10.0.201.75:1611;
server 10.0.202.104:1611;
}
upstream LavaServerRPC {
server 10.0.201.75:1613;
server 10.0.202.104:1613;
}
upstream LavaAdmin {
server 10.0.201.75:1652;
server 10.0.202.104:1652;
}
upstream LavaAdminRPC {
server 10.0.201.75:1653;
server 10.0.202.104:1653;
}
upstream DataEnd {
server 10.0.201.75:1671;
server 10.0.202.104:1671;
}
启动master节点
lava infra-start master
安装新节点(standby)#
lava infra-install standby
# 上传 license 至 /usr/local/oushu/conf/lava-server/ 下
lava infra-start standby
更新注册信息#
由于单节点部署时,有可能将lava-server、lava-admin、data-end、nginx等组件注册到lava-admin元数据内
所以在更新HA后,需要更新元数据
在 lavaadmin 库,cluster_group 表中,根据 product 列,删除上述组件。
update custer_group set deleted_at = now() where product = 'xxxxx';
更新注册json(machine那个json不用管),位于 /usr/local/oushu/lava/request/ha(这一步需要先在页面机器管理中将新机器注册进来)
根据实际情况修改machines数组中的机器信息,在平台基础组件lava所安装的机器执行:
psql lavaadmin -p 4432 -U wutong -c "select m.id,m.name,s.name as subnet,m.private_ip as data_ip,m.public_ip as manage_ip,m.assist_port,m.ssh_port from machine as m,subnet as s where m.subnet_id=s.id;"
获取到所需的机器信息,根据服务角色对应的节点,将机器信息添加到machines数组中。
调用命令注册集群:
组件名称为LavaServer、LavaAdmin、Nginx、DataEnd
lava login -u oushu -p ******** -T {租户id}
lava onprem-register service -s 组件名称 -f 组件对应json
如果返回值为:
Add service by self success
则表示注册成功,如果有错误信息,请根据错误信息处理。
添加机器(可选)#
如果您希望通过可视化界面安装或者注册纳管组件,将要安装或纳管的机器需要在节点管理功能中注册。
登陆到平台后,选择自动部署功能,在左侧菜单栏中找到节点管理。
在节点管理页面中,点击新建新建节点,弹出窗中根据网络环境配置子网信息,地域,可用区,这里的子网是一个逻辑网络分组的概念,每个子网中必须要有管理节点(带管理网卡IP的节点),地域和可用区只是在本逻辑分组中的字符标签,没有实际逻辑意义。
根据节点信息在子网中添加节点,注意这里的用户需要在机器上有sudo免密的权限。
添加节点成功后,在节点列表页面将会有对应节点的展示。
如果添加失败,则在节点添加的日志中有报错信息,根据报错信息修改节点或连接配置即可。
pgpool + repmgr 高可用架构 升级pgpool高可用架构#
pg节点最少三个、pgpool节点最少3个
升级前需要在/etc/hosts文件中 添加对应节点内网ip和hostname
需设置 postgres集群所在服务器下 postgres用户 之间的ssh 免密登录
#以下为必做操作
#需要给password设置密码 然后添加免密
#passwd postgres
#[all servers]# mkdir ~/.ssh
#[all servers]# chmod 700 ~/.ssh
#[all servers]# cd ~/.ssh
#[all servers]# ssh-keygen -t rsa -f id_rsa_pgpool
#[all servers]# ssh-copy-id -i id_rsa_pgpool.pub postgres@server1
#[all servers]# ssh-copy-id -i id_rsa_pgpool.pub postgres@server2
#[all servers]# ssh-copy-id -i id_rsa_pgpool.pub postgres@server3
#
#[all servers]# su - postgres
#[all servers]$ mkdir ~/.ssh
#[all servers]$ chmod 700 ~/.ssh
#[all servers]$ cd ~/.ssh
#[all servers]$ ssh-keygen -t rsa -f id_rsa_pgpool
#[all servers]$ ssh-copy-id -i id_rsa_pgpool.pub postgres@server1
#[all servers]$ ssh-copy-id -i id_rsa_pgpool.pub postgres@server2
#[all servers]$ ssh-copy-id -i id_rsa_pgpool.pub postgres@server3
现有环境关闭主从节点pgpool 主从节点pg#
#关闭pgpool
/bin/pgpool -f /etc/pgpool.conf -m fast stop
export LD_LIBRARY_PATH=/usr/pgsql-14/lib;export PATH=/usr/pgsql-14/bin:$PATH;
#关闭pg
/usr/pgsql-14/bin/pg_ctl -D /usr/pgdata/ stop
ps -ef|grep repmgr
kill 3029
修改现有pg主节点相关配置#
#如果有新增节点、将新增节点写入pgpass免密文件 权限需要给postgres用户
vi /var/lib/pgsql/.pgpass
lava***:4432:replication:repl:passwd
lava***:4432:replication:repl:passwd
lava***:4432:postgres:postgres:passwd
lava***:4432:postgres:postgres:passwd
chmod 600 /var/lib/pgsql/.pgpass
#修改主节点postgresql.conf
#注释掉原先的wal_level = hot_standby
echo "wal_level = replica" >> $PGDATA/postgresql.conf
#修改主节点pg_hba.conf 修改
echo "host replication repl 0.0.0.0/0 trust" >> $PGDATA/pg_hba.conf
在主节点所在机器 执行#
#新增环境变量
vi /usr/local/oushu/conf/lava/lava-env.sh
export PASSWD=passwd #默认 无需修改
export NET_NAME=eth0 #网卡名 需要跟实际环境修改
export SSHPORT=22 #ssh端口 需要跟实际环境修改
#卸载老的pgpool
yum remove -y pgpool-II
#安装新的pgpool
#修改/usr/local/oushu/lava/install/pg-master.sh
#以下内容有sql执行,老环境部分sql是已执行的,已注释部分
#!/bin/bash
set -e
SCRIPT_HOME=$(cd `dirname $0`; pwd)
CONF_HOME=/usr/local/oushu/conf
source $SCRIPT_HOME/../conf/lava-env.sh
if [ -n "$standby_hostname" ]; then
source /usr/local/oushu/conf/lava/lava-env.sh
echo "$master_hostname:$PGPORT:replication:repl:$PASSWD
$master_hostname:$PGPORT:postgres:postgres:$PASSWD
$standby_hostname:$PGPORT:replication:repl:$PASSWD
$standby_hostname:$PGPORT:postgres:postgres:$PASSWD" > /var/lib/pgsql/.pgpass
fi
if [ -n "$standby1_hostname" ]; then
source /usr/local/oushu/conf/lava/lava-env.sh
echo "$standby1_hostname:$PGPORT:replication:repl:$PASSWD
$master_hostname:$PGPORT:replication:repl:$PASSWD
$master_hostname:$PGPORT:postgres:postgres:$PASSWD
$standby_hostname:$PGPORT:replication:repl:$PASSWD
$standby_hostname:$PGPORT:postgres:postgres:$PASSWD
$standby1_hostname:$PGPORT:postgres:postgres:$PASSWD" > /var/lib/pgsql/.pgpass
fi
#设置pg免密登录
chown -R postgres:postgres /var/lib/pgsql/.pgpass
su postgres -c "chmod 600 /var/lib/pgsql/.pgpass"
if [[ ! -d /usr/local/oushu/log ]]
then
mkdir -p /usr/local/oushu/log
fi
#su postgres -c "source $SCRIPT_HOME/../conf/lava-env.sh || true;source $SCRIPT_HOME/../conf/pg-env.sh || true;pg_ctl start"
source $SCRIPT_HOME/../conf/pg-env.sh || true
psql -p $PGPORT postgres -U postgres -c "create role repl with replication login encrypted password 'passwd';"
psql -p $PGPORT postgres -U postgres -c "ALTER USER postgres WITH PASSWORD 'passwd';"
psql -p $PGPORT template1 -c "CREATE EXTENSION pgpool_recovery"
echo "[INFO] successfully"
sh /usr/local/oushu/lava/install/pgpool.sh
在从节点所在机器 执行pgpool#
#卸载老的pgpool
yum remove -y pgpool-II
#确认/usr/local/oushu/lava/install/pg-standby.sh为新
sh /usr/local/oushu/lava/install/pg-standby.sh
#确认/usr/local/oushu/lava/install/pgpool.sh为新
sh /usr/local/oushu/lava/install/pgpool.sh
查看pg是否正常#
export LD_LIBRARY_PATH=/usr/pgsql-14/lib;export PATH=/usr/pgsql-14/bin:$PATH;
/usr/pgsql-14/bin/psql -h 10.0.*** -Upgpool -p 9999 -d postgres
show pool_nodes;
新增pg节点#
需设置 postgres集群所在服务器下 postgres用户 之间的ssh 免密登录
建立新节点、老节点之间的免密登录
另外、需要在/etc/hosts文件中 增加内网ip hostname
老节点操作#
#修改/usr/local/oushu/conf/lava/lava-env.sh,新增以下内容
export standby1_hostname= 新增节点hostname # hostname of standby machine
#切换Postgres用户 追加 新节点/var/lib/pgsql/.pgpass
6x20240904dev625083m1-***-3:4432:replication:repl:passwd
6x20240904dev625083m1-***-3:4432:postgres:postgres:passwd
#重启pgpool 先将所有的pgpool节点全部关闭
/bin/pgpool -f /etc/pgpool.conf -m fast stop
#切换至root用户
sh /usr/local/oushu/lava/install/pgpool.sh
#老节点全部执行完之后可以执行上述验证操作
新节点操作(免密登录之后)
#root用户下
yum install -y lava
#将其他节点
# /usr/local/oushu/conf/lava/lava-env.sh
# /usr/local/oushu/lava/install/pg-standby.sh pgpool.sh 复制过来
sh /usr/local/oushu/lava/install/pg-standby.sh
sh /usr/local/oushu/lava/install/pgpool.sh
#执行之后通过命令查看pgpool集群状态
pcp_watchdog_info -p 9898 -h 10.0.0.0 -U pgpool
#pgpool集群部署完成之后可以拉起新增的备节点
pcp_recovery_node -h 10.0.0.0 -p 9898 -U pgpool -n 2
#再次查看所有节点状态
新环境安装pgpool高可用postgres架构(脚本方式)#
pg节点最少三个、pgpool节点最少3个
升级前需要在/etc/hosts文件中 添加对应节点内网ip和hostname
需设置 postgres集群所在服务器下 postgres用户 之间的ssh 免密登录,ssh端口可在lava-env配置
#以下为必做操作
#需要给password设置密码 然后添加免密
#passwd postgres
#[all servers]# mkdir ~/.ssh
#[all servers]# chmod 700 ~/.ssh
#[all servers]# cd ~/.ssh
#[all servers]# ssh-keygen -t rsa -f id_rsa_pgpool
#[all servers]# ssh-copy-id -i id_rsa_pgpool.pub postgres@server1
#[all servers]# ssh-copy-id -i id_rsa_pgpool.pub postgres@server2
#[all servers]# ssh-copy-id -i id_rsa_pgpool.pub postgres@server3
#
#[all servers]# su - postgres
#若提示无权限,切回root,执行mkdir /home/postgres/.ssh
#[all servers]$ mkdir ~/.ssh
#若提示无权限,切回root,执行chmod 700 /home/postgres/.ssh
#[all servers]$ chmod 700 ~/.ssh
#切回postgres cd /home/postgres/.ssh/
#[all servers]$ cd ~/.ssh
#[all servers]$ ssh-keygen -t rsa -f id_rsa_pgpool
#[all servers]$ ssh-copy-id -i id_rsa_pgpool.pub postgres@server1
#[all servers]$ ssh-copy-id -i id_rsa_pgpool.pub postgres@server2
#[all servers]$ ssh-copy-id -i id_rsa_pgpool.pub postgres@server3
pg主节点 修改替换 /usr/local/oushu/conf/lava/lava-env.sh 添加pg服务起所在节点信息 新环境默认存在#
export master_hostname=20240911dev415032-16819-16905-1
export standby_hostname=20240911dev415032-16819-16905-2 # hostname of standby machine
export standby1_hostname=20240911dev415032-16819-16905-3
export PASSWD=passwd
export NET_NAME=eth0
export SSHPORT=22
export POSTGRES_VIP=10.0.*** # postgres vip entry port (only works in ha mode)
pg 主节点 执行 sh /usr/local/oushu/lava/install/pg-master.sh#
执行完查询postgres进程是否启动 结果应该是有进程
出现上述错误是因为Pgpool还没有安装扩展,暂时忽略
pg 主节点 执行 sh /usr/local/oushu/lava/install/pgpool.sh#
#执行完查询pgpool进程是否启动 结果应该是有进程
#执行之后通过命令查看pgpool集群状态
pcp_watchdog_info -p 9898 -h 10.0.*** -U pgpool
#pgpool集群部署完成之后可以拉起新增的备节点
pcp_recovery_node -h 10.0.*** -p 9898 -U pgpool -n 1
pg从节点 修改替换 /usr/local/oushu/conf/lava/lava-env.sh 添加pg服务起所在节点信息#
export master_hostname=20240909dev1***
export standby_hostname=20240909dev1*** # hostname of standby machine
export standby1_hostname=20240909dev***
export PASSWD=passwd
export NET_NAME=eth0
export POSTGRES_VIP= # postgres vip entry port (only works in ha mode)
pg 从节点 执行 sh /usr/local/oushu/lava/install/pg-standby.sh#
#执行完查询postgres进程是否启动 结果应该是 没有 进程
出现上述错误是因为Pgpool还没有安装扩展,暂时忽略
pg 从节点 执行 sh /usr/local/oushu/lava/install/pgpool.sh#
#执行完查询pgpool进程是否启动 结果应该是有进程
#执行之后通过命令查看pgpool集群状态
pcp_watchdog_info -p 9898 -h 10.0.*** -U pgpool
#pgpool集群部署完成之后可以拉起新增的备节点
pcp_recovery_node -h 10.0.*** -p 9898 -U pgpool -n 2
export LD_LIBRARY_PATH=/usr/pgsql-14/lib;export PATH=/usr/pgsql-14/bin:$PATH;
/usr/pgsql-14/bin/psql -h 10.0.*** -Upgpool -p 9999 -d postgres
安装其他组件#
注册机器之后,即可安装其他组件,其他组件的安装,详见相关章节。
组件相关配置#
功能说明#
配置修改最新配置展示
配置修改
配置版本管理
配置回滚
配置对比
视图切换
前提#
配置状态说明:
当前版本: 指当前集群运行使用的配置版本,并不一定为文件系统上的配置内容
最新版本: 集群各节点的文件系统上的版本内容,当重启集群时改配置才可以生效,生效后状态变为当前版本
版本保存说明
仅保存新版本: 该操作仅将skylab平台上修改的配置内容分发到指定机器的各节点配置目录下,并不会应用修改后的配置
保存并重启集群: 该操作包含分发修改后的配置到各节点且重启集群各角色,最终使集群应用修改后的配置
使用说明#
注:以下说明基于Hive组件,其他组件同理
新建集群时skylab为您提供足以启动该类集群的默认的配置,但是如果您有配置修改的需求,您可以在这一步对配置文件做您期待的修改。如图您可以在每个配置文件中新增参数、修改属性及其对应的值,同时您也可以删除skylab提供的默认参数。最终该配置将会作为当前集群的初始配置。
新建集群后您可以选择集群配置使用配置功能
在配置详情页面可查看当前集群最新版本,在当前页面您不仅可以查看最新的配置,同时skylab还提供了修改/切换配置展示视图/保存新版本
您可以在配置文件右上脚选择切换当前视图,skylab提供由key&value形式的展示转化为指定配置类型的文本模式且提供重做/注释等快捷操作。 key&value切换为文本模式如下图
当您处于文本模式下时再次点击右上角即可切换为key&value视图模式当您在配置详情处完成了预期配置修改,您可以点击保存新版本button去应用您的最新配置到集群上,弹窗中的版本名称为必填项。您有两种配置保存策略,仅保存新版本只会分发配置并不会让修改后的配置生效,保存并重启集群会将新版本生效。
保存新版本后您可查看当前版本历史,如下图
在版本历史中skylab提供配置对比功能,您可以选中两个版本进行配置对比,以发现配置之间的区别。如下图
在版本历史列表中您可以选择回滚到指定版本中
回滚后版本历史状态同步发生改变,回滚过程中集群服务会先被停止掉再重新启动,回滚前请确认是否期待停止集群再重启。
原理说明#
配置回滚功能简述: 由skylab平台提供默认配置,并将页面输入的自定义配置存储到数据库中,数据库中的配置内容为集群内所有角色的的公有配置项。由于不同角色的配置文件存在特异化的配置项,skylab为争取做到最大程度的覆盖所有组件,便不将特殊化配置项纳入平台数据库管理内。当您在skylab生成新的配置版本时,skylab借助后台助手将集群完整的配置落盘。当您回滚时后台助手会帮您完成版本的覆盖。
视图切换功能简述: skylab平台内支持大部分配置类型的视图转化,包括xml、json、conf、yaml等。但目前暂不支持env类型配置文件查看文本类型。