阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ansible批量搭建LAMP环境

161次阅读
没有评论

共计 9110 个字符,预计需要花费 23 分钟才能阅读完成。

对于大批量部署服务时,可能要扛着键盘到每台主机或是每个都 ssh 连上去,大量的时间耗费在这上面,岂不可惜,由于批量部署的自动化工具的出现,节省了我们 大量的时间,其中,它们的原理主要是利用 ssh 协议或是使用 ssl 的 https,使用 ssl 的这种,它们需要在客户端安装 agent,而利用 ssh 的 ansible 就不需要了,可以在控制端执行一个脚本,可以实现将任意多个主机都批量部署上你所需要安装的服务。

下面的实验,实现批量的部署 LAMP 环境搭建(在一台主机上)

拓扑图如下

Ansible 批量搭建 LAMP 环境

后端的被控制节点,我只用了两台,可以自己取多台,上面的 yum 源和时间服务器在同一台主机上,在两个节点上,再添加两块硬盘,作为 MySQL 的二进制日志存放和数据存放,挂载等操作也会在 ansible 上行。

————————————– 分割线 ————————————–

CentOS 6.5 安装配置 LAMP http://www.linuxidc.com/Linux/2014-07/104373.htm

Ubuntu 13.04 安装 LAMP\Vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm

CentOS 5.9 下编译安装 LAMP(Apache 2.2.44+MySQL 5.6.10+PHP 5.4.12) http://www.linuxidc.com/Linux/2013-03/80333p3.htm

RedHat 5.4 下 Web 服务器架构之源码构建 LAMP 环境及应用 PHPWind http://www.linuxidc.com/Linux/2012-10/72484p2.htm

LAMP 源码环境搭建 WEB 服务器 Linux+Apache+MySQL+PHP http://www.linuxidc.com/Linux/2013-05/84882.htm

基于 Ubuntu 的 LAMP 优化加固 http://www.linuxidc.com/Linux/2014-07/104092.htm

Ubuntu 14.04 配置 LAMP+phpMyAdmin PHP(5.5.9) 开发环境 http://www.linuxidc.com/Linux/2014-10/107924.htm

————————————– 分割线 ————————————–

首先,我们可以在 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

Ansible 批量搭建 LAMP 环境

确保已经出现上面的测试页,而且,要看到 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”

# 同步时间,保证两台后端节点的时间一致性

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-10/108264p2.htm

首先,我们将部署我们的 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 环境

Ansible 批量搭建 LAMP 环境

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

对于大批量部署服务时,可能要扛着键盘到每台主机或是每个都 ssh 连上去,大量的时间耗费在这上面,岂不可惜,由于批量部署的自动化工具的出现,节省了我们 大量的时间,其中,它们的原理主要是利用 ssh 协议或是使用 ssl 的 https,使用 ssl 的这种,它们需要在客户端安装 agent,而利用 ssh 的 ansible 就不需要了,可以在控制端执行一个脚本,可以实现将任意多个主机都批量部署上你所需要安装的服务。

下面的实验,实现批量的部署 LAMP 环境搭建(在一台主机上)

拓扑图如下

Ansible 批量搭建 LAMP 环境

后端的被控制节点,我只用了两台,可以自己取多台,上面的 yum 源和时间服务器在同一台主机上,在两个节点上,再添加两块硬盘,作为 MySQL 的二进制日志存放和数据存放,挂载等操作也会在 ansible 上行。

————————————– 分割线 ————————————–

CentOS 6.5 安装配置 LAMP http://www.linuxidc.com/Linux/2014-07/104373.htm

Ubuntu 13.04 安装 LAMP\Vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm

CentOS 5.9 下编译安装 LAMP(Apache 2.2.44+MySQL 5.6.10+PHP 5.4.12) http://www.linuxidc.com/Linux/2013-03/80333p3.htm

RedHat 5.4 下 Web 服务器架构之源码构建 LAMP 环境及应用 PHPWind http://www.linuxidc.com/Linux/2012-10/72484p2.htm

LAMP 源码环境搭建 WEB 服务器 Linux+Apache+MySQL+PHP http://www.linuxidc.com/Linux/2013-05/84882.htm

基于 Ubuntu 的 LAMP 优化加固 http://www.linuxidc.com/Linux/2014-07/104092.htm

Ubuntu 14.04 配置 LAMP+phpMyAdmin PHP(5.5.9) 开发环境 http://www.linuxidc.com/Linux/2014-10/107924.htm

————————————– 分割线 ————————————–

首先,我们可以在 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

Ansible 批量搭建 LAMP 环境

确保已经出现上面的测试页,而且,要看到 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”

# 同步时间,保证两台后端节点的时间一致性

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-10/108264p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计9110字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中