Ansible部署小型企业服务框架+wordpress

一、前言
ansible作为一款灵活、高效、功能丰富的自动化部署工具在企业运维管理中备受推崇。经过测试,我来使用ansible部署小型企业服务框架,实现高可用、负载均衡的目标。如有错误敬请赐教。
目标环境拓扑:

环境介绍:
前端代理层由两台nginx实现,并安装keepalived实现地址滑动达成高可用。 web层由两套Apache+PHP+WordPress 构建应用环境。数据层由一台mariadb组成,篇幅限制这里并没有做数据库主从复制、读写分离(实际环境数据库一定要实现这两项功能)。
IP一览:
主机名 IP 功能
ansible-master 192.168.23.63 ansible管理机
ansible-vs1 192.168.23.71 vs1(nginx+keepalived)
ansible-vs2 192.168.23.72 vs2(nginx+keepalived)
ansible-rs1 192.168.23.61 rs1(httpd+php+wordpress)
ansible-rs2 192.168.23.62 rs2(httpd+php+wordpress)
ansible-mariadb 192.168.23.73 mariadb

环境介绍:
前端代理层由两台nginx实现,并安装keepalived实现地址滑动达成高可用。 web层由两套Apache+PHP+WordPress 构建应用环境。数据层由一台mariadb组成,篇幅限制这里并没有做数据库主从复制、读写分离(实际环境数据库一定要实现这两项功能)。
IP一览:
主机名 IP 功能
ansible-master 192.168.23.63 ansible管理机
ansible-vs1 192.168.23.71 vs1(nginx+keepalived)
ansible-vs2 192.168.23.72 vs2(nginx+keepalived)
ansible-rs1 192.168.23.61 rs1(httpd+php+wordpress)
ansible-rs2 192.168.23.62 rs2(httpd+php+wordpress)
ansible-mariadb 192.168.23.73 mariadb
  
二、环境准备:
2.1 管理端安装ansible,配置ssh秘钥使主机间实现基于密钥的认证,测试是否可以互相连接!
ssh-keygen -t rsa #三次回车,中途的问题是问秘钥存放位置(默认/root/.ssh),是否加密秘钥。实验方便这里不加密。
ssh-copy-id -i .ssh/id_rsa.pub [email protected] #将公钥发送给目标主机
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]

2.2 编辑ansible的hosts文件,定义所有的主机
vim /etc/ansible/hosts
[web]
192.168.23.61
192.168.23.62
[nginx]
192.168.23.71 state=MASTER priority=100
192.168.23.72 state=BACKUP priotity=90
[mysql]
192.168.23.73

2.3 为所有主机同步时间
ansible all -a ‘ntpdate cn.pool.ntp.org‘

2.4 创建ansible相关角色的目录
mkdir -pv /etc/ansible/roles/{mysql,web,nginx}/{files,tasks,templates,vars,handlers,meta}
三、配置web的playbook:
3.1 创建tasks文件
vim /etc/ansible/roles/web/tasks/main.yml

  • name: install web pakgs
    yum: name={{ item }}
    with_items:

    • httpd
    • php
    • php-mysql
  • name: config web
    copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
    notify: restart the service # 注意这里要与handlers里定义的name相同 ## notify 通知
  • name: copy wordpress
    synchronize: src=wordpress dest=/var/www/html/wordpress/
    ##synchronize 使…..同步
  • name: restart the service
    service: name=httpd state=started

3.2 创建handles
vim /etc/ansible/roles/web/handlers/main.yml

  • name: restart the service #就这
    service: name=httpd state=restarted

3.3 添加要复制过去的配置文件
放在/etc/ansible/roles/web/files/下 ① WordPress目录 ② httpd.conf #从别的地方考过来 #修改WordPress 配置文件

3.4 修改WordPress连接数据库的配置文件
cd wordpress
cp wp-config-sample.php wp-config.php
vim wp-config.php
/* WordPress数据库的名称 /
define(‘DB_NAME‘, ‘wp‘);

/* MySQL数据库用户名 /
define(‘DB_USER‘, ‘wpuser‘);

/* MySQL数据库密码 /
define(‘DB_PASSWORD‘, ‘lovelinux‘);

/* MySQL主机 /
define(‘DB_HOST‘, ‘192.168.23.73‘);

/* 创建数据表时默认的文字编码 /
define(‘DB_CHARSET‘, ‘utf8‘);
##define 定义,规定

3.5 添加web主剧本
vim /etc/ansible/web.yml

  • hosts: web
    remote_user: root
    roles:

    • web

3.6 测试,没问题的话就下一步
(-C, –check 指定该参数后,执行playbook文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改)
ansible-playbook -C /etc/ansible/web.yml

四、配置代理层:
4.1 添加task任务
vim /etc/ansible/roles/nginx/tasks/main.yml

  • name: install package
    yum: name={{ item }}
    with_items:

    • nginx
    • keepalived
  • name: config keepalived
    template: src=keepalived.conf.j2 dest=/etc/keepalived/keepalived.conf
    notify: restart keepalived
  • name: config nginx
    template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
    notify: restart nginx
  • name: start service
    service: name={{ item }} state=started enabled=yes
    with_items:
    • keepalived
    • nginx

4.2 添加handlers
vim /etc/ansible/roles/nginx/handlers/main.yml

  • name: restart keepalived
    service: name=keepalived state=restarted
  • name: restart nginx
    service: name=nginx state=restarted

4.3 准备template文件
①keepalived.conf.j2 ②nginx.conf.j2

4.4 修改keepalived模板文件keepalived.conf.j2
global_defs {
notification_email {br/>[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id {{ansible_hostname}} #自带变量,通过ansible 主机IP -m setup 查询
vrrp_mcast_group4 224.0.0.43
}

vrrp_instance VI_1 {
state {{ state }} #已通过hosts文件定义变量
interface ens33 #网卡名
virtual_router_id 51
priority {{ priority }}
advert_int 1
authentication {
auth_type PASS
auth_pass lovelinux #设置密码
}
virtual_ipaddress {
192.168.23.88 #虚拟IP
}
}

4.5 修改nginx模板文件nginx.conf.j2(定义在http段)
events {
worker_connections 1024; ## Default: 1024
}
http
{
upstream servers2.mydomain.com {
server 192.168.23.61;
server 192.168.23.62;
ip_hash;

}

server{
listen 80;
server_name www.mydomain.com;
root /usr/share/nginx/html;

location / {
    proxy_pass http://servers2.mydomain.com;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

}
}

4.6 添加nginx主剧本
vim /etc/ansible/nginx.yml

  • hosts: nginx
    remote_user: root
    roles:

    • nginx

4.7 测试,没问题的话就下一步
ansible-playbook -C /etc/ansible/nginx.yml

五、配置mariadb:
5.1 配置mariadb的任务清单
vim /etc/ansible/roles/mysql/tasks/main.yml
roles/mysql/tasks/main.yml

  • name: install mariadb
    yum: name=mariadb-server
  • name: copy sql file
    copy: src=mysql.sql dest=/tmp/mysql.sql
  • name: start mysql service
    service: name=mariadb state=started
  • name: config mysql
    shell: "mysql < /tmp/mysql.sql"

5.2 设置files文件
vim /etc/ansible/roles/mysql/files/mysql.sql
CREATE DATABASE wp;
GRANT ALL ON wp.* TO ‘wpuser‘@‘%‘ IDENTIFIED BY ‘lovelinux‘;

5.3 添加mysql主剧本
vim /etc/ansible/mysql.yml

  • hosts: mysql
    remote_user: root
    roles:

    • mysql

5.4 测试,没问题的话就下一步
ansible-playbook -C /etc/ansible/mysql.yml

六、开始表演(执行剧本):
6.1 目录结构

6.2 分别执行
ansible-playbook web.yml

ansible-playbook nginx.yml

ansible-playbook mysql.yml

6.3 访问页面
http://192.168.23.88/wordpress

七、项目总结:
7.1 在定义web的playbook时复制wordpress时开始用的是copy模块执行总是不成功,报错,google找到用synchronize模块要比copy模块高效安全的多,synchronize采用rsync复制文件,所以系统必须安装rsync 包否则无法使用这个模块。
使用该模块的优点有
① 增量复制(只复制与目标主机有差异的文件) ② 复制时采用压缩,对复制大文件支持优秀(用copy复制大文件会出错)
1

原文地址:https://blog.51cto.com/14355475/2426859

时间: 2024-10-09 22:27:55

Ansible部署小型企业服务框架+wordpress的相关文章

使用ansible结合keepalived高可用,nginx反向代理部署小型企业环境

前言: ansible作为一款灵活.高效.功能丰富的自动化部署工具在企业运维管理中备受推崇.本文演示使用ansible部署小型企业服务框架,实现高可用.负载均衡的目标.如有错误敬请赐教. 目标环境拓扑: 环境介绍: 前端代理层由两台nginx实现,并安装keepalived实现地址滑动达成高可用. web层由两套Apache+PHP+WordPress 构建应用环境.数据层由一台mariadb组成,篇幅限制这里并没有做数据库主从复制.读写分离(实际环境数据库一定要实现这两项功能). IP一览:

【干货】手动搭建一套可自动化构建的微服务框架

如何阅读 本文篇幅较长,我花了两天的时间完成,大约需要半小时阅读. 本文分为理论篇和实践篇,由于代码在手机端展示并不理想,建议大家收藏之后在PC端阅读.实践篇边动手边阅读更有助于理解. 在阅读的同时,也麻烦各位大佬多多分享! 本文你将学到什么? 本文将以原理+实战的方式,首先对"微服务"相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 这套微服务框架能干啥? 这套系统搭建完之后,那可就厉害了: 微服务架构你的整个应用程序将会被拆分成一个个功能独立的子系统,独立运行

新会议工具Skype Meetings,专为小型企业定制

据外媒报道,微软日前发布了新的音视频会议工具Skype Meetings,它本质上是Skype for Business的精简版,专门为小型企业服务. 面向企业Skype for Business可以举行多达250人的大型虚拟会议,并且与Outlook.Word和PPT 等其他办公软件工具有深度嵌入. 而SkypeMeetings的视频电话人数的上限是10人,而且60天之后,如果你不付费,那么只能最多允许3人同时在线开会.这是针对小型企业的免费增值服务. 其实,普通人使用的完全免费的Skype

基于开源Dubbo分布式RPC服务框架的部署整合

一.前言 Dubbo 作为SOA服务化治理方案的核心框架,用于提高业务逻辑的复用.整合.集中管理,具有极高的可靠性(HA)和伸缩性,被应用于阿里巴巴各成员站点,同时在包括JD.当当在内的众多互联网项目中有着广泛应用.dubbo 通过高性能 RPC 实现服务的输出和输入功能,框架基于 Spring Framework 进行无缝集成,使用过程中基本看不到 Dubbo API的直接调用,Dubbo服务支持RMI.Hessian.Dubbo.WebService等众多通信协议,同时提供了对服务的监控和管

【Rpc】基于开源Dubbo分布式RPC服务框架的部署整合

一.前言 Dubbo 作为SOA服务化治理方案的核心框架,用于提高业务逻辑的复用.整合.集中管理,具有极高的可靠性(HA)和伸缩性,被应用于阿里巴巴各成员站点,同时在包括JD.当当在内的众多互联网项目中有着广泛应用.dubbo 通过高性能 RPC 实现服务的输出和输入功能,框架基于 Spring Framework 进行无缝集成,使用过程中基本看不到 Dubbo API的直接调用,Dubbo服务支持RMI.Hessian.Dubbo.WebService等众多通信协议,同时提供了对服务的监控和管

分布式服务框架学习笔记1 应用架构演进

传统垂直应用架构 业界曾比较流行的有: LAMP架构:Linux+Apache+PHP(前后端分离)+MySQL(读写分离) MVC架构:Spring+Struts+iBatis/Hibernate+Tomcat 在高并发.大流量的应用场景中,需要做集群,通常的组网方案是前端通过F5等负载均衡器做七层负载均衡(或者使用SLB等软负载),后端做对等集群部署. 随着业务的不断发展,应用规模日趋庞大,传统垂直架构开发模式的弊端变得越来越突出.这就需要将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服

分布式服务框架选型:面对Dubbo,阿里巴巴为什么选择了HSF?

转载:http://www.sohu.com/a/141490021_268033 阿里巴巴集团内部使用的分布式服务框架 HSF(High Speed Framework,也有人戏称"好舒服")已经被很多技术爱好者所熟知,目前已经支撑着近 2000 多个应用的运行. 其对应早期的开源项目 Dubbo(因为某些原因,Dubbo 项目在 2012 年年底,阿里巴巴就停止了对此开源项目的更新),则更是在互联网领域有着非常高的知名度和广泛的使用. 本文通过对阿里巴巴 HSF 服务框架的介绍,让

部署Windows RDS服务

部署远程桌面服务 在企业中部署大量的计算机,不仅投资大,维护也十分困难,通过在终端服务的基础上将桌面和应用程序虚拟化,可以极大的提高员工的工作效率,降低企业成本. 微软公司推出的RDS(远程桌面服务),管理员在RDS服务器上集中部署应用程序,以虚拟化的方式为用户提供访问,用户不用再自己的计算机安装应用程序.当用户在远程桌面调用位于RDS服务器上的应用程序时,就像运行在自己的计算机上一样,但实际上使用的是服务器的资源,即使用户计算机配置较低时,也不用更换计算机,节约了企业的成本,减少了维护成本和复

阿里巴巴分布式服务框架Dubbo介绍(1)主要特色

引言 互联网服务和BS架构的传统企业软件相比,系统规模上产生了量级的差距.例如 传统BS企业内部门户只需要考虑数百人以及几千人的访问压力,而大型互联网服务有时需要考虑的是千万甚至上亿的用户: 传统企业管理系统管理的物料信息等,可能只有数万或数十万条记录,而一个大型B2C网站的商品SKU动辄千万,考虑到商品信息更新的历史记录,商品订单记录等数据,更是天文数字. 原始的SSH+DB的BS开发模式,显然已经无法满足现代互联网服务的需要.随着企业软件不断地向云端迁移的趋势越来越明显,最终中小型企业软件系