xuyunti 2014-03-25
需求:基于业务环境,需在一台机器上部署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值