部署 Skylab 基础服务 Lava
本页目录
部署 Skylab 基础服务 Lava#
Lava 是 Skylab 基础组件,包含 Lava 命令行工具与 Lava 基础服务两部分。Lava 命令行工具包含了平台组件部署所需命令,比如 lava scp, lava ssh 等。Lava 基础服务提供基础的可视化部署 Web UI 与服务。本节主要介绍 Lava 基础组件的安装流程。
Lava 支持单点部署与高可用部署,您可以根据需求选择单点或者高可用的部署方式,具体步骤参见相应章节。
安装单节点 Lava#
前提#
本节默认 yum 源已经配置在 IP 为 192.168.1.10 的机器。安装过程需要使用 root 用户。
准备 License 文件
安装过程中,需要提前准备好与软件版本(包含所有需要安装、使用的产品)相匹配的 License 文件。
准备1台主机
各个节点上即将安装的组件如下表所示:
主机 |
host1 |
---|---|
IP |
192.168.1.11 |
role |
Lava Master |
配置yum源
从 yum 源所在机器获取 repo 文件:
# 从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 version
创建log目录
在数据盘创建log目录,并link到 /usr/local/oushu/log,防止log或监控信息过多导致系统盘满。
安装 Lava 基础服务#
准备配置文件#
修改安装脚本配置/usr/local/oushu/lava/conf/lava-env.sh
。
把配置文件中
standalone
设置为 true。master 节点机器信息(master_hostname,master_username,master_password,master_data_ip,master_manage_ip)为必填项, 这些信息为当前机器 linux ssh 登录信息。
注意:无论单点还是HA,机器信息必须完整。
#!/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 #
配置文件中的如下配置项通常必须要修改,如果没有特殊需求,其他配置项可以保持默认值不变:
standalone: 设置为 true,意为安装 单点 的 Lava。
机器基础配置(machine basic config)部分:为当前机器 linux ssh 登录信息。所有”master_xxx” 配置项为必填项。 无论单点还是 HA 部署,机器信息必须完整。
执行安装命令#
注意看日志,如果有报错,处理完报错后再继续下一步!
安装 Lava
lava postgres-install master
lava infra-install master
上传 License 文件
上传 license 至 /usr/local/oushu/conf/lava-server/ 目录,名字必须为skylab.license。
启动 Lava
lava infra-start master
// 注意:如果手动启动各组件,需要先启动lava-server,之后再启动其他组件
注册 Lava 到自身
注意:用哪个用户(租户)登录,则注册到哪个用户(租户)名下。
lava login -u oushu -p Oushu6@China -T 根租户
lava infra-register master
配置(按需)#
安装完 Lava 之后,使用默认配置即可启动。也可以根据需要修改端口、最大连接数等配置信息,修改完之后需要重启相应组件。
LavaAdmin 配置:
/usr/local/oushu/conf/lava-admin/basic.config.xml
LavaServer 配置:
/usr/local/oushu/conf/lava-server/basic.config.xml
微前端各前端模块路由配置:
/usr/local/oushu/premise-ui-common/lava-fe-core/conf/routes.json
前端到后端服务的路由配置:
/usr/local/oushu/nginx/include/http/premise-frontend.conf
验证安装结果#
访问并登录 http://192.168.1.11:3000
默认登录租户:根租户
默认登录用户:oushu
默认登录密码:Oushu6@China
可正常登录并在登录之后可以看到首页,则安装成功。如图所示:
使用/运维#
下表中是 Lava 一些常见命令:
常用功能 |
命令 |
---|---|
启动主节点 |
lava infra-start master |
停止主节点 |
lava infra-stop master |
查看状态 |
lava infra-status |
启动postgres |
lava postgres-start master |
停止postgres |
lava postgres-stop master |
安装高可用 Lava#
Lava 的高可用包括 Lava 基础服务的高可用与 Lava 的元数据库 PG 的高可用。
Lava 基础服务(包含 LavaServer、LavaAdmin、DBServer、Dataend)的高可用通过 VIP + Keepalived + Nginx 实现,VIP + Keepalived 保证了 Nginx 的高可用,Nginx 通过负载均衡的方式保证了 Lava 基础服务的高可用。
PG 高可用通过 VIP + PGPool 实现。
推荐 Lava 安装两个节点,PG 与 PGPool 安装三个节点。如图所示:
前提#
本节默认 yum 源已经配置在 IP 为 192.168.1.10 的机器。安装过程需要使用 root 用户。
准备 License 文件
安装过程中,需要提前准备好与软件版本(包含所有需要安装、使用的产品)相匹配的 License 文件。
准备3台主机
本节安装之前需要准备3台主机(最少2台,3台为最佳),2个虚拟IP(假设为 VIP1 和 VIP2) ,VIP1 保证 Nginx 的高可用,VIP2 保证 PGPool 的高可用。
各个节点上即将安装的组件如下表所示:
主机 |
host1 |
host2 |
host3(可选) |
---|---|---|---|
IP |
192.168.1.11 |
192.168.1.12 |
192.168.1.13 |
Lava 相关角色 |
Keepalived |
Keepalived |
|
PG 相关角色 |
PGPool |
PGPool |
PGPool |
为 PG 配置免密
每一个节点都执行如下操作:
# 为 postgres 用户设置密码
sudo passwd postgres
su - postgres
mkdir ~/.ssh
chmod 700 ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa -f id_rsa_pgpool
# 必须给hostname做免密
ssh-copy-id -i id_rsa_pgpool.pub postgres@server1
ssh-copy-id -i id_rsa_pgpool.pub postgres@server2
ssh-copy-id -i id_rsa_pgpool.pub postgres@server3
配置 yum 源
在 Master 节点和每一个 Standby 节点分别配置 yum 源:
# 从yum源所在机器获取repo文件
scp oushu@192.168.1.10:/etc/yum.repos.d/oushu.repo /etc/yum.repos.d/oushu.repo
安装 Lava 命令行管理工具
在 Master 节点和每一个 Standby 节点分别安装 Lava 命令行工具:
yum clean all
yum makecache
yum install lava
验证安装结果
在每一个节点安装完之后,运行如下命令检查安装结果,命令运行成功并且返回的版本号是期望的版本号,则证明安装成功。
lava version
安装#
安装 Keepalived#
Keepalived 的安装包和安装方式需要参考官网:https://www.keepalived.org/。
需要在其中两台机器上安装 Keepalived,并配置 VIP1 可以跳转访问两台机器。
下载 Keepalived 安装 tar 包并解压。
进入解压后的 Keepalived 目录并运行 make。
sudo ./configure
sudo make && sudo make install
创建检测脚本文件。
sudo touch /home/oushu/check_nginx.sh
sudo chmod 755 /home/oushu/check_nginx.sh
脚本内容如下:
#!/bin/bash
exit 0
修改配置文件 /etc/keepalived/keepalived.conf (注释处根据情况修改)。
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id worker
vrrp_skip_check_adv_addr
vrrp_garp_interval 0.000001
vrrp_gna_interval 0.000001
}
vrrp_script chk_nginx {
script "/home/oushu/check_nginx.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state [MASTER|BACKUP] #俩节点不一样
nopreempt
interface eno1
virtual_router_id 51
priority [101|100] #俩节点不一样主节点高1
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#虚拟ip地址VIP1
}
track_script {
chk_nginx
}
}
启动。
sudo systemctl start keepalived.service
验证安装结果。
在 Keepalived 主节点运行 ifconfig,查看是否有新增虚拟网卡绑定 VIP1。
修改安装脚本配置#
在 Master 节点和每一个 Standby 节点分别修改安装脚本配置/usr/local/oushu/lava/conf/lava-env.sh
。
#!/bin/bash
############ deploy mode ################
export standalone=false # 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
export standby1_hostname= # hostname of the second PG/PGPool standby machine
export standby1_username= # ssh username of second PG/PGPool standby machine
export standby1_password= # ssh password of second PG/PGPool standby machine
export standby1_data_ip= # data ip of second PG/PGPool standby machine
export standby1_manage_ip= # manage ip of second PG/PGPool 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=VIP2 # postgres vip entry (only works in ha mode)
export POSTGRES_VIP_PORT=9999 # postgres vip entry port (only works in ha mode)
export NET_NAME=eth0 # network card binded for VIP2, need change the name according to the existing network card of data ip (only works in ha mode)
export SSHPORT=22 # ssh port(PGPool install will use "postgres" system user to ssh)
export PG_USER_POSTGRES_PASSWORD=postgres # postgres user "postgres" password
export PG_USER_PGPOOL_PASSWORD=pgpool # postgres user "pgpool" password (only works in ha mode)
export PG_USER_REPL_PASSWORD=repl # postgres user "repl" password (only works in ha mode)
export PCP_COMMAND_PASS=passwd # pgpool command PCP* password (only works in ha mode)
export PGPOOLLOGFILE=/data/pgpool/pgpool_log # pgpool log file (only works in ha mode)
######## nginx basic config #############
export nginx_vip=VIP1 # 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 #
配置文件中的如下配置项通常必须要修改,如果没有特殊需求,其他配置项可以保持默认值不变:
standalone: 设置为 false,意为安装 HA 的 Lava。
机器基础配置(machine basic config)部分:为当前机器 linux ssh 登录信息。”master_xxx” 配置项是必填项;如果只有一个 Standby 节点,需要填写 “standby_xxx”配置项;如果有两个 Standby 节点,需要填写 “standby_xxx” 与 “standby1_xxx” 配置项。 无论单点还是 HA 部署,机器信息必须完整。
POSTGRES_VIP:PGPool 所使用的 VIP2。
NET_NAME:默认值为 “eth0”,需要修改为 PGPool 安装的机器的数据网卡(内网)名字。
nginx_vip: 设置为 VIP1。 保证 Nginx 高可用,由 Keepalived 负责转发/漂移。
POSTGRES_VIP:设置为 VIP2。 保证 PGPool 高可用,无需要配置在 Keepalived 中。
执行安装命令#
按顺序执行下列命令安装 Lava 基础服务:
注意看日志,如果有报错,处理完报错后再继续下一步!
安装 Master 节点。
在准备安装Lava Master 的节点,运行如下命令安装 PG Master、PGPool 与 Lava Master:
lava postgres-install master
lava postgres-install pgpool
lava infra-install master
*上述操作完成之后及时验证部署是否成功
bash-4.2$ psql -h 10.0.*.* -p 9999 -U pgpool
test=# show pool_nodes;
|node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change |
|---------|----------|-------|--------|-----------|-----------|---------|---------|------------|-------------------|-------------------|-------------------|------------------------|---------------------|
|node_id | hostname | port number | status name | actual backend status | load balance weight | backend role | actual backend role | select_cnt | load_balance_node | replication delay | replication state | sync replication state | last status change time |
|0 | /tmp | 11002 | up | up | 0.500000 | primary | primary | 0 | false | 0 | | | 2021-02-27 15:10:19|
|1 | /tmp | 11003 | up | up | 0.500000 | standby | standby | 0 | true | 0 | streaming | async | 2021-02-27 15:10:19|
(2 rows)
上传 License 文件到如下路径,否则后面注册步骤会失败:
/usr/local/oushu/conf/lava-server/skylab.license
启动 Lava Master:
lava infra-start master
// 注意:如果手动启动各组件,需要先启动lava-server,之后再启动其他组件
安装 Standby 节点:
在每一个准备安装 Standby 的节点上,运行如下命令安装 PG Standby、 PGPool 与 Lava Standby, 并启动 Lava:
lava postgres-install standby
lava postgres-install pgpool
*上述部署完成验证是否部署成功
bash-4.2$ psql -h 10.0.*.* -p 9999 -U pgpool
test=# show pool_nodes;
|node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change |
|---------|----------|-------|--------|-----------|-----------|---------|---------|------------|-------------------|-------------------|-------------------|------------------------|---------------------|
|node_id | hostname | port number | status name | actual backend status | load balance weight | backend role | actual backend role | select_cnt | load_balance_node | replication delay | replication state | sync replication state | last status change time |
|0 | /tmp | 11002 | up | up | 0.500000 | primary | primary | 0 | false | 0 | | | 2021-02-27 15:10:19|
|1 | /tmp | 11003 | up | up | 0.500000 | standby | standby | 0 | true | 0 | streaming | async | 2021-02-27 15:10:19|
(2 rows)
继续安装部署备节点lava相关服务
lava infra-install standby
lava infra-start standby
注册:
安装完成之后,在 Lava Master 节点执行如下命令,完成注册 Lava 各节点到集群管理元数据中。
注意:默认注册到”根租户”的”oushu”用户,如果您想注册到其他租户、用户下,请修改第一个登录命令(lava login…)中的租户、用户名、密码进行登录。
# 注册 -u:用户;-p:密码;-T:租户名称或者租户编码
lava login -u oushu -p Oushu6@China -T 根租户
lava infra-register ha
配置(按需)#
安装完 Lava 之后,使用默认配置即可启动。也可以根据需要修改端口、最大连接数等配置信息,修改完之后需要重启相应组件。
LavaAdmin 配置:
/usr/local/oushu/conf/lava-admin/basic.config.xml
LavaServer 配置:
/usr/local/oushu/conf/lava-server/basic.config.xml
微前端各前端模块路由配置:
/usr/local/oushu/premise-ui-common/lava-fe-core/conf/routes.json
前端到后端服务的路由配置:
/usr/local/oushu/nginx/include/http/premise-frontend.conf
验证安装结果#
访问并登录 http://192.168.1.11:3000(默认登录租户:根租户,默认登录用户:oushu,默认登录密码:Oushu6@China)
可正常登录并在登录之后可以看到首页,则安装成功。如图所示:
配置Keepalive#
成功访问后,修改 Keepalived 监听脚本/home/oushu/check_nginx.sh
改为监听 Nginx:
#!/bin/bash
killall -0 nginx
if [[ $? -ne 0 ]]; then
sudo systemctl stop keepalived.service
fi
配置完成之后,可访问并登录 http://VIP1:3000(默认登录租户:根租户,默认登录用户:oushu,默认登录密码:Oushu6@China)成功,则证明 VIP 与 Keepalive 配置成功。
使用/运维#
Lava 命令#
Lava 相关命令使用 root 用户执行。
常用功能 |
命令 |
---|---|
启动主节点 |
lava infra-start master |
停止主节点 |
lava infra-stop master |
查看状态 |
lava infra-status |
启动从节点 |
lava infra-start standby |
停止从节点 |
lava infra-stop standby |
启动postgres |
lava postgres-start master |
停止postgres |
lava postgres-stop master |
启动postgres |
lava postgres-start standby |
停止postgres |
lava postgres-stop standby |
重写pgpool相关脚本 |
lava postgres-install pgpool-shell |
修改postgres用户密码脚本 |
sudo lava postgres-install postgres-edit pgpool(pg user) wjtest(pgpass) true(是否为pg主节点) |
lava login 命令不使用明文密码的方式#
在右上角个人中心中,生成API密钥。
将密钥写在一个文件中,例如
./.lavatoken
将token读至变量$token
lavatoken=`cat ./.lavatoken`
使用$token作为认证,调用接口
curl -l -k -H "Content-type:application/json" -H "Token:$lavatoken" -X GET localhost:1652/admin/deploy/getAllMachines
pg高可用集群修改pg用户密码#
#停止所有节点pgpool
pcp_stop_pgpool -h 10.0.*,* -p 9898 -U pgpool -m f -s c
#pg主节点执行
sudo lava postgres-install postgres-edit pgpool(pg user) wjtest(pgpass) true(是否为pg这节点)
#pg 从节点执行(全部从节点)
sudo lava postgres-install postgres-edit pgpool(pg user) wjtest(pgpass) false(是否为pg这节点)
#pg 从节点执行(全部从节点)
export LD_LIBRARY_PATH=/usr/pgsql-14/lib;export PATH=/usr/pgsql-14/bin:$PATH;
pg_ctl -D /usr/pgdata/ stop
#pg主节点执行
export LD_LIBRARY_PATH=/usr/pgsql-14/lib;export PATH=/usr/pgsql-14/bin:$PATH;
pg_ctl -D /usr/pgdata/ restart
启动pg各个节点(全部节点、无顺序)
/bin/pgpool -f /etc/pgpool.conf -n -D > /tmp/pgpool.log 2>&1 &
使用pcp命令一键拉起pg从节点
pcp_recovery_node -h 10.0.192.250 -p 9898 -U pgpool -n 1
1为 pgpool节点 node_id
|node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change |
|---------|----------|-------|--------|-----------|-----------|---------|---------|------------|-------------------|-------------------|-------------------|------------------------|---------------------|
|node_id | hostname | port number | status name | actual backend status | load balance weight | backend role | actual backend role | select_cnt | load_balance_node | replication delay | replication state | sync replication state | last status change time |
|0 | /tmp | 11002 | up | up | 0.500000 | primary | primary | 0 | false | 0 | | | 2021-02-27 15:10:19|
|1 | /tmp | 11003 | up | up | 0.500000 | standby | standby | 0 | true | 0 | streaming | async | 2021-02-27 15:10:19|
PGPool 相关常用命令#
PGPool-II是一个流行的 PostgreSQL 连接池和复制管理器,它提供了一个名为 PCP(Pgpool-II Connection Provider)的工具,用于监控和管理 Pgpool-II 的服务。本节介绍 PCP 的一些常用命令以及使用方法。
建议使用 postgres 用户运行 PCP 的命令。
通用参数#
-h hostname 或者 –host=hostname
该参数指定服务器所在机器的主机名。如果提供的值以斜杠(/
)开头,那么它会被当作Unix域套接字的目录使用。
-p port 或者 –port=port
该参数用于指定PCP服务的端口号。默认情况下,端口号是9898
。如果 PGPool 配置了 VIP,则应该输入 VIP。
-U username 或者 –username=username 该参数用于指定 PCP 认证的用户名。如果不指定,默认使用操作系统的当前用户名。根据本文步骤安装 PGPool 之后的用户名是 pgpool,密码是 passwd。
-w 或者 –no-password 这个选项指示在连接时从不提示输入密码。如果没有通过 a.pcppass 文件提供密码,连接尝试将会失败。这个选项在批处理作业和脚本中很有用,因为此时没有用户在场输入密码。
-W 或者 –password 这个选项会强制提示输入密码(通常这是自动发生的)。
-d 或者 –debug 该参数用于开启 debug 级别日志日志.
-v 或者 –verbose 该参数用于开启详细输出。
-V 或者 –version 该参数用于查看命令的版本。
-? 或者 –help 该参数用于查看命令帮助。
pcp_attach_node#
将给定的 PG 节点连接到 Pgpool-II。
参数:
-n node_id 或者 –node_id=node_id
将要绑定的后端节点(PG)节点的 ID。这个 ID 通常在
pgpool.conf
文件中配置,用于标识 pgpool-II 管理的每个后端 PostgreSQL 服务器。
例子:
pcp_attach_node -h VIP2 -p 9898 -U pgpool -n node_id
pcp_watchdog_info#
该命令展示 PGPool 的 watchdog 信息。
例子:
pcp_watchdog_info -h VIP2 -p 9898 -U pgpool
Password:
3 3 YES server1:9999 Linux server1.localdomain server1
server1:9999 Linux server1.localdomain server1 9999 9000 4 LEADER 0 MEMBER
server2:9999 Linux server2.localdomain server2 9999 9000 7 STANDBY 0 MEMBER
server3:9999 Linux server3.localdomain server3 9999 9000 7 STANDBY 0 MEMBER
pcp_recovery_node#
用于将指定的后端节点附加到恢复流程中,旨在恢复该几点的状态。
参数:
-n node_id 或者 –node-id=node_id
指定后端节点的 ID。这个 ID 通常在 pgpool.conf
文件中配置,用于标识 pgpool-II 管理的每个后端 PostgreSQL 服务器。
例子:
pcp_recovery_node -h VIP2 -p 9898 -U pgpool -n node_id
pcp_reload_config#
用于重新加载 pgpool-II 的配置文件,而无需重启 pgpool-II 服务。这对于在不中断现有连接的情况下应用配置更改非常有用。
参数: -s scope 或者 –scope=scope 该参数指定命令的影响范围。支持的命令范围如下(默认为 “local”):
c, cluster
:重新加载集群中所有 pgpool-II 节点的配置文件。l, local
:仅重新加载本地 pgpool-II 节点的配置文件。
例子:
pcp_reload_config -h VIP2 -p 9898 -U pgpool -s c
show pool_nodes#
该命令为 PGPool 命令,首先需要通过 psql 命令连接 PGPool(默认9999端口,此处连接 PGPool 的用户名、密码为 PG 的用户名、密码),然后执行该命令。
它用于返回 pgpool-II 当前配置中所有节点的列表。这些信息通常包括节点的 ID、状态(例如,是否在线、是否为主节点等)、后端数据库的连接信息(如主机名、端口号等)以及任何与节点相关的额外配置信息。
例子:
postgres=# show pool_nodes;
node_id |
hostname |
port |
status |
pg_status |
lb_weight |
role |
pg_role |
select_cnt |
load_balance_node |
replication_delay |
replication_state |
replication_sync_state |
last_status_change |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
node_id |
hostname |
port number |
status name |
actual backend status |
load balance weight |
backend role |
actual backend role |
select_cnt |
load_balance_node |
replication delay |
replication state |
sync replication state |
last status change time |
0 |
/tmp |
11002 |
up |
up |
0.500000 |
primary |
primary |
0 |
false |
0 |
2021-02-27 15:10:19 |
||
1 |
/tmp |
11003 |
up |
up |
0.500000 |
standby |
standby |
0 |
true |
0 |
streaming |
async |
2021-02-27 15:10:19 |
node_id:节点的唯一标识符。 |
hostname:节点的主机名或IP地址。
port:节点监听的端口号。
status:PGPool 端管理的 PG 节点的当前状态,如up(正常)或down(故障)。
pg_status:后台 PG 真实的状态,与 status 状态可能不一致。
lb_weight:负载均衡权重,用于在负载均衡时决定节点的优先级。
role:节点的角色,如 primary(主节点)或 standby(备节点)。
select_cnt:该节点上执行的SELECT查询次数(可能因Pgpool-II版本而异,不是所有版本都显示此列)。
load_balance_node:指示该节点是否参与负载均衡。我们配置的只有主节点对外服务,所以,只有 primary 节点的该字段为 true。
replication_delay:复制延迟,表示备节点相对于主节点的数据延迟(可能因Pgpool-II版本和配置而异,不是所有版本都显示此列)。
修改 PG 与 PGPool 的配置的步骤#
修改 PG 配置#
需要修改每个节点配置
vi /$PGDATA/postgresql.conf
看修改具体配置项决定重新加载配置或者重新启动服务
pg_ctl -D $PGDATA reload/restart
reload: 重新读取配置。
restart: 重启 PG 服务,会导致预期内的高可用集群主从故障转移。
通过 psql 连接 PGPool(默认端口9999,使用 PG 的用户名、密码),查看节点状态
postgres=# show pool_nodes;
如果节点状态不正常,执行修改节点状态命令 pcp_attach_node 更新状态,执行 pcp_recovery_node 重新拉起 PG。
修改 PGPool 配置#
根据实际修改配置项并执行 PGPool 重启命令(使用 postgres 用户)。
sudo su postgres
export LD_LIBRARY_PATH=/usr/pgsql-14/lib;
export PATH=/usr/pgsql-14/bin:$PATH;
/bin/pgpool -f /etc/pgpool.conf -m fast stop
/bin/pgpool -f /etc/pgpool.conf -n -D > /tmp/pgpool.log 2>&1 &
或者使用 PGPool 重新加载配置命令,具体参数查看上文。
pcp_reload_config -h VIP2 -p 9898 -U pgpool -s c
PG 高可用常见问题以及处理方式#
问题排查步骤#
本章节描述了如果出现了 PG 高可用相关问题,如何定位、解决问题。
查看 PGPool 状态
首先查看 PGPool 服务的状态,如果 PGPool 服务的状态不健康,需要首先修复 PGPool 服务。
pcp_watchdog_info -h VIP2 -p 9898 -U pgpool
Password:
3 3 YES server1:9999 Linux server1.localdomain server1
server1:9999 Linux server1.localdomain server1 9999 9000 4 LEADER 0 MEMBER
server2:9999 Linux server2.localdomain server2 9999 9000 7 STANDBY 0 MEMBER
server3:9999 Linux server3.localdomain server3 9999 9000 7 STANDBY 0 MEMBER
以上是通过 PGPool 命令查看,也可以通过 ps -ef|grep service
查看服务进程是否正常。
如果发现某节点 PGPool 服务下线,检查 /etc/pgpool.conf 然后启动 PGPool,继续执行上述命令验证。
PGPool 启动命令(postgres用户):
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 &
PSQL 连接 PGPool
bash-4.2$ psql -h VIP2 -p 9999 -U pgpool
test=# show pool_nodes;
|node_id | hostname | port | status | pg_status | lb_weight | role | pg_role | select_cnt | load_balance_node | replication_delay | replication_state | replication_sync_state | last_status_change |
|---------|----------|-------|--------|-----------|-----------|---------|---------|------------|-------------------|-------------------|-------------------|------------------------|---------------------|
|node_id | hostname | port number | status name | actual backend status | load balance weight | backend role | actual backend role | select_cnt | load_balance_node | replication delay | replication state | sync replication state | last status change time |
|0 | /tmp | 11002 | up | up | 0.500000 | primary | primary | 0 | false | 0 | | | 2021-02-27 15:10:19|
|1 | /tmp | 11003 | up | up | 0.500000 | standby | standby | 0 | true | 0 | streaming | async | 2021-02-27 15:10:19|
(2 rows)
注意:查看 PG 节点是否正常(status 字段是否为 “up”),节点状态都正常或者部分节点正常才能 psql 连接成功,若 PG 节点全部异常,则 psql 连接会失败。
pcp_recovery_node -h VIP2 -p 9898 -U pgpool -n node_id
问题1: psql 连接 PGPool 失败#
通过 psql 连接 PGPool 的时候,有时因为服务异常等原因导致连接失败的问题,本节针对这类问题给出解决排查与解决方案。
报错一:无法接收客户端的请求#
bash-4.2$ psql -h VIP2 -p 9999 -Upgpool
password:
psql: 错误:无法接收客户端的请求
原因: PGPool 中认为 PG 节点全部无法接收请求。
排查步骤:
查看各 PG 节点运行是否正常
可以通过 psql 命令连接每一个 PG 节点的 IP 与 PG 的端口,如果连接成功,则相应节点的 PG 服务为正常。
若 PG 服务正常
执行 pcp_attach_node 命令修改 PGPool 中 PG 节点的状态。
注意:先恢复 PG 主节点,再恢复 PG 的从节点。
pcp_attach_node -h VIP2 -p 9898 -U pgpool -n node_id
若各节点 PG 服务全部不可用
首先启动 PG 主节点(通过查看 PGDATA 目录下是否存在 standby.signal 文件,存在此文件说明是 PG 从节点,相应不存在则为主节点)。
pg_ctl -D PGDATA start
然后查看 PGPool 中高可用集群状态的主节点状态是否恢复(status 为 up)。
bash-4.2$ psql -h VIP2 -p 9999 -Upgpool
postgres=# show pool_nodes;
如果主节点状态已经恢复,则运行如下命令拉起 PG 从节点并在 PGPool 中设置为可用状态。
pcp_recovery_node -h VIP2 -p 9898 -U pgpool -n 1
Password:
pcp_recovery_node -- Command Successful
最后再次通过 `show pool_nodes` 命令查看 PGPool 中高可用集群状态,确保所有节点状态正常(status 为 up)。
bash-4.2$ psql -h VIP2 -p 9999 -Upgpool
postgres=# show pool_nodes;
报错二:端口9999失败:没有到主机的路由#
psql -h VIP2 -p 9999 -Upgpool -d postgres
psql: 错误: 连接到"VIP2"上的服务器,端口9999失败:没有到主机的路由
服务器是否在该主机上运行并接受TCP/IP连接?
原因:
这个错误表明 PGPool 节点状态全部异常。
方案:
按照上述高可用集群问题定位步骤第一步,启动每一个节点的 PGPool 服务。
PGPool 启动命令(postgres用户):
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 &
问题2: PG 与 PGPool 进程宕掉#
当机器重启或者其他原因导致 PG 与 PGPool 进程宕掉(通过 ps aux | grep pgpool
与 ps aux | grep postgres
检查),需要启动 PG 与 PGPool。
启动 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 -n -D > /tmp/pgpool.log 2>&1 &"
执行 show pool_nodes 获得 PG 节点的 ID (node_id字段)
bash-4.2$ psql -h VIP2 -p 9999 -Upgpool
postgres=# show pool_nodes;
退出 psql,根据查看到的 PG 节点状态以及 ID,执行如下系统命令,拉起相应的节点的 PG。
pcp_recovery_node -h VIP2 -p 9898 -U pgpool -n nodeid
问题3: PG 节点意外中断#
这个场景包含当 PG 的 Master、Standby 因故障发生切换时,PG 的原 Master 节点通常会被摒弃在 PG 的高可用集群之外。
通过show pool_nodes
命令,如果发现某节点的 status 字段为 down,则通过如下命令拉起 PG 节点。
pcp_recovery_node -h VIP2 -p 9898 -U pgpool -n nodeid
例如:
pcp_recovery_node -h 10.0.0.1 -p 9898 -U pgpool -n 2
问题4: PGPool 节点意外中断#
如果PGPool 进程宕掉(通过 ps aux | grep pgpool
检查),需要启动 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 -n -D > /tmp/pgpool.log 2>&1 &"
添加机器(可选)#
如果您希望通过可视化界面安装或者注册纳管组件,将要安装或纳管的机器需要在节点管理功能中注册。
登陆到平台后,选择自动部署功能,在左侧菜单栏中找到节点管理。
在节点管理页面中,点击新建新建节点,弹出窗中根据网络环境配置子网信息,地域,可用区,这里的子网是一个逻辑网络分组的概念,每个子网中必须要有管理节点(带管理网卡IP的节点),地域和可用区只是在本逻辑分组中的字符标签,没有实际逻辑意义。
根据节点信息在子网中添加节点,注意这里的用户需要在机器上有sudo免密的权限。
添加节点成功后,在节点列表页面将会有对应节点的展示。
如果添加失败,则在节点添加的日志中有报错信息,根据报错信息修改节点或连接配置即可。
安装其他产品/组件#
注册机器之后,即可安装其他产品/组件(如 OushuDB 集群),其他产品/组件的安装,详见相关产品/组件的安装部署章节。
组件相关配置#
功能说明#
配置修改最新配置展示
配置修改
配置版本管理
配置回滚
配置对比
视图切换
前提#
配置状态说明:
当前版本: 指当前集群运行使用的配置版本,并不一定为文件系统上的配置内容。
最新版本: 集群各节点的文件系统上的版本内容,当重启集群时改配置才可以生效,生效后状态变为当前版本。
版本保存说明
仅保存新版本: 该操作仅将skylab平台上修改的配置内容分发到指定机器的各节点配置目录下,并不会应用修改后的配置。
保存并重启集群: 该操作包含分发修改后的配置到各节点且重启集群各角色,最终使集群应用修改后的配置。
使用说明#
注:以下说明基于Hive组件,其他组件同理。
新建集群时skylab为您提供足以启动该类集群的默认的配置,但是如果您有配置修改的需求,您可以在这一步对配置文件做您期待的修改。如图您可以在每个配置文件中新增参数、修改属性及其对应的值,同时您也可以删除skylab提供的默认参数。最终该配置将会作为当前集群的初始配置。
新建集群后您可以选择集群配置使用配置功能。
在配置详情页面可查看当前集群最新版本,在当前页面您不仅可以查看最新的配置,同时skylab还提供了修改/切换配置展示视图/保存新版本。
您可以在配置文件右上脚选择切换当前视图,skylab提供由key&value形式的展示转化为指定配置类型的文本模式且提供重做/注释等快捷操作。 key&value切换为文本模式如下图:
当您处于文本模式下时再次点击右上角即可切换为key&value视图模式。当您在配置详情处完成了预期配置修改,您可以点击保存新版本button去应用您的最新配置到集群上,弹窗中的版本名称为必填项。您有两种配置保存策略,仅保存新版本只会分发配置并不会让修改后的配置生效,保存并重启集群会将新版本生效。
保存新版本后您可查看当前版本历史,如下图:
在版本历史中skylab提供配置对比功能,您可以选中两个版本进行配置对比,以发现配置之间的区别。如下图:
在版本历史列表中您可以选择回滚到指定版本中。
回滚后版本历史状态同步发生改变,回滚过程中集群服务会先被停止掉再重新启动,回滚前请确认是否期待停止集群再重启。
原理说明#
配置回滚功能简述: 由skylab平台提供默认配置,并将页面输入的自定义配置存储到数据库中,数据库中的配置内容为集群内所有角色的的公有配置项。由于不同角色的配置文件存在特异化的配置项,skylab为争取做到最大程度的覆盖所有组件,便不将特殊化配置项纳入平台数据库管理内。当您在skylab生成新的配置版本时,skylab借助后台助手将集群完整的配置落盘。当您回滚时后台助手会帮您完成版本的覆盖。
视图切换功能简述: skylab平台内支持大部分配置类型的视图转化,包括xml、json、conf、yaml等。但目前暂不支持env类型配置文件查看文本类型。