ansible 安装多实例 redis

 

任务指行顺序

[root@m01/server/ansible/roles/redis_cluster/tasks]#cat main.yml 
---
# tasks file for redis

#No 1 数据目录准备
- include: perparation.yml

#No 2  安装redis
- include: install.yml

#No 3   拉取安装目录
- include: pull_dir.yml

#No 4 推送安装目录
- include: push_dir.yml

#No 5 复制指行文件
- include: make_install.yml

#No 6 拷贝模板配置文件,触发启动
- include: config.yml

#No 7  拷贝模板redis管理脚本
- include: redis_shell.yml

任务指行的内容

[root@m01/server/ansible/roles/redis_cluster/tasks]#cat perparation.yml
- name: Environmental preparation
#Data directory
shell: mkdir -p /data/redis_cluster/redis_{{ item }}/{conf,pid,logs}
with_items:
- "{{ port }}"


[root@m01/server/ansible/roles/redis_cluster/tasks]#cat install.yml
- name: Custom installation
script: install.sh
when: ansible_hostname == "master"


[root@m01/server/ansible/roles/redis_cluster/tasks]#cat pull_dir.yml
- name: Frist pull rsync progarm dir
synchronize: src=/app/redis dest=/tmp/ archive=yes copy_links=yes mode=pull
when: ansible_hostname == "master"


[root@m01/server/ansible/roles/redis_cluster/tasks]#cat push_dir.yml
- name: push rsync progarm dir
synchronize: src=/tmp/redis dest=/app/ archive=yes copy_links=yes mode=push
when: ansible_hostname != "master"


[root@m01/server/ansible/roles/redis_cluster/tasks]#cat make_install.yml
- name: make install
shell: 'cd /app/redis/; make install'
when: ansible_hostname != "master"


[root@m01/server/ansible/roles/redis_cluster/tasks]#cat redis_shell.yml
- name: Copy manage_redis shell
template: src=redis_shell.j2 dest=/sbin/redis_shell.sh mode=700

定义变量内容

[root@m01/server/ansible/roles/redis_cluster/tasks]#cat ../vars/main.yml
port:
- 6380
- 6381

触发器

[root@m01/server/ansible/roles/redis_cluster/tasks]#cat ../handlers/main.yml
---
# handlers file for redis
- name: start redis
shell: redis-server /data/redis_cluster/redis_{{ item }}/conf/redis_{{ item }}.config
with_items:
- "{{ port }}"

调用的安装脚本

[root@m01/server/ansible/roles/redis_cluster/tasks]#cat ../files/install.sh
#!/bin/sh
Package=redis-3.2.9
Path_Package=/server/tools
name=`echo ${Package}|cut -d '-' -f1`
#Must *.tar.gz
wget -O ${Path_Package}/${Package}.tar.gz "http://download.redis.io/releases/${Package}.tar.gz"
if [ -f "${Path_Package}/${Package}.tar.gz" ];then
cd ${Path_Package}
tar xf "${Package}.tar.gz" -C /app/ &&\
ln -s /app/${Package} /app/$name
else
echo "Not find ${Package}.tar.gz into ${Path_Package}"
exit 127
fi
cd /app/$name
make && make install
if [ $? -ne 0 ];then
echo "Compile copy error,install $name fialed!"
exit 128
fi

调用模板的配置文件和管理脚本

  配置脚本

[root@m01/server/ansible/roles/redis_cluster/tasks]#cat ../templates/redis_cluster_config.j2
bind {{ ansible_hostname }}
port {{ item }}
daemonize yes
pidfile "/data/redis_cluster/redis_{{ item }}/pid/redis_{{ item }}.pid"
logfile "/data/redis_cluster/redis_{{ item }}/logs/redis_{{ item }}.log"
dbfilename "redis_{{ item }}.rdb"
dir "/data/redis_cluster/redis_{{ item }}/"
cluster-enabled yes
cluster-config-file nodes_{{ item }}.conf
cluster-node-timeout 15000  

  管理脚本

[root@m01/server/ansible/roles/redis_cluster/tasks]#cat ../templates/redis_shell.j2 

#!/bin/sh

USAG(){
echo "sh $0 {start|stop|restart|login|ps|tail} PORT"
}
if [ "$#" = 1 ]
then
REDIS_PORT='6379'
elif
[ "$#" = 2 -a -z "$(echo "$2"|sed 's#[0-9]##g')" ]
then
REDIS_PORT="$2"
else
USAG
exit 0
fi
REDIS_IP=$(hostname -I|awk '{print $1}')
PATH_DIR=/data/redis_cluster/redis_${REDIS_PORT}/
PATH_CONF=/data/redis_cluster/redis_${REDIS_PORT}/conf/redis_${REDIS_PORT}.config
PATH_LOG=/data/redis_cluster/redis_${REDIS_PORT}/logs/redis_${REDIS_PORT}.log
CMD_START(){
redis-server ${PATH_CONF}
}
CMD_SHUTDOWN(){
redis-cli -c -h ${REDIS_IP} -p ${REDIS_PORT} shutdown
}
CMD_LOGIN(){
redis-cli -c -h ${REDIS_IP} -p ${REDIS_PORT}
}
CMD_PS(){
ps -ef|grep redis
}
CMD_TAIL(){
tail -f ${PATH_LOG}
}
case $1 in
start)
CMD_START
CMD_PS
;;
stop)
CMD_SHUTDOWN
CMD_PS
;;
restart)
CMD_START
CMD_SHUTDOWN
CMD_PS
;;
login)
CMD_LOGIN
;;
ps)
CMD_PS
;;
tail)
CMD_TAIL
;;
*)
USAG
esac

posted @ 2021-01-05 15:46  石锤  阅读(83)  评论(0)    收藏  举报