修改salt-master配置 /etc/salt/master:
# redis job cache
master_job_cache: redis
redis.db: '0'
redis.host: '127.0.0.1'
redis.port: 6379
redis.password: 'xxxx'
修改缓存结果获取脚本:
/opt/saltstack/salt/lib/python3.10/site-packages/salt/returners/redis_return.py
不同版本,python版本或有不同,总共修改三处。
def _get_options(ret=None):
"""
Get the redis options from salt.
"""
attrs = {
"host": "host",
"port": "port",
"unix_socket_path": "unix_socket_path",
"db": "db",
"password": "password", #新增第一处
"cluster_mode": "cluster_mode",
"startup_nodes": "cluster.startup_nodes",
"skip_full_coverage_check": "cluster.skip_full_coverage_check",
}if salt.utils.platform.is_proxy():
return {
"host": __opts__.get("redis.host", "salt"),
"port": __opts__.get("redis.port", 6379),
"unix_socket_path": __opts__.get("redis.unix_socket_path", None),
"db": __opts__.get("redis.db", "0"),
"password": __opts__.get("redis.password", ""), #新增第二处
"cluster_mode": __opts__.get("redis.cluster_mode", False),
"startup_nodes": __opts__.get("redis.cluster.startup_nodes", {}),
"skip_full_coverage_check": __opts__.get(
"redis.cluster.skip_full_coverage_check", False
),
}_options = salt.returners.get_returner_options(
__virtualname__, ret, attrs, __salt__=__salt__, __opts__=__opts__
)
return _options
def _get_serv(ret=None):
"""
Return a redis server object
"""
_options = _get_options(ret)
global REDIS_POOL
if REDIS_POOL:
return REDIS_POOL
elif _options.get("cluster_mode"):
REDIS_POOL = StrictRedisCluster(
startup_nodes=_options.get("startup_nodes"),
skip_full_coverage_check=_options.get("skip_full_coverage_check"),
decode_responses=True,
)
else:
REDIS_POOL = redis.StrictRedis(
host=_options.get("host"),
port=_options.get("port"),
unix_socket_path=_options.get("unix_socket_path", None),
db=_options.get("db"),
password=_options.get("password", ""), #新增第三处
decode_responses=True,
)
return REDIS_POOL
安装redis 以及python 库文件
yum install redis -y
systemctl start redis
redis-cli -h 127.0.0.1 -p 6379
>CONFIG set requirepass XX
pip3 install redis==2.10.6 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
重启master即可。
异常处理:
重启后执行测试命令时,抛异常:
2023-05-26 17:56:31,230 [salt.utils.parsers:1060][WARNING ][341] Master received a SIGTERM. Exiting.
2023-05-26 17:56:41,726 [salt.master :2355][ERROR ][19096] Failed to allocate a jid. The requested returner 'redis' could not be loaded.
2023-05-26 17:56:41,728 [salt.channel.server:166 ][ERROR ][19096] Some exception handling a payload from minion
Traceback (most recent call last):
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/channel/server.py", line 163, in handle_message
ret, req_opts = yield self.payload_handler(payload)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/ext/tornado/gen.py", line 1056, in run...
表明redis 库未被引用
重新执行:
pip3 install --target=/opt/saltstack/salt/lib/python3.10/site-packages/ redis==2.10.6
问题修复!