前言
为了更快速的部署项目,开始学习ansible运维自动化,下面是简单的一些ansible学习心得
安装ansible
以centOs系统为环境,使用yum方式安装
1.安装ansible ,默认安装在 /etc目录下
yum install ansible
2.进入ansible目录
cd /etc/ansible
ansible.cfg 主配置文件,配置ansible工作特性
hosts 主机清单
roles 存放角色的目录
3.配置连接主机
vi hosts
[test] 表示主机组的名称为test,当命令调用test名称的时候会自动瞎发到27和136这2台主机上
Test1 类似于别名的作用,来识别27号主机的名称为Test1
编辑然后保存退出
4.生成ssh秘钥
ssh-keygen
5.基于ssh的免密登录
ssh-copy-id 192.168.0.27
ssh-copy-id 192.168.0.136
6.命令测试
ansible test -m ping
实例
由于刚开始学习,对ansible的认识还仅限于表面,但对于我现在项目来说已经基本可以开始运用了,下面是我项目部署的一个实例
项目情况
项目为spring-boot项目,分布式部署在3台虚机上,所以用到了ansible的文件分发以及远程虚机脚本的执行
-
准备
4台虚机: 192.168.0.31 192.168.0.32 192.168.0.33 192.168.0.34 其中31为跳板机,部署了nginx、ansible、mysql等 32、33、34分部部署了3个模块的项目
-
修改ansible里hosts的配置,将32 33 34主机配置进去
-
执行ssh-copy-id 【ip】命令分发shh秘钥连接虚机.
-
分发项目文件(jar包)
ansible C32 -m copy -a “src=/home/internet-platform/internet-company/target/internet-company-0.0.1-SNAPSHOT-exec.jar dest=/home”
将跳板机上面的jar发送到32号虚机上
同理将其他2个模块jar用相同方式分发到33 34号虚机上 -
远程执行启动jar操作
ansible C32 -m command -a "java -jar /home/internet-company-0.0.1-SNAPSHOT-exec.jar "
远程执行命令这里我使用了脚本,在32 33 34上分别有个start的脚本文件
内容如下:#!/bin/sh
#company
RESOURCE_NAME1=/home/internet-company-0.0.1-SNAPSHOT-exec.jar
tpid=ps -ef|grep $RESOURCE_NAME1|grep -v grep|grep -v kill|awk '{print $2}'
if [ ${tpid} ]; then
echo ‘Stop Process…’
kill -15 $tpid
fi
sleep 5
tpid=ps -ef|grep $RESOURCE_NAME1|grep -v grep|grep -v kill|awk '{print $2}'
if [ ${tpid} ]; then
echo ‘Kill Process!’
kill -9 $tpid
else
echo ‘companyStop Success!’
fi
tpid=ps -ef|grep $RESOURCE_NAME1|grep -v grep|grep -v kill|awk '{print $2}'
if [ ${tpid} ]; then
echo ‘App is running.’
else
echo ‘App is NOT running.’
fi
rm -f tpid
nohup java -jar $RESOURCE_NAME1 &
echo $! > tpid
echo companyStart Success!该脚本;实现了:确认该jar是不是在执行中,如果是就kill掉,然后再执行java -jar的命令
最后在31号机上用ansible执行这个脚本文件
ansible C32 -m command -a “sh /start”
这样就不会导致因为原有的jar包在跑而出现报错情况了
-
问题解决:
ansible C32 -m command -a “sh /start”
在执行这条命令时可能会报错,比如找不到java文件、java命令不存在等
原因:
当用ansible发送远程java命令时,远程服务器所配置的java环境变量不生效,所以需要在远程脚本上重新把环境变量配置上去,即在start脚本文件开头添加 source /etc/profile
结尾
以上就是我这几天学习ansible的结果以及对它的应用,当然都是一些比较简单粗浅的运用。而ansible的核心,比如PLAYBOOKS、MODULES、PLUGINS、API、ANSIBLE等等还没有用到,还需继续学习。