Http協議和Web伺服器Apache
阿新 • • 發佈:2021-12-19
1、ansible-playbook實現MySQL的二進位制部署
``
安裝mysql5.6 [root@ansible ~]#ls -l /data/ansible/files/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz -rw-r--r-- 1 root root 403177622 Dec 19 11:05 /data/ansible/files/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz [root@ansible ~]#cat /data/ansible/files/my.cnf [mysqld] socket=/tmp/mysql.sock user=mysql symbolic-links=0 datadir=/data/mysql innodb_file_per_table=1 log-bin [client] port=3306 socket=/tmp/mysql.sock [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/data/mysql/mysqld.pid [root@ansible ~]#tree /data/ansible/files/ /data/ansible/files/ ├── my.cnf ├── mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz └── secure_mysql.sh 0 directories, 3 files [root@ansible ~]#cat /data/ansible/install_mysql.yml --- # install mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz - hosts: dbsrvs remote_user: root gather_facts: no tasks: - name: install packages yum: name=libaio,perl-Data-Dumper,perl-Getopt-Long - name: create mysql group group: name=mysql gid=306 - name: create mysql user user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql - name: copy tar to remote host and file mode unarchive: src=/data/ansible/files/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz dest=/usr/local/ owner=root group=root - name: create linkfile /usr/local/mysql file: src=/usr/local/mysql-5.6.46-linux-glibc2.12-x86_64 dest=/usr/local/mysql state=link - name: data dir shell: chdir=/usr/local/mysql/ ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql tags: data - name: config my.cnf copy: src=/data/ansible/files/my.cnf dest=/etc/my.cnf - name: service script shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld - name: enable service shell: /etc/init.d/mysqld start;chkconfig --add mysqld;chkconfig mysqld on tags: service - name: PATH variable copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh 判斷centos7或者centos8安裝mysql5.7 [root@centos8 ansible]# mkdir files [root@centos8 ansible]# ls files/ mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz [root@centos8 ansible]# vim files/my.cnf [mysqld] server-id=1 log-bin datadir=/data/mysql socket=/data/mysql/mysql.sock log-error=/data/mysql/mysql.log pid-file=/data/mysql/mysql.pid [client] socket=/data/mysql/mysql.sock [root@centos8 ansible]# vim vars.yml --- # variables file mysql_version: 5.7.33 [root@centos8 ansible]# cat files/set_password.sh #!/bin/bash MYSQL_ROOT_PASSWORD=123456 MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.log`mysqladmin -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD&>/dev/null [root@centos8 ansible]# vim install_mysql5.7.yml --- # install mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz - hosts: 10.0.0.150 remote_user: root gather_facts: yes vars_files: - vars.yml tasks: - name: install packages for centos7 yum: name=libaio,perl-Data-Dumper when: ansible_facts['distribution_major_version'] == "7" - name: install packages for centos8 yum: name=libaio,perl-Data-Dumper,ncurses-compat-libs when: ansible_facts['distribution_major_version'] == "8" - name: cteate mysql group group: name=mysql gid=306 - name: create mysql user user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql - name: copy tar to remote host and file mode unarchive: src=/data/ansible/files/mysql-{{mysql_version}}-linuxglibc2.12-x86_64.tar.gz dest=/usr/local/ owner=root group=root - name: create linkfile /usr/local/mysql file: src=/usr/local/mysql-{{mysql_version}}-linux-glibc2.12-x86_64 dest=/usr/local/mysql state=link - name: PATH variable copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh - name: PATH variable entry shell: . /etc/profile.d/mysql.sh - name: config my.cnf copy: src=/data/ansible/files/my.cnf dest=/etc/my.cnf - name: data dir shell: chdir=/usr/local/mysql ./bin/mysqld --initialize --user=mysql --datadir=/data/mysql - name: service script shell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld - name: enable service shell: /etc/init.d/mysqld start;chkconfig --add mysqld;chkconfig mysqld on tags: service - name: set mysql user password script: /data/ansible/files/set_password.sh tags: script [root@centos8 ansible]# tree . ├── files │ ├── my.cnf │ ├── mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz │ └── set_password.sh ├── install_mysql5.7.yml └── vars.yml 1 directory, 5 files [root@centos8 ansible]# ansible-playbook install_mysql5.7.yml
``
2、Ansible playbook實現apache批量部署,並對不同主機提供以各自IP地址為內容的index.html
``
[root@ansible ~]# vim /etc/ansible/hosts [webservers] 10.0.0.150 ansible_connection=local 10.0.0.160 #建立角色相關目錄 [root@ansible html]# mkdir -pv /data/ansible/roles/httpd/{tasks,handlers,files} mkdir: created directory '/data/ansible' mkdir: created directory '/data/ansible/roles' mkdir: created directory '/data/ansible/roles/httpd' mkdir: created directory '/data/ansible/roles/httpd/tasks' mkdir: created directory '/data/ansible/roles/httpd/handlers' mkdir: created directory '/data/ansible/roles/httpd/files' #建立角色相關檔案 [root@ansible html]# cd /data/ansible/roles/httpd/ #main.yml是task的入口檔案 [root@ansible httpd]# vim tasks/main.yml - include: group.yml - include: user.yml - include: install.yml - include: config.yml - include: index.yml - include: service.yml [root@ansible httpd]# vim tasks/group.yml - name: create apache group group: name=apache system=yes gid=80 [root@ansible httpd]# vim tasks/user.yml - name: create apache user user: name=apache system=yes shell=/sbin/nologin home=/var/www/ uid=80 group=apache [root@ansible httpd]# vim tasks/install.yml - name: install httpd package yum: name=httpd [root@ansible httpd]# vim tasks/config.yml - name: config file copy: src=httpd.conf dest=/etc/httpd/conf/ backup=yes notify: restart [root@ansible httpd]# vim tasks/index.yml - name: index.html copy: content='{{ ansible_default_ipv4.address }}\n' dest=/var/www/html/index.html [root@ansible httpd]# vim tasks/service.yml - name: start httpd service service: name=httpd state=started enabled=yes [root@ansible httpd]# vim handlers/main.yml - name: restart service: name=httpd state=restarted #file目錄下準備httpd.conf配置檔案 [root@ansible httpd]# ls files/httpd.conf files/httpd.conf [root@ansible httpd]# tree /data/ansible/roles/httpd/ /data/ansible/roles/httpd/ ├── files │ └── httpd.conf ├── handlers │ └── main.yml └── tasks ├── config.yml ├── group.yml ├── index.yml ├── install.yml ├── main.yml ├── service.yml └── user.yml 3 directories, 9 files #在playbook中呼叫角色 [root@ansible ~]# vim /data/ansible/role_httpd.yml - hosts: webservers remote_user: root roles: - httpd #執行playbook [root@ansible ~]# ansible-playbook /data/ansible/role_httpd.yml #驗證: [root@ansible ~]# curl 10.0.0.150 10.0.0.150 [root@ansible ~]# curl 10.0.0.160 10.0.0.160
``
3、http的報文結構和狀態碼總結
``
HTTP報文分為請求報文和響應報文,這兩類報文都是由三個部分組成: (1)開始行:區分請求報文和響應報文 (2)首部行:說明瀏覽器、伺服器報文主題的一些資訊 (3)實體主體 請求報文的開始行包括:方法(請求方法如get、post、put、trace等)、URL、協議版本 響應報文的開始行包括:版本、狀態碼、短語(用於簡單解釋狀態碼) 響應報文中的狀態碼分為五大類: 1XX表示通知資訊的,如請求收到了或正在進行處理 2XX表示成功,如接受或知道了 3XX表示重定向,如要完成請求還必須採取進一步的行動 4XX表示客戶的差錯,如請求中有語法錯誤或不能完成 5XX表示伺服器的差錯,如伺服器失效無法完成請求 常見狀態碼: 200 OK:表示從客戶端傳送給伺服器的請求被正常處理並返回 301 Moved Permanently:永久性重定向,表示請求的資源被分配了新的URL,之後應使用更改的URL 302 Found:臨時性重定向,表示請求的資源被分配了新的URL,希望本次訪問使用新的URL 400 Bad Request:表示請求報文中存在語法錯誤 401 Unauthorized:未經許可,需要通過HTTP認證 403 Forbidden:伺服器拒絕該次訪問(訪問許可權出現問題) 404 Not Found:表示伺服器上無法找到請求的資源,除此之外,也可以在伺服器拒絕請求但不想給拒絕原因時使用 500 Inter Server Error:表示伺服器在執行請求時發生了錯誤,也有可能是web應用存在的bug或某些臨時的錯誤時 503 Server Unavailable:表示伺服器暫時處於超負載或正在進行停機維護,無法處理請求
``