设为首页 收藏本站
查看: 983|回复: 0

[经验分享] ansible批量搭建LAMP环境

[复制链接]

尚未签到

发表于 2018-7-30 12:57:59 | 显示全部楼层 |阅读模式
  对于大批量部署服务时,可能要扛着键盘到每台主机或是每个都ssh连上去,大量的时间耗费在这上面,岂不可惜,由于批量部署的自动化工具的出现,节省了我们
大量的时间,其中,它们的原理主要是利用ssh协议或是使用ssl的https,使用ssl的这种,它们需要在客户端安装agent,而利用ssh的
ansible就不需要了,可以在控制端执行一个脚本,可以实现将任意多个主机都批量部署上你所需要安装的服务。
  下面的实验,实现批量的部署LAMP环境搭建(在一台主机上)
  拓扑图如下

  后端的被控制节点,我只用了两台,可以自己取多台,上面的yum源和时间服务器在同一台主机上,在两个节点上,再添加两块硬盘,作为MySQL的二进制日志存放和数据存放,挂载等操作也会在ansible上行。
  首先,我们可以在ansible服务器上安装LAMP环境,然后,再将配置文件通过ansible拷贝到远程主机上
  第一步:安装httpd软件
[root@node1 ~]# yum install httpd  第二部:安装MySQL
[root@node1 ~]# yum install mysql-server  此时,我们要创建两个目录,同时,要挂载两个逻辑卷,作为数据存放和二进制日志存放位置
[root@node1 ~]# mkdir -pv /mydata/{binlogs,data}     #后端的两个节点,都另外加了磁盘改变其属组和属主  
[root@node1 ~]# chown -R mysql:mysql /mydata/
  编辑配置文件
[root@node1 ~]# vim /etc/my.cnf  
datadir=/mydata/data     #改变数据存放目录
  
log-bin=/mydata/binlogs/mysql-bin      #添加此项,指定二进制日志存放位置
  启动MySQL服务
[root@node1 ~]# service mysqld start  第三步:安装PHP服务
[root@node1 ~]# yum install php  第四步:安装PHP和MySQL的交互所用到的模块
[root@node1 ~]# yum install php-mysql  第五步:更改httpd的配置文件,使其能够解析PHP
  添加下面选项
AddType application/x-httpd-php .php  
AddType application/x-httpd-php-source .phps
  
DirectoryIndex index.html index.php  index.html.var     #添加主持php主页
  第六步:提供php的测试页
[root@node1 ~]# vim /var/www/html/index.php  
<?php
  
    phpinfo();
  
?>
  启动httpd服务,在浏览器中访问
  [root@node1 ~]# service httpd start

  确保已经出现上面的测试页,而且,要看到MySQL已经被整合进来了,才能进行下一步操作
  在node1上安装ansible服务
[root@node1 ~]# yum install ansible  此时,我们再加入两个干净的CentOS6.5的主机,同时,这两台主机还有两块空闲的硬盘/dev/sdb和/dev/sdc,建立一个分区,sdb1和sdc1(使用fdisk)
  将原来的ansible的hosts文件备份,在文件中定义上面加入的两台主机,即要做批量安装的主机
[root@node1 ~]# cd /etc/ansible/  
[root@node1 ansible]# cp hosts hosts.bak
  
[root@node1 ansible]# vim hosts
  
[nodes]     #定义组,名为nodes
  
192.168.81.130
  
192.168.81.131
  然后,ansible和两个节点间通过ssh进行连接
[root@node1 ~]# ssh-keygen -t rsa -P ''     #生成密钥对  将公钥信息复制到被控制节点(两个节点上)
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.81.130  开始我们的playbook吧,创建一个LAMP构建的任务
[root@node1 ~]# mkdir -pv lamp/roles/{prepare,httpd,mysql,php}/{tasks,files,templates,vars,meta,default,handlers}  我们将上面搭建成功的LAMP环境的httpd和MySQL的配置文件拷贝到对应目录下
[root@node1 ~]# cp /etc/httpd/conf/httpd.conf lamp/roles/httpd/files/  
[root@node1 ~]# cp /etc/my.cnf lamp/roles/mysql/files/
  对于批量部署的状况,我们会使用到yum安装软件,这里,我自己有一台yum服务器,所以,
  我要将被控制端的yum源指向到我的yum服务器,而且,各服务器要保持时间一致
[root@node1 roles]# vim prepare/tasks/main.yml  
- name: provide yumrepo file
  
  shell: rm -f /etc/yum.repos.d/*.repo        #删除原有的yum配置文件
  
  shell: wget http://192.168.81.128/cshang.repo    #下载新的yum配置文件
  
- name: clean the yum repo
  
  shell: yum clean all    #清除原有的yum缓存信息
  
- name: sync the time
  
  cron: name="sync time" minute="*/5" job="/usr/sbin/ntpdate 192.168.81.128 &> /dev/null"
  #同步时间,保证两台后端节点的时间一致性
  首先,我们将部署我们的MySQL服务
  创建MySQL服务的任务,我们要做的是:
  安装MySQL服务,格式化分区,创建挂载点,改变属主信息,将分区进行挂载,启动MySQL
[root@node1 roles]# vim mysql/tasks/main.yml  
- name: install the mysql
  
  yum: name=mysql-server state=present    #安装mysql服务
  
- name: make mount directories
  
  shell: mkdir -p /mydata/{binlogs,data}    #创建挂载点目录
  
- name: remove the dmsetup use
  
  shell: dmsetup remove_all        #避免分区被dm服务占用
  
- name: make filesystem
  
  filesystem: fstype=ext4 dev={{ item }}    #格式化文件系统
  
  with_items:
  
  – /dev/sdb1
  
  – /dev/sdc1
  
- name: mount the binlogs partition
  
  mount: name=/mydata/binlogs src=/dev/sdb1 fstype=ext4 state=present    #挂载分区
  
- name: mount the data partition
  
  mount: name=/mydata/data src=/dev/sdc1 fstype=ext4 state=present
  
- name: mount fstab
  
  shell: mount -a    #挂载fstab上的所有设备
  
- name: provide configration file
  
  copy: src=my.cnf dest=/etc/my.cnf    #提供mysql的配置文件爱你
  
- name: chage the owner
  
  shell: chown -R mysql:mysql /mydata/*    #更改属主和属组
  
- name: start mysql
  
  service: name=mysqld enabled=yes state=started    #启动mysql服务
  注意事项:mount选项,官方第一句是这么说的
  This module controls active and configured mount points in
  `/etc/fstab'.
  意思是,写进配置文件的,我们用df -h是看不到挂载的,要再加mount -a命令
  构建PHP的任务
[root@node1 roles]# vim php/tasks/main.yml  
- name: install php
  
  yum: name=php state=present    #安装php
  
- name: install php-mysql
  
  yum: name=php-mysql state=present    #安装php与mysql交互的插件
  构建httpd的任务
[root@node1 roles]# mv /var/www/html/index.php httpd/files/  
[root@node1 httpd]# vim tasks/main.yml     #任务
  
- name: web server install
  
  yum: name=httpd state=present    #安装httpd服务
  
- name: provide test page
  
  copy: src=index.php dest=/var/www/html    #提供测试页
  
- name: provide configuration file
  
  copy:src=httpd.conf dest=/etc/httpd/conf/httpd.conf    #提供httpd的配置文件
  
  notify:restart httpd
  构建httpd的handlers
[root@node1 roles]# vim httpd/handlers/main.yml  
- name: restart httpd
  
  service: name=httpd enabled=yes state=restarted
  定义整个的任务
[root@node1 roles]# vim site.yml     #在roles目录中创建  
- name: LAMP build
  
  remote_user: root
  
  hosts: nodes
  
  roles:
  
    – prepare
  
    – mysql
  
    – php
  
    – httpd
  各目录下的文件结构图如下
lamp/  

  └── roles
  ├── httpd
  │   ├── default
  │   ├── files
  │   │   ├── httpd.conf
  │   │   └── index.php
  │   ├── handlers
  │   │   └── main.yml
  │   ├── meta
  │   ├── tasks
  │   │   └── main.yml
  │   ├── templates
  │   └── vars
  ├── mysql
  │   ├── default
  │   ├── files
  │   │   └── my.cnf
  │   ├── handlers
  │   ├── meta
  │   ├── tasks
  │   │   └── main.yml
  │   ├── templates
  │   └── vars
  ├── php
  │   ├── default
  │   ├── files
  │   ├── handlers
  │   ├── meta
  │   ├── tasks
  │   │   └── main.yml
  │   ├── templates
  │   └── vars
  ├── prepare
  │   ├── default
  │   ├── files
  │   ├── handlers
  │   ├── meta
  │   ├── tasks
  │   │   └── main.yml
  │   ├── tmplates
  │   └── vars
  └── site.yml
  然后,在浏览器中访问这两台节点主机


  
实验到这里就结束了,通过ansible批量部署的形式搭建LAMP环境,而且,MySQL的二进制日志和数据也分开存放了,但是,还是要人为的分区,其
实,也可以使用ansible的script模块,在shell脚本中对磁盘进行分区,这样就不需要手动去分区了,更加的傻瓜化。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-543611-1-1.html 上篇帖子: ansible学习笔记(一) 下篇帖子: 简单自动化Ansible--安装及简单应用(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表