网站架构演变、LNP+Mariadb数据库分离、Web服务器集群、Keepalived高可用
目录
day02
深入理解程序的数据存储
验证
配置NFS服务器
配置代理服务器
配置名称解析
day02
深入理解程序的数据存储
- 程序将文字数据保存到数据库中
- 程序将非文字数据(如图片、视频、压缩包等)保存到相应的文件目录中
验证
- 发一篇文章,文章内容包含文字和图片
- 在数据库中查看文字数据。在最新的一条记录中,可以查看到图片的保存位置
[root@database ~]# mysqlmysql> use wordpress;mysql> select * from wp_posts\G
- 在文件系统中查看图片文件。
/usr/share/nginx/html/wp-content/uploads/
是固定位置,其后的2023/01
是年和月目录。每个月上传的图片,都会保存到相应的月份目录。
[root@web1 html]# ls /usr/share/nginx/html/wp-content/uploads/2023/01/snow.jpg
配置NFS服务器
- 准备环境
虚拟机ip与名称:nfs 192.168.88.31
- 配置ansible环境
[root@pubserver project01]# vim inventory [webservers]web1 ansible_host=192.168.88.11web2 ansible_host=192.168.88.12web3 ansible_host=192.168.88.13[dbs]database ansible_host=192.168.88.21[storages]nfs ansible_host=192.168.88.31[all:vars]ansible_ssh_user=rootansible_ssh_pass=a
- 配置nfs服务
# 1. 配置yum[root@pubserver project01]# ansible-playbook 01-upload-repo.yml # 2. 配置nfs服务[root@pubserver project01]# vim 08-config-nfs.yml---- name: config nfshosts: nfstasks:- name: install nfs # 安装nfsyum:name: nfs-utilsstate: present- name: mkdir /nfs_root # 创建共享目录file:path: /nfs_rootstate: directorymode: "0755"- name: nfs share # 修改配置文件lineinfile:path: /etc/exportsline: '/nfs_root 192.168.88.0/24(rw)'- name: start service # 循环启动服务service:name: "{{item}}"state: startedenabled: yesloop:- rpcbind # nfs服务依赖rpcbind服务- nfs-server[root@pubserver project01]# ansible-playbook 08-config-nfs.yml# 3. 查看共享输出[root@nfs ~]# showmount -eExport list for nfs:/nfs_root 192.168.88.0/24
- 迁移文件至nfs共享
# 1. 重新下载web1的html目录[root@pubserver project01]# cp 06-fetch-web1.yml 09-fetch-web1.yml---- name: copy webhosts: web1tasks:- name: compress html # 压缩html目录到/root下archive:path: /usr/share/nginx/htmldest: /root/html2.tar.gzformat: gz- name: download htmlfetch:src: /root/html2.tar.gz # 下载压缩文件dest: files/flat: yes[root@pubserver project01]# ansible-playbook 09-fetch-web1.yml # 2. 释放压缩包到nfs服务器[root@pubserver project01]# cp 07-deploy-web23.yml 10-deploy-nfs.yml[root@pubserver project01]# vim 10-deploy-nfs.yml ---- name: deploy nfshosts: nfstasks:- name: unarchive to web # 将控制端压缩文件解压到指定位置unarchive:src: files/html2.tar.gzdest: /nfs_root/[root@pubserver project01]# ansible-playbook 10-deploy-nfs.yml # 3. 清除web服务器的html目录[root@pubserver project01]# vim 11-rm-html.yml---- name: rm htmlhosts: webserverstasks:- name: rm htmlfile:path: /usr/share/nginx/htmlstate: absent- name: create htmlfile:path: /usr/share/nginx/htmlstate: directoryowner: apachegroup: apachemode: "0755"[root@pubserver project01]# ansible-playbook 11-rm-html.yml# 4. 挂载nfs到web服务器[root@pubserver project01]# vim 12-mount-nfs.yml---- name: mount nfshosts: webserverstasks:- name: install nfsyum:name: nfs-utilsstate: present- name: mount nfsmount:path: /usr/share/nginx/htmlsrc: 192.168.88.31:/nfs_root/htmlfstype: nfsstate: mounted[root@pubserver project01]# ansible-playbook 12-mount-nfs.yml
配置代理服务器
- 准备环境
虚拟机ip与名称:haproxy1 192.168.88.5 haproxy2 192.168.88.6
- 配置ansible环境
[root@pubserver project01]# vim inventory [webservers]web1 ansible_host=192.168.88.11web2 ansible_host=192.168.88.12web3 ansible_host=192.168.88.13[dbs]database ansible_host=192.168.88.21[storages]nfs ansible_host=192.168.88.31[lb]haproxy1 ansible_host=192.168.88.5haproxy2 ansible_host=192.168.88.6[all:vars]ansible_ssh_user=rootansible_ssh_pass=a
- 配置高可用、负载均衡功能
# 1. 配置yum[root@pubserver project01]# ansible-playbook 01-upload-repo.yml # 2. 配置调度服务器[root@pubserver project01]# vim 13-install-lb.yml ---- name: install lbhosts: lbtasks:- name: install pkgyum:name: haproxy,keepalivedstate: present[root@pubserver project01]# ansible-playbook 13-install-lb.yml # 3. 修改配置文件并启动服务[root@pubserver project01]# vim 14-config-lb.yml---- name: config haproxyhosts: lbtasks:- name: rm linesshell: sed -i '64,$d' /etc/haproxy/haproxy.cfg- name: add linesblockinfile:path: /etc/haproxy/haproxy.cfgblock: |listen wordpressbind 0.0.0.0:80balance roundrobinserver web1 192.168.88.11:80 check inter 2000 rise 2 fall 5server web2 192.168.88.12:80 check inter 2000 rise 2 fall 5server web3 192.168.88.13:80 check inter 2000 rise 2 fall 5listen monbind 0.0.0.0:1080stats refresh 30sstats uri /monstats auth admin:admin- name: start serviceservice:name: haproxystate: startedenabled: yes[root@pubserver project01]# ansible-playbook 14-config-lb.yml# 4. haproxy1配置keepalived,实现高可用集群[root@haproxy1 ~]# vim /etc/keepalived/keepalived.conf ...略...12 router_id haproxy1 # 为本机取一个唯一的id13 vrrp_iptables # 自动开启iptables放行规则...略...20 vrrp_instance VI_1 {21 state MASTER # 主服务器状态是MASTER22 interface eth023 virtual_router_id 5124 priority 10025 advert_int 126 authentication {27 auth_type PASS28 auth_pass 111129 }30 virtual_ipaddress {31 192.168.88.80 # vip地址32 }33 }# 以下全部删除# 5. haproxy2配置keepalived[root@haproxy1 ~]# scp /etc/keepalived/keepalived.conf 192.168.88.6:/etc/keepalived/[root@haproxy2 ~]# vim /etc/keepalived/keepalived.conf ...略...12 router_id haproxy2 # 为本机取一个唯一的id13 vrrp_iptables # 自动开启iptables放行规则...略...20 vrrp_instance VI_1 {21 state BACKUP # 备份服务器状态是BACKUP22 interface eth023 virtual_router_id 5124 priority 80 # 备份服务器优先级低于主服务器25 advert_int 126 authentication {27 auth_type PASS28 auth_pass 111129 }30 virtual_ipaddress {31 192.168.88.8032 }33 }# 6. 启动服务[root@haproxy1 ~]# systemctl enable keepalived.service --now[root@haproxy2 ~]# systemctl enable keepalived.service --now# 7. 验证。haproxy1上出现VIP。客户端访问http://192.168.88.80即可[root@haproxy1 ~]# ip a s | grep 192inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0inet 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
。通过以下方式修复它:
# 在nfs服务器上修改配置文件[root@nfs ~]# vim /nfs_root/html/wp-config.php # define('DB_NAME', 'wordpress')它的上方添加以下两行:define('WP_SITEURL', 'http://www.danei.com');define('WP_HOME', 'http://www.danei.com');