linux查pcsd服务端口,Pacemaker管理工具中 pcs/pcsd 的关系
在应用 pcs 进行管理的 pacemaker 集群中,每个节点都会启动一个 pcsd 守护进程,监听 2224/tcp 端口。随后,我们可以从任一节点中,通过 pcs 命令管理整个集群。
误解
按照套路,通常这是一种 client/server 架构, pcs 命令行工具向相应节点的 pcsd 发送请求, pcsd 在相应节点完成动作。
然而实际与此有所出入。
实际套路
实际上,真正对 pacemaker 执行操作的,是 pcs 这个命令行工具。pcsd 负责接收来自其他节点的请求,随之调用本地的 pcs 工具,最后由本地的 pcs 执行操作。
本地命令示例
以 `pcs cluster start` 命令为例。在 Node A 中执行 `pcs cluster start`, Node A 本地的 cluster 相关服务将被启动。
在此操作中,不需要经过 pcsd. 即, pcs ---> execute. 具体过程如下。
1. Node A 的 pcs 脚本被调用。
### pcs/pcs
10 from pcs import app
11
12 app.main(sys.argv[1:])
2. Node A 的 pcs 调起 app.py.
### pcs/app.py
14 from pcs import (
15 acl,
16 cluster,
17 config,
18 constraint,
19 node,
20 pcsd,
21 prop,
22 qdevice,
23 quorum,
24 resource,
25 settings,
26 status,
27 stonith,
28 usage,
29 utils,
30 alert,
31 )
### 找到 cluster 子命令对应的入口,cluster.cluster_cmd.
176 cmd_map = {
177 "resource": resource.resource_cmd,
178 "cluster": cluster.cluster_cmd,
179 "stonith": stonith.stonith_cmd,
180 "property": prop.property_cmd,
181 "constraint": constraint.constraint_cmd,
182 "acl": acl.acl_cmd,
183 "status": status.status_cmd,
184 "config": config.config_cmd,
185 "pcsd": pcsd.pcsd_cmd,
186 "node": node.node_cmd,
187 "quorum": lambda argv: quorum.quorum_cmd(
188 utils.get_library_wrapper(),
189 argv,
190 utils.get_modificators()
191 ),
192 "qdevice": lambda argv: qdevice.qdevice_cmd(
193 utils.get_library_wrapper(),
194 argv,
195 utils.get_modificators()
196 ),
197 "alert": lambda args: alert.alert_cmd(
198 utils.get_library_wrapper(),
199 args,
200 utils.get_modificators()
201 ),
202 }
3. 由于`pcs cluster start`后面没有接节点名或`--all`,所以判断为在本地节点进行操作。
可以看到,这个命令实际会在本地启动 corosync 和 pacemaker 服务。
###pcs/cluster.py
57 def cluster_cmd(argv):
86 elif (sub_cmd == "start"):
87 if "--all" in utils.pcs_options:
88 start_cluster_all()
89 else:
90 start_cluster(argv)
859 def start_cluster(argv):
860 wait = False
861 wait_timeout = None
862 if "--wait" in utils.pcs_options:
863 wait_timeout = utils.validate_wait_get_timeout(False)
864 wait = True
865
866 if len(argv) > 0: ######
867 start_cluster_nodes(argv)
868 if wait:
869 wait_for_nodes_started(argv, wait_timeout)
870 return
871
872 print("Starting Cluster...")
873 if utils.is_rhel6():
874 # Verify that CMAN_QUORUM_TIMEOUT is set, if not, then we set it to 0
875 retval, output = getstatusoutput('source /etc/sysconfig/cman ; [ -z "$CMAN_QUORUM_TIMEOUT" ]')
876 if retval == 0:
877 with open("/etc/sysconfig/cman", "a") as cman_conf_file:
878 cman_conf_file.write("\nCMAN_QUORUM_TIMEOUT=0\n")
879
880 output, retval = utils.run(["service", "cman","start"])
881 if retval != 0:
882 print(output)
883 utils.err("unable to start cman")
884 else:
885 output, retval = utils.run(["service", "corosync","start"]) #####
886 if retval != 0:
887 print(output)
888 utils.err("unable to start corosync")
889 output, retval = utils.run(["service", "pacemaker", "start"])
890 if retval != 0:
891 print(output)
892 utils.err("unable to start pacemaker")
893 if wait:
894 wait_for_nodes_started([], wait_timeout)
远程命令示例
以`pcs cluster start --all`为例。在 Node A 执行该命令,会启动所有节点的的 cluster 相关服务。
这个命令会向每个节点的 pcsd 发送请求,随后每个节点的 pcsd 调用本地的 pcs 命令执行相应操作。
即, pcs ----> remote psdc ----> remote pcs ---> execute. 具体过程如下。
1. Node A 中执行 `pcs cluster start --all` 命令。由于存在`--all`参数,进入start_cluster_all()分支。
57 def cluster_cmd(argv):
86 elif (sub_cmd == "start"):
87 if "--all" in utils.pcs_options:
88 start_cluster_all()
89 else:
90 start_cluster(argv)
91 elif (sub_cmd == "stop"):
92 if "--all" in utils.pcs_options:
93 stop_cluster_all()
94 else:
95 stop_cluster(argv)
896 def start_cluster_all():
897 wait = False
898 wait_timeout = None
899 if "--wait" in utils.pcs_options:
900 wait_timeout = utils.validate_wait_get_timeout(False)
901 wait = True
902
903 all_nodes = utils.getNodesFromCorosyncConf() ######
904 start_cluster_nodes(all_nodes) ######
905
906 if wait:
907 wait_for_nodes_started(all_nodes, wait_timeout)
909 def start_cluster_nodes(nodes):
910 error_list = parallel_for_nodes(utils.startCluster, nodes, quiet=True)
911 if error_list:
912 utils.err("unable to start all nodes\n" + "\n".join(error_list))
2. Node A 向各节点的 pcsd 发送 http 请求。
### pcs/utils.py
246 def startCluster(node, quiet=False):
247 return sendHTTPRequest(node, 'remote/cluster_start', None, False, not quiet)
346 def sendHTTPRequest(host, request, data = None, printResult = True, printSuccess = True):
347 url = 'https://' + host + ':2224/' + request
3. 各节点(包括A)的 pcsd 接收到请求. 随后在本地执行 `pcs cluster start`. 后面的过程与上述本地的过程一致。
### pcsd/remote.rb
17 def remote(params, request, auth_user)
18 remote_cmd_without_pacemaker = {
39 :cluster_start => method(:cluster_start),
193 def cluster_start(params, request, auth_user)
194 if params[:name]
195 code, response = send_request_with_token(
196 auth_user, params[:name], 'cluster_start', true
197 )
198 else
199 if not allowed_for_local_cluster(auth_user, Permissions::WRITE)
200 return 403, 'Permission denied'
201 end
202 $logger.info "Starting Daemons"
203 output, stderr, retval = run_cmd(auth_user, PCS, 'cluster', 'start') ####<<<
204 $logger.debug output
205 if retval != 0
206 return [400, (output + stderr).join]
207 else
208 return output
209 end
210 end
211 end
linux查pcsd服务端口,Pacemaker管理工具中 pcs/pcsd 的关系相关推荐
- Linux日志记录服务,日志管理工具
syslog 简介: syslog是一种广泛使用的日志记录服务,用于记录系统和应用程序的事件,详细记录包括时间戳.主机IP地址.应用程序名称.优先级.消息内容等信息.syslog有三个主要部分:客户端 ...
- linux如deepin manjaro对笔记本电脑电池的伤害解决方案:TLP:一个可以延长 Linux 笔记本电池寿命的高级电源管理工具
TLP:一个可以延长 Linux 笔记本电池寿命的高级电源管理工具 笔记本电池是针对 Windows 操作系统进行了高度优化的,当我在笔记本电脑中使用 Windows 操作系统时,我已经意识到这一点, ...
- ASP.NET 网站管理工具中的“安全”制表页
使用网站管理工具中的"安全"制表页可以对 Web 应用程序特定资源的保护规则进行管理.ASP.NET 使用的安全系统允许你对特定用户帐号或角色的访问权限进行限制.通过"安 ...
- cerebro管理工具中添加elasticsearch字段
cerebro管理工具中添加elasticsearch字段 查看文档mapping 7.*版本的ES查看或者操作需要再url之后增加?include_type_name=true 向已有的type中新 ...
- 解决管理工具中没有Internet 信息服务(IIS)管理器
控制面板下的系统和安全下的管理工具中没有Internet 信息服务(IIS)管理器, 按路径"c:\windows\system32\inetsrv"确认是否有iis.m ...
- Docker 服务终端 UI 管理工具
这是一个简单的基于终端的 UI 管理工具,主要适用于对 docker 和 docker-compose 容器以及服务的管理和便捷使用,灵感来自于 gocui 并使用 Go 语言改写. 轻度用户使用尚可 ...
- TLP:一个可以延长 Linux 笔记本电池寿命的高级电源管理工具
笔记本电池是针对 Windows 操作系统进行了高度优化的,当我在笔记本电脑中使用 Windows 操作系统时,我已经意识到这一点,但对于 Linux 来说却不一样. 多年来,Linux 在电池优化方 ...
- Linux下KVM的图形界面管理工具(virt-manager)(桌面版)
背景: virt-manager是用于管理KVM虚拟环境的主要工具,virt-manager默认设置下需要使用root用户才能够使用该工具.当你想在KVM hypervisor服务器上托管虚拟机,由最 ...
- linux系统高级管理工具包,linux两大系统的包管理工具
linux系统分为两大阵营: 1. redhat系统:包括Redhat.Centos.Fedora等 2. debian系统:包括Debian.Ubuntu等 RedHat 系列 1 常见的安装包格式 ...
最新文章
- 深入理解Eureka之源码解析
- Spring Cloud架构的各个组件的原理分析
- win10系统上安装cmder并实现右键启动
- bootstrap 垂直居中 布局_给你一份详细的CSS布局指南,请查收
- 113 - Power of Cryptography 浮点数 pow()函数
- python hibernate_将Java/MVC/Hibernate webapp移植到Python
- C++STL容器大全
- linux怎么使多条命令同时执行
- 连接上linux上的ip在哪个文件夹,linux – 当IP别名时,操作系统如何确定哪个IP地址将用作出站TCP / IP连接的源?...
- 同事之间关系可以,吃饭喝酒没问题,怎么没有一个说知心话的人?
- Ubuntu 创建启动器
- Linux安装MySQL5.7
- c语言矩形法e3x x7,矩形法(梯形法)求定积分的方法
- 斯托克斯定理(Stokes' theorem)
- 邵阳职院计算机专业怎么样,邵阳市古峰职业学校怎么样?
- Android DES加密解密
- matplotlib之pyplot模块——向子图添加箭头(arrow())
- 使用photoshop对图片像素级的标注
- 电容笔和Apple pencil区别有什么?双十一值得入手的电容笔推荐
- NOAA气象数据下载攻略
热门文章
- 百度api通过经纬度转换为城市名称
- composer 安装问题
- PS4 + ESP32 制作无线遥控器
- 我为何不介意女朋友不是处女?
- 微信小程序自定义组件开发即组件间通信详解
- html网页制作注意事项,使用网页设计模板的注意事项-
- 如何用java实现发邮件功能
- 计算机网络技术职业生涯规划书一千字,计算机网络技术大学生职业生涯规划书...
- 【文献阅读】MSPM: A multi-agent reinforcement learning-based system for financial portfolio management
- Excel函数公式大全—函数真经