M63-第十三周作業(yè)

1、ansible-playbook實現(xiàn)MySQL的二進制部署

1.1 安裝ansible

# yum -y install ansible

1.2 配置主機清單文件

# vi /etc/ansible/hosts

[local]

10.0.0.7? ? ansible_connection=local? ? #指定連接類型為本地捍掺,無需通過ssh連接

[mysql]

10.0.0.17

10.0.0.27

10.0.0.37

1.3 mysql配置文件

# cat /apps/mysql/my.cnf

[mysqld]

user=mysql

datadir=/data/mysql

socket=/data/mysql/mysql.sock

innodb_file_per_table=on

skip_name_resolve = on #禁止主機名解析锡垄,建議使用

[client]

port=3306

socket=/data/mysql/mysql.sock

[mysqld_safe]

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

pid-file=/data/mysql/mysql.pid

2江解、ssh免密授權(quán)

2.1 使用腳本實現(xiàn)

# bash ssh_key.sh

Generating public/private rsa key pair.

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:laHw87m60FI35AeBGdv5NhU8PW4Ol77WFPssLZK+LEY root@7-1

The key's randomart image is:

+---[RSA 2048]----+

|? ? ? . .+o? ... |

|? ? ? oo+ =? oo.|

|? ? ? ? = B? o.o|

|? ? ? ? * + o * |

|? ? ? ? S * = * o|

|? ? ? o .E= . +.|

|? ? ? o ...? . ++|

|? ? ? o .o.o oo=|

|? ? ? ? oo o+o.o |

+----[SHA256]-----+

sshpass-1.06-2.el7.x86_64

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1

Now try logging into the machine, with:? "ssh -o 'StrictHostKeyChecking=no' '10.0.0.7'"

and check to make sure that only the key(s) you wanted were added.

ssh: connect to host 10.0.0.3 port 22: Connection refused

lost connection

ssh: connect to host 10.0.0.3 port 22: Connection refused

lost connection

known_hosts? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 1195? 619.5KB/s? 00:00? ?

known_hosts? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 1195? ? 1.1MB/s? 00:00? ?

known_hosts? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 1195? 604.3KB/s? 00:00? ?

known_hosts? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 1195? ? 1.8MB/s? 00:00? ?

known_hosts? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 1195? ? 1.6MB/s? 00:00? ?

known_hosts? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100% 1195? ? 1.5MB/s? 00:00? ?

known_hosts? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

2.2 ssh健康性檢查

# ansible mysql -m ping

10.0.0.7 | SUCCESS => {

? ? "ansible_facts": {

? ? ? ? "discovered_interpreter_python": "/usr/bin/python"

? ? },

? ? "changed": false,

? ? "ping": "pong"

}

10.0.0.17 | SUCCESS => {

? ? "ansible_facts": {

? ? ? ? "discovered_interpreter_python": "/usr/bin/python"

? ? },

? ? "changed": false,

? ? "ping": "pong"

}

10.0.0.37 | SUCCESS => {

? ? "ansible_facts": {

? ? ? ? "discovered_interpreter_python": "/usr/bin/python"

? ? },

? ? "changed": false,

? ? "ping": "pong"

}

10.0.0.27 | SUCCESS => {

? ? "ansible_facts": {

? ? ? ? "discovered_interpreter_python": "/usr/bin/python"

? ? },

? ? "changed": false,

? ? "ping": "pong"

2.創(chuàng)建mysql角色相關(guān)的文件

[root@ansible mysql]#pwd

/data/ansible/roles/mysql

[root@ansible mysql]#tree

.

├── files

│? ├── my.cnf

│? └── mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz

├── tasks

│? ├── config.yml

│? ├── data.yml

│? ├── group.yml

│? ├── install.yml

│? ├── linkfile.yml

│? ├── main.yml

│? ├── path.yml

│? ├── script.yml

│? ├── secure.yml

│? ├── service.yml

│? ├── unarchive.yml

│? └── user.yml

└── vars

? ? └── main.yml

3 directories, 15 files

[root@ansible mysql]#ls files/

my.cnf? mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz

[root@ansible mysql]#vim files/my.cnf

[mysqld]

explicit_defaults_for_timestamp=true

server-id=1

log-bin

datadir=/data/mysql

socket=/data/mysql/mysql.sock

[mysqld_safe]

log-error=/data/mysql/mysql.log

pid-file=/data/mysql/mysql.pid

[client]

socket=/data/mysql/mysql.sock

[root@ansible mysql]#vim vars/main.yml

mysql_version: 5.7.36

mysql_file: mysql-{{mysql_version}}-linux-glibc2.12-x86_64.tar.xz

mysql_root_password: 123456

#main.yml 是task的入口文件

[root@ansible mysql]#vim tasks/main.yml

- include: install.yml

- include: group.yml

- include: user.yml

- include: unarchive.yml

- include: linkfile.yml

- include: data.yml

- include: config.yml

- include: script.yml

- include: path.yml

- include: service.yml

- include: secure.yml

[root@ansible mysql]#vim tasks/install.yml

- name: install packages

? yum:

? ? name:

? ? ? - libaio

? ? ? - numactl-libs

[root@ansible mysql]#vim tasks/group.yml

- name: create mysql group

? group: name=mysql gid=306

[root@ansible mysql]#vim tasks/user.yml

- name: create mysql user

? user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql

[root@ansible mysql]#vim tasks/unarchive.yml

- name: copy tar to remote host and file mode

? unarchive: src=/data/ansible/roles/mysql/files/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz dest=/usr/local/owner=root group=root copy=yes

[root@ansible mysql]#vim tasks/linkfile.yml

- name: create linkfile /usr/local/mysql

? file: src=/usr/local/mysql-5.7.36-linux-glibc2.12-x86_64 path=/usr/local/mysql state=link

[root@ansible mysql]#vim tasks/data.yml

- name: data dir

? shell: /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql

? tags: data

[root@ansible mysql]#vim tasks/config.yml

- name: config my.cnf

? copy: src=/data/ansible/roles/mysql/files/my.cnf dest=/etc/my.cnf

[root@ansible mysql]#vim tasks/script.yml

- name: service script

? shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

[root@ansible mysql]#vim tasks/path.yml

- name: PATH variable

? copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh

[root@ansible mysql]#vim tasks/service.yml

- name: enable service

? shell: chkconfig --add mysqld;/etc/init.d/mysqld start

? tags: service

[root@ansible mysql]#vim tasks/secure.yml

- name: change password

? shell: /usr/local/mysql/bin/mysqladmin -uroot password {{mysql_root_password}}

3.在playbook中調(diào)用角色

[root@ansible ansible]#vim role_mysql.yml

---

- hosts: webservers

? remote_user: root

? gather_facts: no

? roles:

? ? - mysql

4.運行playbook

[root@ansible ansible]#ansible-playbook -C role_mysql.yml

[root@ansible ansible]#ansible-playbook? role_mysql.yml

PLAY [webservers] ****************************************************************************************************

TASK [mysql : install packages] **************************************************************************************

ok: [10.0.0.17]

TASK [create mysql group] ********************************************************************************************

ok: [10.0.0.17]

TASK [create mysql user] *********************************************************************************************

ok: [10.0.0.17]

TASK [mysql : copy tar to remote host and file mode] *****************************************************************

changed: [10.0.0.17]

TASK [create linkfile /usr/local/mysql] ******************************************************************************

ok: [10.0.0.17]

TASK [mysql : data dir] **********************************************************************************************

changed: [10.0.0.17]

TASK [mysql : config my.cnf] *****************************************************************************************

changed: [10.0.0.17]

TASK [mysql : service script] ****************************************************************************************

changed: [10.0.0.17]

TASK [mysql : PATH variable] *****************************************************************************************

changed: [10.0.0.17]

TASK [mysql : enable service] ****************************************************************************************

changed: [10.0.0.17]

TASK [mysql : change password] ***************************************************************************************

changed: [10.0.0.17]

PLAY RECAP ***********************************************************************************************************

10.0.0.17? ? ? ? ? ? ? ? ? : ok=11? changed=7? ? unreachable=0? ? failed=0? ? skipped=0? ? rescued=0? ? ignored=0

[root@centos7 ~]#ss -ntl

State? ? ? Recv-Q Send-Q? ? ? ? ? ? ? Local Address:Port? ? ? ? ? ? ? ? ? ? ? ? ? ? Peer Address:Port

LISTEN? ? 0? ? ? 128? ? ? ? ? ? ? ? ? ? ? ? ? ? *:22? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *:*

LISTEN? ? 0? ? ? 100? ? ? ? ? ? ? ? ? ? 127.0.0.1:25? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *:*

LISTEN? ? 0? ? ? 80? ? ? ? ? ? ? ? ? ? ? ? ? [::]:3306? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [::]:*

LISTEN? ? 0? ? ? 128? ? ? ? ? ? ? ? ? ? ? ? ? [::]:22? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [::]:*

LISTEN? ? 0? ? ? 100? ? ? ? ? ? ? ? ? ? ? ? [::1]:25? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [::]:*

[root@centos7 ~]#mysql --version

mysql? Ver 14.14 Distrib 5.7.36, for linux-glibc2.12 (x86_64) using? EditLine wrapper

[root@centos7 ~]#mysql -uroot -p123456 -Dmysql

mysql> show databases;

+--------------------+

| Database? ? ? ? ? |

+--------------------+

| information_schema |

| mysql? ? ? ? ? ? ? |

| performance_schema |

| sys? ? ? ? ? ? ? ? |

+--------------------+

2、Ansible playbook實現(xiàn)apache批量部署,并對不同主機提供以各自IP地址為內(nèi)容的index.html

1、基于key驗證免密授權(quán)

1.1 生成kekgen

# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:6XyhlugUDjs1ntsb4GCu0fPuwBCSEOhrPjU56RJ6xxE root@8-2

The key's randomart image is:

+---[RSA 3072]----+

|+.? ? ? ? ? ? ? |

|o.? ? ? ? ? ? ? |

|+ .? ? ? ? ? ? ? |

| o .E? ? .? ? ? |

|? o *.= S .? ? ? |

| + %.O O o .? ? |

|+ =.@.B B .? ? ? |

|.+.+oB + o? ? ? |

| .+. o* o.? ? ? |

+----[SHA256]-----+

1.2 復(fù)制到遠程客戶端

# ssh-copy-id root@10.0.0.8

# ssh-copy-id root@10.0.0.18

# ssh-copy-id root@10.0.0.17

# ssh-copy-id root@10.0.0.27

# ssh-copy-id root@10.0.0.37

2邪蛔、ansible服務(wù)器配置

2.1 使用yum倉庫安裝

# yum -y install ansible

2.2 配置主機清單

# vi /etc/ansible/hosts

[local]

10.0.0.7? ? ansible_connection=local? ? #指定連接類型為本地,無需通過ssh連接

[webserver]

10.0.0.17

10.0.0.27

10.0.0.37

10.0.0.8

10.0.0.18

2.3 檢查服務(wù)端到遠程主機的健康性

# ansible all -m ping? #顯示綠色表示健康

10.0.0.7 | SUCCESS => {

? ? "ansible_facts": {

? ? ? ? "discovered_interpreter_python": "/usr/bin/python"

? ? },

? ? "changed": false,

? ? "ping": "pong"

}

10.0.0.37 | SUCCESS => {

? ? "ansible_facts": {

? ? ? ? "discovered_interpreter_python": "/usr/bin/python"

? ? },

? ? "changed": false,

? ? "ping": "pong"

}

10.0.0.8 | SUCCESS => {

? ? "ansible_facts": {

? ? ? ? "discovered_interpreter_python": "/usr/libexec/platform-python"

? ? },

? ? "changed": false,

? ? "ping": "pong"

}

10.0.0.18 | SUCCESS => {

? ? "ansible_facts": {

? ? ? ? "discovered_interpreter_python": "/usr/libexec/platform-python"

? ? },

? ? "changed": false,

? ? "ping": "pong"

}

10.0.0.27 | SUCCESS => {

? ? "ansible_facts": {

? ? ? ? "discovered_interpreter_python": "/usr/bin/python"

? ? },

? ? "changed": false,

? ? "ping": "pong"

}

10.0.0.17 | SUCCESS => {

? ? "ansible_facts": {

? ? ? ? "discovered_interpreter_python": "/usr/bin/python"

? ? },

? ? "changed": false,

? ? "ping": "pong"

}

2.4 準備工作

# cd /apps/httpd

# wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.51.tar.bz2 --no-check-certificate

# wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.7.0.tar.bz2? --no-check-certificate

# wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.bz2 --no-check-certificate

# vi /apps/httpd/httpd.service

[Unit]

Description=The Apache HTTP Server

After=network.target remote-fs.target nss-lookup.target

Documentation=man:httpd(8)

Documentation=man:apachectl(8)

[Service]

Type=forking

ExecStart=/apps/httpd/bin/apachectl start

ExecReload=/apps/httpd/bin/apachectl graceful

ExecStop=/apps/httpd/bin/apachectl stop

# We want systemd to give httpd some time to finish gracefully, but still want

# it to kill httpd after TimeoutStopSec if something went wrong during the

# graceful stop. Normally, Systemd sends SIGTERM signal right after the

# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give

# httpd time to finish.

KillSignal=SIGCONT

PrivateTmp=true

[Install]

WantedBy=multi-user.target

EOF

systemctl daemon-reload

systemctl enable --now httpd.service

# ls? #最終準備好四個文件

apr-1.7.0.tar.bz2? apr-util-1.6.1.tar.bz2? httpd-2.4.51.tar.bz2? httpd.service

2.5 準備playbook

# cat install_httpd.yml

---

# install httpd

# 需要將相關(guān)文件放到如下目錄

# tree /apps/httpd/

# apps/httpd/

# ├── apr-1.7.0.tar.bz2

# ├── apr-util-1.6.1.tar.bz2

# ├── httpd-2.4.51.tar.bz2

# └── httpd.service

- hosts: webserver

? remote_user: root

? gather_facts: no

? vars:

? ? data_dir: /usr/local/src

? ? base_dir : /apps/httpd

? ? install_dir: /apps/httpd

? ? httpd_version: httpd-2.4.51

? ? apr_version: apr-1.7.0

? ? apr_util_version: apr-util-1.6.1

? ? httpd_url: https://mirrors.tuna.tsinghua.edu.cn/apache/httpd

? ? apr_url: https://mirrors.tuna.tsinghua.edu.cn/apache/apr

? tasks :

? ? - name : install packages

? ? ? yum : name=gcc,make,pcre-devel,openssl-devel,expat-devel,bzip2 state=installed

? ? - name : download httpd file

? ? ? unarchive :

? ? ? ? src: "{{ base_dir }}/{{ httpd_version }}.tar.bz2"

? ? ? ? dest: "{{ data_dir }}"

? ? ? ? owner: root

? ? ? ? copy: yes

? ? - name : download apr file

? ? ? unarchive :

? ? ? ? src: "{{ base_dir }}/{{ apr_version }}.tar.bz2"

? ? ? ? dest: "{{ data_dir }}"

? ? ? ? owner: root

? ? ? ? copy: yes

? ? - name : download apr_util file

? ? ? unarchive :

? ? ? ? src: "{{ base_dir }}/{{ apr_util_version }}.tar.bz2"

? ? ? ? dest: "{{ data_dir }}"

? ? ? ? owner: root

? ? ? ? copy: yes

? ? - name : prepare apr dir

? ? ? shell: mv {{ apr_version }} {{ httpd_version }}/srclib/apr

? ? ? args:

? ? ? ? chdir: "{{ data_dir }}"

? ? - name : prepare apr_util dir

? ? ? shell : mv {{ apr_util_version }} {{ httpd_version }}/srclib/apr-util

? ? ? args:

? ? ? ? chdir: "{{ data_dir }}"

? ? - name : build httpd

? ? ? shell : ./configure --prefix={{ install_dir }} --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-enablempms-shared=all --with-mpm=prefork && make -j && make install

? ? ? args:

? ? ? ? chdir: "{{ data_dir }}/{{ httpd_version }}"

? ? - name : create group

? ? ? group : name=apache gid=80 system=yes

? ? - name : create user

? ? ? user : name=apache uid=80 group=apache shell=/sbin/nologin system=yes create_home=no home={{ install_dir }}/conf/httpd

? ? - name : set httpd user

? ? ? lineinfile : path={{ install_dir }}/conf/httpd.conf regexp='^User' line='User apache'

? ? - name : set httpd group

? ? ? lineinfile : path={{ install_dir }}/conf/httpd.conf regexp='^Group' line='Group apache'

? ? - name : set variable PATH

? ? ? shell : echo PATH={{ install_dir }}/bin:$PATH >> /etc/profile.d/httpd.sh

? ? - name : copy service file to remote

? ? ? copy:

? ? ? ? src: "{{ base_dir }}/httpd.service"

? ? ? ? dest: /usr/lib/systemd/system/httpd.service

? ? - name : start service

? ? ? service : name=httpd state=started enabled=yes

2.6 批量安裝

# ansible-playbook install_httpd.yml

PLAY [webserver] ****************************************************************************************************************************************************************************

TASK [install packages] *********************************************************************************************************************************************************************

changed: [10.0.0.8]

changed: [10.0.0.37]

changed: [10.0.0.17]

changed: [10.0.0.27]

changed: [10.0.0.18]

TASK [download httpd file] ******************************************************************************************************************************************************************

changed: [10.0.0.17]

changed: [10.0.0.27]

changed: [10.0.0.37]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [download apr file] ********************************************************************************************************************************************************************

changed: [10.0.0.17]

changed: [10.0.0.37]

changed: [10.0.0.27]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [download apr_util file] ***************************************************************************************************************************************************************

changed: [10.0.0.37]

changed: [10.0.0.17]

changed: [10.0.0.27]

changed: [10.0.0.8]

changed: [10.0.0.18]

TASK [prepare apr dir] **********************************************************************************************************************************************************************

changed: [10.0.0.37]

changed: [10.0.0.27]

changed: [10.0.0.17]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [prepare apr_util dir] *****************************************************************************************************************************************************************

changed: [10.0.0.27]

changed: [10.0.0.37]

changed: [10.0.0.17]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [build httpd] **************************************************************************************************************************************************************************

changed: [10.0.0.17]

changed: [10.0.0.37]

changed: [10.0.0.27]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [create group] *************************************************************************************************************************************************************************

changed: [10.0.0.27]

changed: [10.0.0.37]

changed: [10.0.0.17]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [create user] **************************************************************************************************************************************************************************

changed: [10.0.0.27]

changed: [10.0.0.37]

changed: [10.0.0.17]

changed: [10.0.0.8]

changed: [10.0.0.18]

TASK [set httpd user] ***********************************************************************************************************************************************************************

changed: [10.0.0.27]

changed: [10.0.0.17]

changed: [10.0.0.37]

changed: [10.0.0.8]

changed: [10.0.0.18]

TASK [set httpd group] **********************************************************************************************************************************************************************

changed: [10.0.0.37]

changed: [10.0.0.27]

changed: [10.0.0.17]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [set variable PATH] ********************************************************************************************************************************************************************

changed: [10.0.0.17]

changed: [10.0.0.27]

changed: [10.0.0.37]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [copy service file to remote] **********************************************************************************************************************************************************

changed: [10.0.0.27]

changed: [10.0.0.37]

changed: [10.0.0.17]

changed: [10.0.0.18]

changed: [10.0.0.8]

TASK [start service] ************************************************************************************************************************************************************************

changed: [10.0.0.17]

changed: [10.0.0.8]

changed: [10.0.0.18]

changed: [10.0.0.37]

changed: [10.0.0.27]

PLAY RECAP **********************************************************************************************************************************************************************************

10.0.0.17? ? ? ? ? ? ? ? ? : ok=14? changed=14? unreachable=0? ? failed=0? ? skipped=0? ? rescued=0? ? ignored=0?

10.0.0.18? ? ? ? ? ? ? ? ? : ok=14? changed=14? unreachable=0? ? failed=0? ? skipped=0? ? rescued=0? ? ignored=0?

10.0.0.27? ? ? ? ? ? ? ? ? : ok=14? changed=14? unreachable=0? ? failed=0? ? skipped=0? ? rescued=0? ? ignored=0?

10.0.0.37? ? ? ? ? ? ? ? ? : ok=14? changed=14? unreachable=0? ? failed=0? ? skipped=0? ? rescued=0? ? ignored=0?

10.0.0.8? ? ? ? ? ? ? ? ? : ok=14? changed=14? unreachable=0? ? failed=0? ? skipped=0? ? rescued=0? ? ignored=0?

2.7 測試

# curl 10.0.0.17

<html><body><h1>It works!</h1></body></html>

# curl 10.0.0.27

<html><body><h1>It works!</h1></body></html>

# curl 10.0.0.37

<html><body><h1>It works!</h1></body></html>

# curl 10.0.0.8

<html><body><h1>It works!</h1></body></html>

# curl 10.0.0.18

<html><body><h1>It works!</h1></body></html>

# 測試完成扎狱,批量安裝成功


3侧到、http的報文結(jié)構(gòu)和狀態(tài)碼總結(jié)

HTTP的報文分為請求報文和響應(yīng)報文

HTTP請求報文:由三個部分組成,即開始行淤击、首部行和實體主體

在請求報文中匠抗,開始行就是請求行。

request報文格式:

<method> <request-URL> <version>

<headers>

<entity-body>

HTTP響應(yīng)報文:開始行是狀態(tài)行

狀態(tài)行包括三項內(nèi)容污抬,即HTTP的版本汞贸,狀態(tài)碼以及解釋狀態(tài)碼的簡單短語

response報文格式:

<version> <status> <reason-phrase>

<headers>

<entity-body>

Method方法:

請求方法,標明客戶端希望服務(wù)器對資源執(zhí)行的動作印机,包括以下:

GET: 從服務(wù)器獲取一個資源

HEAD: 只從服務(wù)器獲取文檔的響應(yīng)首部

POST: 向服務(wù)器輸入數(shù)據(jù)矢腻,通常會再由網(wǎng)關(guān)程序繼續(xù)處理

PUT: 將請求的主體部分存儲在服務(wù)器中,如上傳文件

DELETE: 請求刪除服務(wù)器上指定的文檔

TRACE: 追蹤請求到達服務(wù)器中間經(jīng)過的代理服務(wù)器

OPTIONS:請求服務(wù)器返回對指定資源支持使用的請求方法

CONNECT:建立一個到由目標資源標識的服務(wù)器的隧道

PATCH:用于對資源應(yīng)用部分修改

version版本:

HTTP/<major>.<minor>

如:HTTP/1.1

reason-phrase:原因短語耳贬,狀態(tài)碼所標記的狀態(tài)的簡要描述

headers首部字段頭:首部字段包含的信息最為豐富踏堡。首部字段同時存在于請求報文和響應(yīng)報文內(nèi),并涵蓋 HTTP 報文相關(guān)的內(nèi)容信息咒劲。使用首部字段是為了給客戶端和服務(wù)器端提供報文主體大小顷蟆、所使用的語言、認證信息等內(nèi)容腐魂。

首部字段是由首部字段名和字段值構(gòu)成的帐偎,中間用冒號":”分隔字段值對應(yīng),即key/value 鍵/值對單個HTTP首部字段可以有多個值蛔屹。

entity-body:實體削樊,請求時附加的數(shù)據(jù)或響應(yīng)時附加的數(shù)據(jù),例如:登錄網(wǎng)站時的用戶名和密碼,博客的上傳文章漫贞,論壇上的發(fā)言等甸箱。

一、首部的分類:

1迅脐、通用首部:請求報文和響應(yīng)報文兩方都會使用的首部

2芍殖、請求首部:從客戶端向服務(wù)器端發(fā)送請求報文時使用的首部。補充了請求的附加內(nèi)容谴蔑、客戶端信息豌骏、請求內(nèi)容相關(guān)優(yōu)先級等信息

3、響應(yīng)首部:從服務(wù)器端向客戶端返回響應(yīng)報文時使用的首部隐锭。補充了響應(yīng)的附加內(nèi)容窃躲,也會要求客戶端附加額外的內(nèi)容信息

4、實體首部:針對請求報文和響應(yīng)報文的實體部分使用的首部钦睡。補充了資源內(nèi)容更新時間等與實體有關(guān)的的信息

5蒂窒、協(xié)商首部:某資源有多種表示方法時使用

1.1通用首部:

Date:報文的創(chuàng)建時間

Connection:連接狀態(tài),如keep-alive, close

Via:顯示報文經(jīng)過的中間節(jié)點(代理赎婚,網(wǎng)關(guān))

Cache-Control:控制緩存刘绣,如緩存時長

MIME-Version:發(fā)送端使用的MIME版本

Warning:錯誤通知

1.2請求首部:

Accept:通知服務(wù)器自己可接受的媒體類型

Accept-Charset: 客戶端可接受的字符集

Accept-Encoding:客戶端可接受編碼格式,如gzip

Accept-Language:客戶端可接受的語言

Client-IP:請求的客戶端IP

Host:請求的服務(wù)器名稱和端口號

Referer:跳轉(zhuǎn)至當前URI的前一個URL

User-Agent:客戶端代理挣输,瀏覽器版本

條件式請求首部:

Expect:允許客戶端列出某請求所要求的服務(wù)器行為

If-Modified-Since:自從指定的時間之后纬凤,請求的資源是否發(fā)生過修改

If-Unmodified-Since:與上面相反

If-None-Match:本地緩存中存儲的文檔的ETag標簽是否與服務(wù)器文檔的Etag不匹配

If-Match:與上面相反

安全請求首部:

Authorization:向服務(wù)器發(fā)送認證信息,如賬號和密碼

Cookie:客戶端向服務(wù)器發(fā)送cookie

代理請求首部:

Proxy-Authorization:向代理服務(wù)器認證

1.3響應(yīng)首部:

信息性:

Age:從最初創(chuàng)建開始撩嚼,響應(yīng)持續(xù)時長

Server:服務(wù)器程序軟件名稱和版本

安全響應(yīng)首部:

Set-Cookie:向客戶端設(shè)置cookie

WWW-Authenticate:來自服務(wù)器對客戶端的質(zhì)詢列表

1.4實體首部:

Allow:列出對此資源實體可使用的請求方法

Location:告訴客戶端真正的實體位于何處

Content-Encoding:對主體執(zhí)行的編碼

Content-Language:理解主體時最適合的語言

Content-Length:主體的長度

Content-Location:實體真正所處位置

Content-Type:主體的對象類型停士,如text

1.5協(xié)商首部:

Accept-Ranges:服務(wù)器可接受的請求范圍類型

Vary:服務(wù)器查看的其它首部列表

緩存相關(guān):

ETag:實體的擴展標簽

Expires:實體的過期時間

Last-Modified:最后一次修改的時間

二、HTTP狀態(tài)碼

status:狀態(tài)碼完丽,HTTP狀態(tài)碼是用來表示網(wǎng)頁服務(wù)器HTTP響應(yīng)狀態(tài)的3位數(shù)字代碼恋技。

http協(xié)議狀態(tài)碼分類:

1xx:100-101 信息提示

2xx:200-206 成功

3xx:300-307 重定向

4xx:400-415 錯誤類信息,客戶端錯誤

5xx:500-505 錯誤類信息逻族,服務(wù)器端錯誤

2.1常見的HTTP狀態(tài)碼

200 (成功) 服務(wù)器已成功處理了請求蜻底。 通常,這表示服務(wù)器提供了請求的網(wǎng)頁聘鳞。

301 (永久移動) 請求的網(wǎng)頁已永久移動到新位置薄辅。 服務(wù)器返回此響應(yīng)(對 GET 或 HEAD 請求的響應(yīng))時,會自動將請求者轉(zhuǎn)到新位置抠璃。

302 (臨時移動) 服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請求站楚,但請求者應(yīng)繼續(xù)使用原有位置來進行以后的請求。

304 (未修改) 自從上次請求后搏嗡,請求的網(wǎng)頁未修改過窿春。 服務(wù)器返回此響應(yīng)時拉一,不會返回網(wǎng)頁內(nèi)容。

400 (錯誤請求) 服務(wù)器不理解請求的語法旧乞。

401 (未授權(quán)) 請求要求身份驗證肯夏。 對于需要登錄的網(wǎng)頁份帐,服務(wù)器可能返回此響應(yīng)锐想。

403 (禁止) 服務(wù)器拒絕請求然走。

404 (未找到) 服務(wù)器找不到請求的網(wǎng)頁。

500 (服務(wù)器內(nèi)部錯誤) 服務(wù)器遇到錯誤决瞳,無法完成請求。

502 (錯誤網(wǎng)關(guān)) 服務(wù)器作為網(wǎng)關(guān)或代理左权,從上游服務(wù)器收到無效響應(yīng)皮胡。

503 (服務(wù)不可用) 服務(wù)器目前無法使用(由于超載或停機維護)。 通常赏迟,這只是暫時狀態(tài)屡贺。

504 (網(wǎng)關(guān)超時) 服務(wù)器作為網(wǎng)關(guān)或代理,但是沒有及時從上游服務(wù)器收到請求锌杀。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甩栈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子糕再,更是在濱河造成了極大的恐慌量没,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件突想,死亡現(xiàn)場離奇詭異殴蹄,居然都是意外死亡,警方通過查閱死者的電腦和手機猾担,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門袭灯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绑嘹,你說我怎么就攤上這事稽荧。” “怎么了工腋?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵姨丈,是天一觀的道長。 經(jīng)常有香客問我夷蚊,道長构挤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任惕鼓,我火速辦了婚禮筋现,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己矾飞,他們只是感情好一膨,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洒沦,像睡著了一般豹绪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上申眼,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天瞒津,我揣著相機與錄音,去河邊找鬼括尸。 笑死巷蚪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的濒翻。 我是一名探鬼主播屁柏,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼有送!你這毒婦竟也來了淌喻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤雀摘,失蹤者是張志新(化名)和其女友劉穎裸删,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體届宠,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡烁落,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了豌注。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伤塌。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖轧铁,靈堂內(nèi)的尸體忽然破棺而出每聪,到底是詐尸還是另有隱情,我是刑警寧澤齿风,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布药薯,位于F島的核電站,受9級特大地震影響救斑,放射性物質(zhì)發(fā)生泄漏童本。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一脸候、第九天 我趴在偏房一處隱蔽的房頂上張望穷娱。 院中可真熱鬧绑蔫,春花似錦、人聲如沸泵额。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嫁盲。三九已至篓叶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間羞秤,已是汗流浹背缸托。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瘾蛋,地道東北人嗦董。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像瘦黑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奇唤,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1幸斥、ansible-playbook實現(xiàn)MySQL的二進制部署 ansible:master1(10.0.0.15...
    johndoewy閱讀 241評論 0 0
  • 1、主從復(fù)制及主主復(fù)制的實現(xiàn) 主從復(fù)制 Linux:Master / Centos7.9 , Slave / Ce...
    布格雷斯閱讀 290評論 1 0
  • 1咬扇、搭建時間服務(wù)器甲葬,日志服務(wù)器并簡述sudo安全切換。 1)搭建時間服務(wù)器: 早期是用ntp服務(wù): #yum in...
    衛(wèi)清華閱讀 350評論 0 0
  • 1懈贺、搭建zabbix服務(wù)经窖,實現(xiàn)監(jiān)控linux和windows的內(nèi)存,cpu梭灿,磁盤画侣,網(wǎng)絡(luò)等基礎(chǔ)指標 1.部署lnmp...
    衛(wèi)清華閱讀 613評論 0 0
  • 1、ansible-playbook實現(xiàn)MySQL的二進制部署 受控主機的基于key登錄不在腳本里堡妒;受控主機的yu...
    yabao11閱讀 192評論 0 0