SaltStack 利用pillar实现Redis多实例部署

需求:基于业务环境,需在一台机器上部署N多redis实例,之前部署只能实现部署单个redis,在手工修改目录名字以区分不同redis实例,现想设计能部署一个redis,剩余实例递增即可,以实现多实例部署。

设计:多redis启动只需要一个配置文件和启动脚本即可,而启动程序是不变的,那么我可以安装一个redis,以/usr/local/redis目录为例,在目录下生成基于应用的redis,下发对应的脚本到/etc/init.d/,而配置文件做成模板化,变化参数通过pillar来渲染,例如log name、pid name、data directory。

Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里

推荐阅读:

note: 多实例部署,要涉及到多个脚本,想通过salt的service.running启动,那么必须要满足几个条件

    1.rc.d/init.d脚本

    2.脚本内容必须有start、stop、status,status必须有,因为service模块会先执行status来判定服务是否在运行,在执行启动

    3.脚本包含启动和关闭参数。Sxx、Kxx

整体目录结构如下

/usr/local/redis/bin

      redis-benchmark

      redis-cli

      redis-server

      redis-check-aof

      redis-check-dump

/usr/local/redis/redis-s-user

      redis.conf

/usr/local/redis/redis-s-group

      redis.conf

/etc/init.d/redis-s-user

/etc/init.d/redis-s-group

上述设计完成,那么开工,Saltstack安装,验证我就不演示啦。直接上代码

pillar

redis-server1:

  - name: redis-s-user

    port: 7379

  - name: redis-s-group

    port: 7479


定义不同端口和服务名,在SLS文件中渲染。

sls

redis:

  pkg.installed:

    - name: redis

{% if 'redis-server1' in pillar %}

{% for eachredis in pillar['redis-server1'] %}

/usr/local/redis/{{ eachredis.name }}/redis.conf:

  file.managed:

    - source: salt://redis/files/redis.conf

    - makedirs: True

    - template: jinja

    - defaults:

        name: {{ eachredis.name }}

        port: {{ eachredis.port }}

    - require:

      - pkg: redis

{% endfor %}

{% endif %}

{% if 'redis-server1' in pillar %}

{% for eachredis in pillar['redis-server1'] %}

/etc/init.d/{{ eachredis.name }}:

  file.managed:

    - source: salt://redis/files/test

    - mode: 755

    - require:

      - pkg: redis

    - template: jinja

    - defaults:

        name: {{ eachredis.name }}

  service.running:

    - name: {{ eachredis.name }}

    - enable: True

    - watch:

      - pkg: redis

{% endfor %}

{% endif %}


1.安装redis服务,包是打的RPM包,包的结构就顶楼 - -

2.下发配置文件,配置文件需要指定不同端口、路径名。所以提供2个值。

3.下发启动脚本,redis启动只需要redis-server指定不同配置文件,所以这里只给了一个name值

相关推荐