Step14-Scripts-环境变量
# 1. 跨平台环境变量加载体系
在 Ambari Stacks 的集成体系中,所有服务的运行参数与环境变量都需通过专门的脚本统一加载与适配。 常见的处理路径如下:
ambari-server/src/main/resources/stacks/BIGTOP/3.2.0/services/REDIS/package/scripts/params.py
1
params.py
作为环境变量入口,负责自动识别当前操作系统类型,并按需加载 Linux 或 Windows 对应的参数定义文件。- 这种设计确保了多平台兼容性,即使后续需要支持 Windows 也无需大幅重构,仅补充 params_windows.py 即可。
# 1.1 params.py 关键代码示例
from ambari_commons import OSCheck
from resource_management.libraries.functions.default import default
from params_linux import *
1
2
3
2
3
OSCheck
可自动判断当前节点的操作系统类型。- Linux 平台默认直接引入
params_linux.py
,如需扩展 Windows,只需做条件分支加载即可。
# 2. params_linux.py 详解
所有 Redis 相关参数均通过 params_linux.py
动态加载,具体内容如下:
# coding=utf-8
# params.py retrieves all necessary configurations from Ambari for Redis service.
from resource_management.libraries.functions import format
from resource_management.libraries.script.script import Script
SERVER_ROLE_DIRECTORY_MAP = {
'REDIS_MASTER': 'redis-master',
'REDIS_SLAVE': 'redis-slave',
'REDIS_CLIENT': 'redis-client'
}
master_component_directory = Script.get_component_from_role(SERVER_ROLE_DIRECTORY_MAP, "REDIS_MASTER")
slave_component_directory = Script.get_component_from_role(SERVER_ROLE_DIRECTORY_MAP, "REDIS_SLAVE")
client_component_directory = Script.get_component_from_role(SERVER_ROLE_DIRECTORY_MAP, "REDIS_CLIENT")
config = Script.get_config()
stack_root = Script.get_stack_root()
# parent
redis_conf_parent = '/etc/redis/conf'
# bin dir
master_bin = format("{stack_root}/current/{master_component_directory}/src")
slave_bin = format("{stack_root}/current/{slave_component_directory}/src")
client_bin = format("{stack_root}/current/{client_component_directory}/src")
# Redis集群各角色主机清单
redis_master_hosts = config['clusterHostInfo']['redis_master_hosts']
redis_slave_hosts = config['clusterHostInfo']['redis_slave_hosts']
# 直接从 redis-env.xml 和 redis-site.xml 获取参数
redis_user = config['configurations']['redis-env']['redis_user']
redis_port = config['configurations']['redis-env']['redis_port']
redis_password = config['configurations']['redis-env']['redis_password']
redis_log_dir = config['configurations']['redis-env']['redis_log_dir']
redis_data_dir = config['configurations']['redis-env']['redis_data_dir']
redis_pid_dir = config['configurations']['redis-env']['redis_pid_dir']
daemonize = config['configurations']['redis-env']['daemonize']
appendonly = config['configurations']['redis-site']['appendonly']
appendfilename = config['configurations']['redis-site']['appendfilename']
appendfsync = config['configurations']['redis-site']['appendfsync']
save_intervals = config['configurations']['redis-site']['save_intervals']
dbfilename = config['configurations']['redis-site']['dbfilename']
maxmemory = config['configurations']['redis-site']['maxmemory']
maxmemory_policy = config['configurations']['redis-site']['maxmemory_policy']
maxclients = config['configurations']['redis-site']['maxclients']
timeout = config['configurations']['redis-site']['timeout']
databases = config['configurations']['redis-site']['databases']
tcp_keepalive = config['configurations']['redis-site']['tcp_keepalive']
protected_mode = config['configurations']['redis-site']['protected_mode']
cluster_enabled = config['configurations']['redis-site']['cluster_enabled']
cluster_config_file = config['configurations']['redis-site']['cluster_config_file']
# 从 cluster-env.xml 获取运行组
user_group = config['configurations']['cluster-env']['user_group']
# 当前节点主机名与角色判断
hostname = config['agentLevelParams']['hostname']
is_master = hostname in redis_master_hosts
is_slave = hostname in redis_slave_hosts
# 日志和PID文件
redis_log_file = format("{redis_log_dir}/redis.log")
master_redis_pid_file = format("{redis_pid_dir}/redis_master.pid")
slave_redis_pid_file = format("{redis_pid_dir}/redis_slave.pid")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# 2.1 关键参数来源说明
参数名 | 来源 XML | 说明 |
---|---|---|
redis_user | redis-env.xml | Redis 运行用户 |
redis_port | redis-env.xml | 端口号 |
redis_log_dir | redis-env.xml | 日志目录 |
appendonly | redis-site.xml | AOF 持久化开关 |
maxmemory | redis-site.xml | 最大内存限制 |
... | ... | ... |
- 脚本通过
config['configurations']
结构,自动获取所有 XML 配置内容,实现与 UI 配置参数的动态同步。
- 01
- bigtop-select 打包缺 compat 报错修复 deb07-16
- 02
- bigtop-select 打包缺 control 文件报错修复 deb07-16
- 03
- 首次编译-环境初始化 必装07-16