前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ansible的使用

Ansible的使用

作者头像
Mr.Vv
发布2019-10-15 23:12:04
7860
发布2019-10-15 23:12:04
举报

1,准备工具:

服务器三台或者以上

a,主服务器:docker_t (安装Ansible)

b,被控制的服务器A:esqabc_a

c,被控制的服务器B:esqabc_b

注意,由于我的三台服务器都是国外服务器,显示与提示,相比国内会有所不同

2,安装Ansible,

请访问:https://blog.csdn.net/esqabc/article/details/90257590

3,服务器配置 SSH

a,创建秘钥对

[root@docker_t key]# ssh-keygen -t dsa -f /root/.ssh/id_dsa -P ""

b,分发公钥给被控制的服务器(esqabc_a和esqabc_b),请输入一下yes和密码授权一下就可以了

[root@docker_t key]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@192.168.0.111

[root@docker_t key]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@192.168.0.222


或者修改端口(24680)的方式分发:

[root@docker_t key]# ssh-copy-id -i ~/.ssh/id_dsa.pub -p 24680 root@192.168.0.111

[root@docker_t key]# ssh-copy-id -i ~/.ssh/id_dsa.pub -p 24680 root@192.168.0.222

c,测试远程执行命令

在主服务器中:

[root@docker_t key]# ssh 192.168.0.111 "hostname"
esqabc_a
[root@docker_t key]# ssh 4192.168.0.222 "hostname"
esqabc_b

在被控制服务器(esqabc_a):

[root@esqabc_a ~]# cat .ssh/authorized_keys

在被控制服务器(esqabc_b):

[root@esqabc_b ~]# cat .ssh/authorized_keys

4,添加要 Ansible 要管理的主机

root@docker_t ~# vim /etc/ansible/hosts rj-bai 192.168.0.111 192.168.0.222 注意:rj-bai 为模块名,下面是要管理的主机 ip 地址,模块名随便写

5,Ansible 命令模块 - command (默认模块)

安装Ansible 控制命令:

root@docker_t ~# ansible rj-bai -m command -a “yum -y install redhat-lsb” 注意(rj-bai)是指上面添加的主机模块名

查看被控制系统版本的信息,

root@docker_t ~# ansible rj-bai -m command -a “lsb_release -a” 注意(rj-bai)是指上面添加的主机模块名

参数

-m MODULE_NAME 相对应的模块被执行,默认 command 模块,-m 后解模块名

-a MODULE_ARFS 模块信息参数,-a 后代表要执行的命令,也可以写一个 IP

只针对某一个主机执行

root@docker_t ~# ansible 192.168.1.111 -m command -a “lsb_release -a”

6,Ansible 复制模块 - copy

a,也就是批量传输文件,将控制端的文件批量传给受控端

将主机: /home/tools/jarweb-jen-ans.jar 传到受控服务器的 /home/tools/jar/ 目录下。

注意:受控服务器的目录(/home/tools/jar)必须是存在的,不然会传输不成功

[root@docker_t ~]# ansible rj-bai -m copy -a "src=/home/tools/jarweb-jen-ans.jar dest=/home/tools/jar/jarweb-jen-ans.jar"

都存在目录:/home/tools/jar/

一台存在目录:/home/tools/jar/,一台不存在目录:/home/tools/jar/

b,查看一下文件是否传输成功:

root@docker_t ~# ansible rj-bai -m command -a “ls /home/tools/jar/jarweb-jen-ans.jar”

c,其它参数

backup 在替换之前先备份 owner 指定文件归属 group 指定文件属组 mode 指定文件权限

案例:

先为被控制的服务器,添加用户,并制定 uid 及 gid

root@docker_t ~# ansible rj-bai -m command -a “useradd -u 888 rj-bai”

重新传送文件,并替换之前的(yes),知道文件归属(rj-bai),添加文件分组(rj-bai),指定文件权限(755)

[root@docker_t ~]# ansible rj-bai -m copy -a "src=/home/tools/jarweb-jen-ans.jar dest=/home/tools/jar/jarweb-jen-ans.jar backup=yes  owner=rj-bai group=rj-bai mode=755"

7,脚本模块,远程执行脚本

模块分为两个:shell与script

a,shell模块,这个模块需要将要运行的脚本传到受控端才可以执行,就用上面所提到的 copy 模块完成传送

如果不会shell脚本写,请看这个地址:https://cloud.tencent.com/developer/article/1521996

注意:传送的时候脚本要加上 x 权限,否则会爆出权限拒绝

root@docker_t tools# touch test-a.sh root@docker_t tools# vi test-a.sh #!/bin/sh echo “Welcome to www.esqabcc.com” … 传输到被控制服务器 root@docker_t tools# ansible rj-bai -m copy -a “src=/home/tools/test-a.sh dest=/home/tools/test-a.sh mode=755” … 编译脚本 root@docker_t tools# ansible rj-bai -m command -a “ls -l /home/tools/test-a.sh”

执行脚本

root@docker_t tools# ansible rj-bai -m shell -a " /home/tools/test-a.sh"

b,script 模块

他的用法和 shell 一样,但是不能执行命令,他的优点是执行脚本不需要将脚本文件复制到远程服务器,就可以将脚本的执行过程在远程服务器上进行执行

root@docker_t tools# touch test-a.sh

root@docker_t tools# vi test-b.sh

#!/bin/sh

echo “Welcome to www.esqabcc.com

执行脚本

root@docker_t tools# ansible rj-bai -m script -a “/home/tools/test-b.sh”

8,yum 安装模块 - yum

a,执行批量安装命令:

root@docker_t ~# ansible rj-bai -m yum -a “name=httpd state=installed”

b,查看状态命令

root@docker_t ~# ansible rj-bai -m shell -a “service httpd status”

c,查看是否安装成功:

root@docker_t ~# ansible rj-bai -m shell -a “chkconfig --list | grep httpd”

9,批量服务管理模块 - service

a,开启被控制服务器的httpd

root@docker_t ~# ansible rj-bai -m service -a “name=httpd state=started enabled=no”

参数说明:

name 服务名字,必须是能在 chkconfig 里面找到的

state 要执行的状态,包含 running,started,stopped,restarted,reloaded

enabled 是否可以开机启动 no 表示禁止

b,其它命令(删除httpd ):

root@docker_t ~# ansible rj-bai -m yum -a “name=httpd state=removed”

10,剧本功能模块-playbook

这个所谓的剧本其实就是类似 shell 脚本,您需要系统做什么事情,写到一个文件里执行即可,很适合批量安装服务和发布项目。

注意:

剧本的基础语法:空格,不能使用 table 键,编写剧本使用的是 yml 语法。

a,创建文件

(1)进入目录 root@docker_t ansible# cd /etc/ansible/roles/ (2)创建文件夹 root@docker_t roles# mkdir jarweb (3)进入目录 root@docker_t roles# cd jarweb/ (4)创建剧本文件:deploy-jarweb.yml root@docker_t jarweb# touch deploy-jarweb.yml (5)编辑剧本文件:deploy-jarweb.yml,如下图: root@docker_t jarweb# vi deploy-jarweb.yml

#使用主机组模块(rj-bai),
#把主机:/etc/ansible/roles/jarweb/jarweb-jen-ans.jar项目文件复制到被控制服务器:/home/tools/jar/jarweb-jen-ans.jar
#把主机:/etc/ansible/roles/jarweb/jaeweb-script.sh脚本文件复制到被控制服务器:/home/tools/jar/jaeweb-script.sh
#执行被控制服务器的脚本文件:/home/tools/jar/jaeweb-script.sh
- hosts: rj-bai
  remote_user: root
  tasks:
    - name: copy jar
      copy : src=/etc/ansible/roles/jarweb/jarweb-jen-ans.jar dest=/home/tools/jar/jarweb-jen-ans.jar
    - name: copy sh
      copy: src=/etc/ansible/roles/jarweb/jarweb-script.sh dest=/home/tools/jar/jarweb-script.sh
    - name:  shell sh
      shell: sh /home/tools/jar/jarweb-script.sh

文件解释:

注释用#,

hosts:那行为那个组要执行这个剧本

remote_user:使用哪个用户

tasks:代表要做的事情,

-name:为输出提示信息,

copy:代表把主机(src)的文件复制到被控制服务器(dest)中

shell:代表执行被控制服务器的脚本

(6)创建sh脚本文件:jarweb-script.sh root@docker_t jarweb# touch jarweb-script.sh (7)编辑sh脚本文件:jaeweb-script.sh,如下图: root@docker_t jarweb# vi jarweb-script.sh

#!/bin/sh

#设置输出语言
export LANG=en_US.UTF-8

project=jarweb-jen-ans.jar

#输出信息
echo "begin>>>>>>>>>>>>>>>>>>>>"

#获取当前服务器时间,并格式化
dqtime=$(date "+%Y-%m-%d %H:%M:%S")

#输出当前服务器时间
echo "datetime: ${dqtime}"

#获取项目正在运行的进程PID(方法有很多,这是其它一种)
javapid=$(ps -ef|grep $project |grep -v grep|awk '{print $2}')

#输出PID
echo "javapid: $javapid"

#通过项目的PID,判断有没有在运行
process=$(ps -ef |grep $javapid |grep java)
echo "process: $process"
if [ "$process" = "" ]
   then
      echo "Not found>$project<, running Java program"
else
#如果已经在运行,就直接杀死进程
  echo "Start killing the process ID of jarweb-jen-ans.jar"
  echo "kill -9 $javapid"
  kill -9 $javapid
fi

echo "<<<<<<<<<<<<<<<<<<<end"

#输出友好的倒计时提示,项目在5秒钟后启动
seconds_left=5
echo "Start the project after 5 seconds"
while [ $seconds_left -gt 0 ];
do
   echo -n "Please wait for> ${seconds_left} <seconds.."
   sleep 1
   seconds_left=$(($seconds_left - 1))
   #清除上一行内容,即上一个倒计时输出的信息
   echo -ne "\r     \r"
done

echo "Startup project $project"
#刷新profile
source /etc/profile
#项目启动需要执行的命令

nohup java -jar /home/tools/jar/jarweb-jen-ans.jar > /home/tools/jar/nohup.out 2>&1 &

#显示项目启动的日志输出
#tail -999f /home/tools/jar/nohup.out

可以使用命令来检测语法是否正确,如文件(deploy-jarweb.yml ):

root@docker_t ~# ansible-playbook --syntax-check /etc/ansible/roles/jarweb/deploy-jarweb.yml … 输出:playbook: /etc/ansible/roles/jarweb/deploy-jarweb.yml 就表示正确

b,执行命令:

root@docker_t ~# ansible-playbook /etc/ansible/roles/jarweb/deploy-jarweb.yml

到这里,就说明已经执行成功了,去浏览器输入你的项目地址访问一下,有没有启动吧

如果想更详细了解Ansible的使用,请访问这个地址吧:https://blog.rj-bai.com/post/117.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1,准备工具:
  • 2,安装Ansible,
  • 3,服务器配置 SSH
  • 4,添加要 Ansible 要管理的主机
  • 5,Ansible 命令模块 - command (默认模块)
  • 6,Ansible 复制模块 - copy
  • 7,脚本模块,远程执行脚本
  • 8,yum 安装模块 - yum
  • 9,批量服务管理模块 - service
  • 10,剧本功能模块-playbook
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档