• 网站架构演变、LNP+Mariadb数据库分离、Web服务器集群、Keepalived高可用


    目录

    day02

    深入理解程序的数据存储

    验证

    配置NFS服务器

    配置代理服务器

    配置名称解析


    day02

    深入理解程序的数据存储

    • 程序将文字数据保存到数据库中
    • 程序将非文字数据(如图片、视频、压缩包等)保存到相应的文件目录中

    验证

    • 发一篇文章,文章内容包含文字和图片
    • 在数据库中查看文字数据。在最新的一条记录中,可以查看到图片的保存位置
    1. [root@database ~]# mysql
    2. mysql> use wordpress;
    3. mysql> select * from wp_posts\G
    • 在文件系统中查看图片文件。/usr/share/nginx/html/wp-content/uploads/是固定位置,其后的2023/01是年和月目录。每个月上传的图片,都会保存到相应的月份目录。
    1. [root@web1 html]# ls /usr/share/nginx/html/wp-content/uploads/2023/01/
    2. snow.jpg

    配置NFS服务器

    • 准备环境

    虚拟机ip与名称:nfs 192.168.88.31

    • 配置ansible环境
    1. [root@pubserver project01]# vim inventory
    2. [webservers]
    3. web1 ansible_host=192.168.88.11
    4. web2 ansible_host=192.168.88.12
    5. web3 ansible_host=192.168.88.13
    6. [dbs]
    7. database ansible_host=192.168.88.21
    8. [storages]
    9. nfs ansible_host=192.168.88.31
    10. [all:vars]
    11. ansible_ssh_user=root
    12. ansible_ssh_pass=a
    • 配置nfs服务
    1. # 1. 配置yum
    2. [root@pubserver project01]# ansible-playbook 01-upload-repo.yml
    3. # 2. 配置nfs服务
    4. [root@pubserver project01]# vim 08-config-nfs.yml
    5. ---
    6. - name: config nfs
    7. hosts: nfs
    8. tasks:
    9. - name: install nfs # 安装nfs
    10. yum:
    11. name: nfs-utils
    12. state: present
    13. - name: mkdir /nfs_root # 创建共享目录
    14. file:
    15. path: /nfs_root
    16. state: directory
    17. mode: "0755"
    18. - name: nfs share # 修改配置文件
    19. lineinfile:
    20. path: /etc/exports
    21. line: '/nfs_root 192.168.88.0/24(rw)'
    22. - name: start service # 循环启动服务
    23. service:
    24. name: "{{item}}"
    25. state: started
    26. enabled: yes
    27. loop:
    28. - rpcbind # nfs服务依赖rpcbind服务
    29. - nfs-server
    30. [root@pubserver project01]# ansible-playbook 08-config-nfs.yml
    31. # 3. 查看共享输出
    32. [root@nfs ~]# showmount -e
    33. Export list for nfs:
    34. /nfs_root 192.168.88.0/24
    • 迁移文件至nfs共享
    1. # 1. 重新下载web1的html目录
    2. [root@pubserver project01]# cp 06-fetch-web1.yml 09-fetch-web1.yml
    3. ---
    4. - name: copy web
    5. hosts: web1
    6. tasks:
    7. - name: compress html # 压缩html目录到/root下
    8. archive:
    9. path: /usr/share/nginx/html
    10. dest: /root/html2.tar.gz
    11. format: gz
    12. - name: download html
    13. fetch:
    14. src: /root/html2.tar.gz # 下载压缩文件
    15. dest: files/
    16. flat: yes
    17. [root@pubserver project01]# ansible-playbook 09-fetch-web1.yml
    18. # 2. 释放压缩包到nfs服务器
    19. [root@pubserver project01]# cp 07-deploy-web23.yml 10-deploy-nfs.yml
    20. [root@pubserver project01]# vim 10-deploy-nfs.yml
    21. ---
    22. - name: deploy nfs
    23. hosts: nfs
    24. tasks:
    25. - name: unarchive to web # 将控制端压缩文件解压到指定位置
    26. unarchive:
    27. src: files/html2.tar.gz
    28. dest: /nfs_root/
    29. [root@pubserver project01]# ansible-playbook 10-deploy-nfs.yml
    30. # 3. 清除web服务器的html目录
    31. [root@pubserver project01]# vim 11-rm-html.yml
    32. ---
    33. - name: rm html
    34. hosts: webservers
    35. tasks:
    36. - name: rm html
    37. file:
    38. path: /usr/share/nginx/html
    39. state: absent
    40. - name: create html
    41. file:
    42. path: /usr/share/nginx/html
    43. state: directory
    44. owner: apache
    45. group: apache
    46. mode: "0755"
    47. [root@pubserver project01]# ansible-playbook 11-rm-html.yml
    48. # 4. 挂载nfs到web服务器
    49. [root@pubserver project01]# vim 12-mount-nfs.yml
    50. ---
    51. - name: mount nfs
    52. hosts: webservers
    53. tasks:
    54. - name: install nfs
    55. yum:
    56. name: nfs-utils
    57. state: present
    58. - name: mount nfs
    59. mount:
    60. path: /usr/share/nginx/html
    61. src: 192.168.88.31:/nfs_root/html
    62. fstype: nfs
    63. state: mounted
    64. [root@pubserver project01]# ansible-playbook 12-mount-nfs.yml

    配置代理服务器

    • 准备环境

    虚拟机ip与名称:haproxy1 192.168.88.5   haproxy2 192.168.88.6

    • 配置ansible环境
    1. [root@pubserver project01]# vim inventory
    2. [webservers]
    3. web1 ansible_host=192.168.88.11
    4. web2 ansible_host=192.168.88.12
    5. web3 ansible_host=192.168.88.13
    6. [dbs]
    7. database ansible_host=192.168.88.21
    8. [storages]
    9. nfs ansible_host=192.168.88.31
    10. [lb]
    11. haproxy1 ansible_host=192.168.88.5
    12. haproxy2 ansible_host=192.168.88.6
    13. [all:vars]
    14. ansible_ssh_user=root
    15. ansible_ssh_pass=a
    • 配置高可用、负载均衡功能
    1. # 1. 配置yum
    2. [root@pubserver project01]# ansible-playbook 01-upload-repo.yml
    3. # 2. 配置调度服务器
    4. [root@pubserver project01]# vim 13-install-lb.yml
    5. ---
    6. - name: install lb
    7. hosts: lb
    8. tasks:
    9. - name: install pkg
    10. yum:
    11. name: haproxy,keepalived
    12. state: present
    13. [root@pubserver project01]# ansible-playbook 13-install-lb.yml
    14. # 3. 修改配置文件并启动服务
    15. [root@pubserver project01]# vim 14-config-lb.yml
    16. ---
    17. - name: config haproxy
    18. hosts: lb
    19. tasks:
    20. - name: rm lines
    21. shell: sed -i '64,$d' /etc/haproxy/haproxy.cfg
    22. - name: add lines
    23. blockinfile:
    24. path: /etc/haproxy/haproxy.cfg
    25. block: |
    26. listen wordpress
    27. bind 0.0.0.0:80
    28. balance roundrobin
    29. server web1 192.168.88.11:80 check inter 2000 rise 2 fall 5
    30. server web2 192.168.88.12:80 check inter 2000 rise 2 fall 5
    31. server web3 192.168.88.13:80 check inter 2000 rise 2 fall 5
    32. listen mon
    33. bind 0.0.0.0:1080
    34. stats refresh 30s
    35. stats uri /mon
    36. stats auth admin:admin
    37. - name: start service
    38. service:
    39. name: haproxy
    40. state: started
    41. enabled: yes
    42. [root@pubserver project01]# ansible-playbook 14-config-lb.yml
    43. # 4. haproxy1配置keepalived,实现高可用集群
    44. [root@haproxy1 ~]# vim /etc/keepalived/keepalived.conf
    45. ...略...
    46. 12 router_id haproxy1 # 为本机取一个唯一的id
    47. 13 vrrp_iptables # 自动开启iptables放行规则
    48. ...略...
    49. 20 vrrp_instance VI_1 {
    50. 21 state MASTER # 主服务器状态是MASTER
    51. 22 interface eth0
    52. 23 virtual_router_id 51
    53. 24 priority 100
    54. 25 advert_int 1
    55. 26 authentication {
    56. 27 auth_type PASS
    57. 28 auth_pass 1111
    58. 29 }
    59. 30 virtual_ipaddress {
    60. 31 192.168.88.80 # vip地址
    61. 32 }
    62. 33 }
    63. # 以下全部删除
    64. # 5. haproxy2配置keepalived
    65. [root@haproxy1 ~]# scp /etc/keepalived/keepalived.conf 192.168.88.6:/etc/keepalived/
    66. [root@haproxy2 ~]# vim /etc/keepalived/keepalived.conf
    67. ...略...
    68. 12 router_id haproxy2 # 为本机取一个唯一的id
    69. 13 vrrp_iptables # 自动开启iptables放行规则
    70. ...略...
    71. 20 vrrp_instance VI_1 {
    72. 21 state BACKUP # 备份服务器状态是BACKUP
    73. 22 interface eth0
    74. 23 virtual_router_id 51
    75. 24 priority 80 # 备份服务器优先级低于主服务器
    76. 25 advert_int 1
    77. 26 authentication {
    78. 27 auth_type PASS
    79. 28 auth_pass 1111
    80. 29 }
    81. 30 virtual_ipaddress {
    82. 31 192.168.88.80
    83. 32 }
    84. 33 }
    85. # 6. 启动服务
    86. [root@haproxy1 ~]# systemctl enable keepalived.service --now
    87. [root@haproxy2 ~]# systemctl enable keepalived.service --now
    88. # 7. 验证。haproxy1上出现VIP。客户端访问http://192.168.88.80即可
    89. [root@haproxy1 ~]# ip a s | grep 192
    90. inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0
    91. inet 192.168.88.80/32 scope global eth0

    配置名称解析

    • 通过本机hosts文件实现名称解析
    [root@myhost ~]# echo "192.168.88.80 www.danei.com" >> /etc/hosts
    • 如果客户端是windows主机,则使用记事本程序打开C:\windows\System32\drivers\etc\hosts添加名称解析
    • 当点击http://www.danei.com页面中任意链接时,地址栏上的地址,都会变成192.168.88.11。通过以下方式修复它:
    1. # 在nfs服务器上修改配置文件
    2. [root@nfs ~]# vim /nfs_root/html/wp-config.php
    3. # define('DB_NAME', 'wordpress')它的上方添加以下两行:
    4. define('WP_SITEURL', 'http://www.danei.com');
    5. define('WP_HOME', 'http://www.danei.com');

  • 相关阅读:
    RabbitMQ的常见工作模式
    一文吃透 Go 内置 RPC 原理
    数字通信测量仪器5201数据网络测试仪
    MySQL--主从复制和读写分离
    神经网络-标准数据集介绍
    【暑期每日一题】洛谷 P2026 求一次函数解析式
    技术博客一件发布系统的实验性技术方案Butterfly
    LC买卖股票的最佳时机Ⅱ(三种解法详解)
    c#如何把字符串中的指定字符删除
    为什么说CDN是网站速度优化大师
  • 原文地址:https://blog.csdn.net/fmj121030/article/details/136137604