• ADADADADAD

    ansible--基础[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:55:35

    作者:文/会员上传

    简介:

    马哥出品 ansible中文文档:http://www.ansible.com.cn/index.htmlansible介绍:ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT运

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    马哥出品 ansible中文文档:http://www.ansible.com.cn/index.html

    ansible介绍:

    ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT运维管理工具。这个工具的目标有这么几项:让我们自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的(AWS)云服务管理。基于Python开发,可实现对多台服务器进行批量配置、程序的部署及指令的运行。大大减少了在运维工程中的工作量。

    ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

    (1)、连接插件connection plugins:负责和被监控端实现通信;

    (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

    (3)、各种模块核心模块、command模块、自定义模块;

    (4)、借助于插件完成记录日志邮件等功能;

    (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。


    ansible特点:

    1.简单,ansible自然的自动化语言与允许运维人员,开发者,和IT管理人员在很短的时间内完成自动化项目。

    2.无代理,默认使用SSH而不需要客户端。避免了额外的端口开启,提高安全性,避免不必要的管理,减少CPU的使用

    3.干的活多,ansible能干自动完成软件部署,配置管理,流程化管理,和cloud provisioning。


    ansible安装:

    由于ansible是用python开发的,安装过程中依赖众多python模块,这里建议yum安装ansible,想要更新版本的可下载源码编译安装,

    yum install ansible -y

    yum安装ansible的默认配置文件路径,ansible.cfg是ansible的主配置文件,

    ansible]# ls /etc/ansible/

    ansible.cfghosts roles

    hosts是默认的hostfile路径,可配置DNS域名,ip。


    通过ssh key方式连接远端客户机,省去密码环节

    ssh-keygen -t rsa -P ''

    ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.137.130


    注意这个地方是有个坑的,由于ansible执行的时候需要把临时模块拷贝到客户端,而默认的拷贝方式是通过sftp来的方式拷贝的,如果你的客户端没有装sftp,那么执行ansible会出错的。

    如果没装sftp可以用scp。 下面的这一行本来是注释起来的,把注释去掉就OK了

    ansible]#grep"scp_if_ssh"/etc/ansible/ansible.cfg

    scp_if_ssh=True


    还有个坑,即使装了sftp也不一定能用,你的ssh要启用它才OK。

    ansible]#grep"Subsystem"/etc/ssh/sshd_config

    Subsystemsftp/usr/lib/openssh/sftp-server


    ansible的基本工作流程:

    1.ansible通过OPENSSH或者python的pramamiko连接客户端

    2.把ansible module推送到客户端。

    ansible]#grep"remote_tmp"/etc/ansible/ansible.cfg

    remote_tmp=$HOME/.ansible/tmp

    ansible]#ansibleone -a"ls~/.ansible"

    salt-master|success|rc=0>>

    tmp

    3.通过ssh执行客户端上的ansible module

    4.执行完毕

    5.删除刚刚推送过去的ansible module


    ansible基本命令行模块:

    ansible-doc -s 模块名 ##查看模块用法帮助

    ansible-doc -l##查看有哪些可用模块


    1.临时做小事情或一次性行为可用命令行,大型或经常重复使用的活用play-book

    2.命令行三剑客:command(默认),shell(支持管道,变量,),raw(客户机不能装python时使用)

    3.官方建议用command,shell和raw需要用到的时候再用


    command:命令模块,默认模块,用于远程执行命令

    -a 'COMMAND'

    ansible]# grep -n "module_name" ansible.cfg

    97:#module_name = command

    ansible all -a 'date'


    user:

    -a 'name= state={present|absent} system= uid='

    # ansible one -m user -a 'name=mysql uid=306 system=yes group=mysql'

    #ansibleone-muser-a'name=mysqlshell=/sbin/nologincreatehome=no'


    group:

    -a 'name= gid= state= system='

    # ansible one -m group -a 'name=mysql gid=306 system=yes'


    cron:修改定时任务

    -a 'name="" minute= hour= day= month= weekday= job= user= state='

    state状态

    present:增加

    absent:删除,配置name就可移除

    # ansible one -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'


    copy:复制文件到远程主机

    -a 'dest= src= mode= owner= group='

    src=:定义本地源文件路径

    dest=:定义远程目标文件路径

    content=:取代src=,表示直接用此处指定的信息生成目标文件内容;

    # ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible owner=/root mode=640'

    # ansible all -m copy -a 'content="Hello Ansible\nHi MageEdu" dest=/tmp/test.ansible'


    file:设定文件属性

    -a 'path= mode= owner= group= state={directory|link|present|absent} src='

    path=:指定文件路径,可以使用name或dest来替换

    创建文件的符号链接

    src=:指明源文件

    path=:指明符号链接文件路径

    # ansible all -m file -a 'path=/tmp/fstab.link src=/tmp/fstab.ansible state=link'

    # ansible all -m file -a "path=/tmp/resolv.conf state=absent"

    #ansiblesalt-master-mfile-a'dest=/tmp/ansible.logowner=lixc group=lixc mode=644

    state=touch'#touch:远程主机创建文件


    force:需要在两种情况下强制创建软链接,

    一种是源文件不存在,但之后会建立的情况下;

    另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

    group:定义文件/目录的属组

    mode:定义文件/目录的权限

    owner:定义文件/目录的属主

    path:必选项,定义文件/目录的路径

    recurse:递归设置文件的属性,只对目录有效

    src:被链接的源文件路径,只应用于state=link的情况

    dest:被链接到的路径,只应用于state=link的情况

    state:

    directory:创建递归文件,如果目录不存在,就创建目录,

    file:即使文件不存在,也不会被创建

    link:创建软链接

    hard:创建硬链接

    touch:如果文件不存在,则创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

    absent:删除目录、文件或者取消链接文件


    ping:测试指定主机能否连接


    yum:安装程序包

    -a 'name= state={present|latest|absent}'

    name:指明要安装的程序包,可以带上版本号

    state=:present,latest表示安装,absent表示卸载

    #ansibleone -m yum -a'name=mysql-serverstate=latest|installed'


    还有一个后台执行的功能。

    -B 30是设置后台执行时间为30秒,

    -P2是没两秒钟报告一次状态,这个当你的任务要执行很长时间的时候可以用。

    #ansibleone -myum -a'name=apache2state=installed' -B30-P2>>/dev/null


    service:指定运行状态

    -a 'name= state={started|stopped|restarted} enabled='

    name=:服务名称

    state=:状态,取值有started,stopped,restarted

    enabled=:是否开机自动启动,取值为true或者false


    shell: ##可支持管道,变量,command模块不支持,

    例:echo "centos" |passwd --stdin centos

    # ansible storm_cluster -m shell -a "/tmp/rocketzhang_test.sh"


    script: ##将本地脚本复制到远程主机并运行之;要使用相对路径指定脚本

    -a '/path/to/script'


    setup: ##收集远程主机的facts

    每个被管理节点在接收并运行管理命令之前,会将自己主机相关信息,如操作系统版本,ip地址等报告给远程的ansible主机


    Inventory的默认路径是在/etc/ansible/hosts,分为静态和动态两种

    静态:需要手工的把你要管理的主机写进去。

    动态:事先有一个资源管理系统,里面有所有主机信息,用脚本程序把资源管理系统里的信息给拉过来,以json格式呈现

    配置静态Inventory:

    ansible]#cat-n/etc/ansible/hosts

    1 [alltest:children]

    2 salt

    3 leihuo

    4

    5 [salt]

    6 salt-masteransible_ssh_user=lixcansible_ssh_pass=123456

    7 10.240.162.112ansible_connection=paramiko

    8

    9 [leihuo]

    10 lixcansible_ssh_host=192.168.131.203ansible_ssh_port=21100

    11 10.240.162.11[1:9]:22


    第1行,alltest这个组包含俩子组分别是下面的salt,和leihuo

    第6行可以设置主机的默认连接用户,及密码

    第7行可以设置ssh的连接方式,默认是openssh,我这里用paramiko,不用官网推荐用openssh,因为openssh查询key的时候,很耗时,效率不高。

    第10行,可以给主机随便取个别名,这里的“lixc”就是一个别名,如果ssh默认端口不是22,这里可以

    指定特定的端口,

    指定ssh端口也可以像第11行,这么指定。

    不过以上两种指定ssh端口方法,只针对我们有少部分的主机是特殊端口,如果我们所有主机都是指定的端口,配置文件里有个选项,改成我们需要的端口就OK了,修改后对全局有效



    ansible]#grep"remote_port"/etc/ansible/ansible.cfg

    remote_port=22


    第7行和11行,是俩相同的主机,说明同一主机可以在不同的组中。在现实当中就像我一台服务器即可以装mysql也可以装apache是一个道理。


    变量:

    ansible的变量主要给后面的playbook使用,分为主机变量和组变量

    ansible]#cat-n/etc/ansible/hosts

    1 [alltest:children]

    2 salt

    3 leihuo

    4

    5 [salt]

    6 salt-mastersalt-port=4505mysql-port=3306

    7 10.240.162.112salt-path=/usr/bin/salt-call

    8

    9 [leihuo]

    10 lixcansible_ssh_host=192.168.131.203ansible_ssh_port=21100

    11 10.240.162.11[1:9]:22

    12[alltest:vars]

    13ls-path=/bin/ls

    14liss=lisisi


    6,7行设置主机变量

    12-14行,设置的为alltest这个组的变量。组变量就是,我这个组的成员都可以用

    当然我们也可以不在/etc/ansible/hosts里面定义变量,也可以把变量写进单独的文件里,不过变量定义的形式就不是谁=谁,这么个形式了。而是遵循yaml语法的key: value的形式。

    把变量写进文件:

    ansible]#fordirin{host_vars,group_vars};dols/etc/ansible/${dir};done

    10.240.162.112salt-master

    alltest

    文件定义格式:

    ansible]#cat/etc/ansible/host_vars/salt-master

    ---

    salt-port:4505

    mysql-port:3306


    ansible目标主机匹配patterns:

    匹配所有主机

    *或者all

    匹配多个组

    salt:leihuo

    在salt这个组里,但不能在leihuo这个组里的主机

    salt:!leihuo

    取两个组的交集

    salt:&leihuo

    排除某一主机

    ansible-playbook site.yaml --limit salt-msater

    当然也可以用正则,在/etc/ansible/hosts里面去定义。如

    ~salt(master|minion)\.li*\.com


    ansible--基础.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: Ansibleansi