salt-master的master_job_cache设置为redis并且设置密码

文章介绍了如何修改salt-master的配置以使用redis作为job缓存,包括在/etc/salt/master中设置redis参数,以及在salt/returners/redis_return.py脚本中的三个关键修改点。此外,还提到了安装redis和pythonredis库的步骤,以及遇到的异常情况和解决方法,如确保redis库被正确引用。
摘要由CSDN通过智能技术生成

修改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

 问题修复!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值