1. 程式人生 > 實用技巧 >ansible自動部署叢集服務

ansible自動部署叢集服務

wKioL1e6u82QYNohAAB_ChDn_lE663.png

上面的思路大致是:

首先配置yum倉庫,之後搭建http+php,之後搭建資料庫,其次搭建nginx反代,最後設定keepalived自動化安裝。


[[email protected] ansible]# pwd

/etc/ansible

[[email protected] ansible]# tree -L 3 roles/

roles/

├── base

│ ├── files

│ │ ├── mage6.repo

│ │ └── mage7.repo

│ └── tasks

│ └── main.yml

├── db

│ ├── files

│ │ ├── my6.cnf

│ │ └── my7.cnf

│ ├── handlers

│ │ └── main.yml

│ └── tasks

│ └── main.yml

├── http+php

│ ├── handlers

│ │ └── main.yml

│ ├── tasks

│ │ └── main.yml

│ ├── templates

│ │ ├── httpd.conf6.j2

│ │ └── httpd.conf7.j2

│ └── vars

│ └── main.yml

├── keepalived

│ ├── handlers

│ │ └── main.yml

│ ├── tasks

│ │ └── main.yml

│ └── templates

│ └── keepalived.conf.j2

├── nginx

│ ├── handlers

│ │ └── main.yml

│ ├── tasks

│ │ └── main.yml

│ ├── templates

│ │ └── nginx.conf.j2

│ └── vars

│ └── main.yml

└── webdata

├── files

│ ├── index.html

│ ├── index.php

│ └── wordpress

└── tasks

└── main.yml

最後建立完成要有這些檔案

首先修改ansible主配置檔案

[[email protected] ansible]# vim hosts

只留一下部分:

[keepnginx]

172.16.1.3 hhname=kepnx1.zou.com state=MASTER pri=100

172.16.1.5 hhname=kepnx2.zou.com state=BACKUP pri=98

[httphp]

172.16.1.11 hhname=hp1.zou.com

172.16.1.8 hhname=hp2.zou.com

[db]

172.16.1.12 hhname=db.zou.com



base

├── files

│ ├── mage6.repo

│ └── mage7.repo

└── tasks

└── main.yml


[[email protected] roles]# vim base/tasks/main.yml

- name: install repo-file

copy: src=mage7.repo dest=/etc/yum.repos.d/

when: ansible_distribution_major_version == "7"

- name: install repo source for yum

copy: src=mage6.repo dest=/etc/yum.repos.d/

when: ansible_distribution_major_version == "6"

- name: rm some file of repos

shell: rm -rf /etc/yum.repos.d/C*

- name: set hostname

hostname: name=` hhname `

tags: sethostname

- name: install killall for ckeck servers's state

yum: name=psmisc state=latest

- name: install bash-completion

yum: name=bash-completion state=latest

之後準備好兩個可以yum安裝冊倉庫源設定好mage6.repo 和 mage7.repo



http+php/

├── handlers

│ └── main.yml

├── tasks

│ └── main.yml

├── templates

│ ├── httpd.conf6.j2

│ └── httpd.conf7.j2

└── vars

└── main.yml


[[email protected] roles]# vim http+php/handlers/main.yml

- name: restart httpd

service: name=httpd state=restarted

[[email protected] roles]# vim http+php/tasks/main.yml

- name: install http

yum: name=httpd state=latest

- name: install php

yum: name=php state=latest

- name: install php-mysql

yum: name=php-mysql state=latest

- name: install php-gd

yum: name=php-gd state=latest

- name: install php-mbsting

yum: name=php-mbstring state=latest

when: ansible_distribution_major_version == "7"

- name: install php-xml

yum: name=php-xml state=latest

- name: mkdir web' file

file: path=` htdocumentroot ` state=directory

- name: install httpd.conf

template: src=httpd.conf6.j2 dest=/etc/httpd/conf/httpd.conf

notify: restart httpd

tags: rehttpdconf

when: ansible_distribution_major_version == "6"

- name: install httpd.conf

template: src=httpd.conf7.j2 dest=/etc/httpd/conf/httpd.conf

notify: restart httpd

tags: rehttpdconf

when: ansible_distribution_major_version == "7"

- name: start httpd

service: name=httpd state=started

[[email protected] roles]# vim http+php/templates/httpd.conf6.j2

修改:

Listen ` htport `

DocumentRoot "` htdocumentroot `"

<Directory "` htdocumentroot `">

ErrorLog ` htdocumentroot `/error_log

CustomLog ` htdocumentroot `/access_log combined

[[email protected] roles]# vim http+php/templates/httpd.conf7.j2

修改:

Listen ` htport `

User ` htuser `

Group ` htgroup `

ServerName ` hhname `:80

DocumentRoot "` htdocumentroot `"

<Directory "` htdocumentroot `">

<Directory "` htdocumentroot `">

ErrorLog "` htdocumentroot `/error_log"

CustomLog "` htdocumentroot `/access_log" combined


[[email protected] roles]# vim http+php/vars/main.yml

htuser: apache

htgroup: apache

htport: 80

htdocumentroot: /data/www


db

├── files

│ ├── my6.cnf

│ └── my7.cnf

├── handlers

│ └── main.yml

└── tasks

└── main.yml


[[email protected] db]# vim files/my6.cnf

[mysqld]

datadir=/data/db

socket=/var/lib/mysql/mysql.sock

user=mysql

innodb_file_per_table=ON

skip_name_resolve=ON


# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0


[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[[email protected] db]# vim files/my7.cnf

[mysqld]

datadir=/data/db

socket=/var/lib/mysql/mysql.sock

innodb_file_per_table=ON

skip_name_resolve=ON

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mariadb according to the

# instructions in http://fedoraproject.org/wiki/Systemd


[mysqld_safe]

log-error=/var/log/mariadb/mariadb.log

pid-file=/var/run/mariadb/mariadb.pid


#

# include all files from the config directory

#

!includedir /etc/my.cnf.d

vim handlers/main.yml

- name: restart mariadb

service: name=mariadb state=restarted

- name: restart mysql

service: name=mysqld state=restarted

[[email protected] db]# vim tasks/main.yml

- name: install mariadb-server

yum: name=mariadb-server state=latest

when: ansible_distribution_major_version == "7"

- name: install mysql-server

yum: name=mysql-server state=latest

when: ansible_distribution_major_version == "6"

- name: build data file

file: path=/data/db owner=mysql group=mysql state=directory

- name: install mariadb conf

copy: src=my7.cnf dest=/etc/my.cnf

notify: restart mariadb

tags: remariadbconf

when: ansible_distribution_major_version == "7"

- name: install mysql conf

copy: src=my6.cnf dest=/etc/my.cnf

notify: restart mysql

tags: remysqlconf

when: ansible_distribution_major_version == "6"

- name: start mariadb

service: name=mariadb state=started

when: ansible_distribution_major_version == "7"

- name: start mysql

service: name=mysqld state=started

when: ansible_distribution_major_version == "6"

webdata/

├── files

│ ├── index.html

│ ├── index.php

│ └── wordpress

└── tasks

└── main.yml


[[email protected] roles]# vim webdata/tasks/main.yml

- name: web of index.html for test

copy: src=index.html dest=/data/www

- name: web of index.php for test

copy: src=index.php dest=/data/www

- name: web of wordpress

copy: src=wordpress dest=/data/www/

tags: copywordpress

[[email protected] roles]# vim webdata/files/index.html

web form ` hhname ` the version is ` ansible_distribution_major_version `;

[[email protected] roles]# vim webdata/files/index.ph

<?php

$conn=mysql_connect('172.16.1.12','zou','123.comer');

if($conn)

echo ok;

echo the web from ` hhname `;

else

echo fault;

mysql_close();

phpinfo()

?>

之後準備好wordpress網頁壓縮包解壓縮只有放到這個響應的位置,並編輯好wp-config.php


nginx

├── handlers

│ └── main.yml

├── tasks

│ └── main.yml

├── templates

│ └── nginx.conf.j2

└── vars

└── main.yml

[[email protected] nginx]# vim tasks/main.yml

- name: install nginx package

yum: name=nginx state=present

- name: install conf file

template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf

notify: restart nginx

tags: reinstallconf

- name: start nginx

service: name=nginx state=started enabled=true

[[email protected] nginx]# cat handlers/main.yml

- name: restart nginx

service: name=nginx state=restarted

[[email protected] nginx]# cat vars/main.yml

username: nginx


[[email protected] nginx]# grep -v '^[[:space:]]\+#' templates/nginx.conf.j2

user ` username `;

worker_processes ` ansible_processor_vcpus `;


error_log /var/log/nginx/error.log warn;

pid /var/run/nginx.pid;



events {

worker_connections 1024;

}



http {

include /etc/nginx/mime.types;

default_type application/octet-stream;


log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';


access_log /var/log/nginx/access.log main;


sendfile on;


keepalive_timeout 65;


gzip on;


upstream backend {

server 172.16.1.8;

server 172.16.1.11 weight=2;

}


include /etc/nginx/conf.d/*.conf;

#########################################################################

#sorry nginx #

###################


server {

listen 80;

server_name ` hhname `;


#

location / {

proxy_pass http://backend;

index index.html index.php;

}



error_page 500 502 503 504 /50x.html;




}


}


keepalived/

├── handlers

│ └── main.yml

├── tasks

│ └── main.yml

└── templates

└── keepalived.conf.j2

[[email protected] keepalived]# vim tasks/main.yml

- name: install the keepalived

yum: name=keepalived state=latest

- name: install ntpdate

yum: name=ntpdate state=latest

- name: make time to equal

shell: ntpdate 172.16.0.1

- name: install the conf_file

template: src=keepalived.conf.j2 dest=/etc/keepalived/keepalived.conf

notify: restart keepalived

tags: rekeepconf

- name: start keepalived

service: name=keepalived state=started enabled=true

[[email protected] keepalived]# vim handlers/main.yml

- name: restart keepalived

service: name=keepalived state=restarted

[[email protected] keepalived]# cat templates/keepalived.conf.j2


global_defs {

notification_email {

[email protected]

}

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id ` hhname `

vrrp_mcast_group4 224.0.101.1

}


vrrp_script chk_nginx {

script "killall -0 nginx && exit 0 || exit 1"

interval 1

weight -5

}

track_script {

chk_nginx

}


vrrp_instance VI_1 {

state ` state `

interface eno16777736

virtual_router_id 101

priority ` pri `

advert_int 1

authentication {

auth_type PASS

auth_pass 123.com

}

virtual_ipaddress {

172.16.1.4

}

track_script {

chk_nginx

}

}


基本定義完成角色,但是要想要生效還要呼叫角色,執行才能實現叢集的部署

/root/myansible/

├── base.yml

├── db.yml

├── hp+webdata.yml

├── http+php.yml

└── keng.yml


[[email protected] myansible]# cat base.yml

- hosts: all

remote_user: root

roles:

- base


[[email protected] myansible]# cat http+php.yml

- hosts: httphp

remote_user: root

roles:

- http+php


[[email protected] myansible]# cat db.yml

- hosts: db

remote_user: root

roles:

- db


[[email protected] myansible]# cat hp+webdata.yml

- hosts: httphp

remote_user: root

roles:

- webdata


[[email protected] myansible]# cat keng.yml

- hosts: keepnginx

remote_user: root

roles:

- keepalived

- { role: nginx, username: nginx, when: "ansible_distribution_major_version == '7'" }


ansible是不同啟動的,安裝完畢,配置好hosts檔案即可使用,這就是安裝了一個命令


[[email protected] myansible]# ansible-playbook base.yml --check

[[email protected] myansible]# ansible-playbook base.yml


[[email protected] myansible]# ansible-playbook http+php.yml --check

[[email protected] myansible]# ansible-playbook http+php.yml


[[email protected] myansible]# ansible-playbook db.yml --check

[[email protected] myansible]# ansible-playbook db.yml


[[email protected] myansible]# ansible-playbook hp+webdata.yml --check

[[email protected] myansible]# ansible-playbook hp+webdata.yml


[[email protected] myansible]# ansible-playbook keng.yml --check

[[email protected] myansible]# ansible-playbook keng.yml


轉載於:https://blog.51cto.com/941012521/1841164