首页 » 网站推广 » 京东PHP云函数技巧_案例分享若何运用京东云培植高可用营业架构

京东PHP云函数技巧_案例分享若何运用京东云培植高可用营业架构

访客 2024-11-13 0

扫一扫用手机浏览

文章目录 [+]

客户业务为范例的web运用,在京东云上创建一个通过公网IP/域名访问的高可用的web网站,包含通用运用的标准框架,包括访问接入层、APP层、缓存层、数据库层。
整体业务架构设计供应可用区(AZ)级别的高可用等级。

本文演示场景包括单AZ涌现故障导致的主机故障、数据库故障、缓存故障场景下,业务能够供应持续访问能力。
并保障数据的完全性和同等性,同时,能够在无人干预的条件下,实现业务的弹性扩展,保障业务高并发的场景下有良好的相应韶光。

京东PHP云函数技巧_案例分享若何运用京东云培植高可用营业架构

解释:

京东PHP云函数技巧_案例分享若何运用京东云培植高可用营业架构
(图片来自网络侵删)

本文的架构为演示架构,并未严格遵照生产环境的业务性能及安全的整体方案步骤及哀求,在生产环境中,至少该当对主机及CFS的存储性能进行压测,确保能够知足实际业务需求,同时,通过域名访问的web做事,建议利用WAF等安全防护产品,保障业务的入口安全。

1、京东云高可用架构设计

业务架构以某单位的业务需求为根本,仿照其业务生产环境,方案京东云上的业务整体架构,个中, NAT网关、负载均衡、堡垒机均创建在公网访问子网,别的主机及数据库等,创建在内部子网内。

个中运用主机利用高可用组创建, LB后端直接挂载高可用组。

利用高可用组的目标是实现业务高峰期故障时,打算资源能自动加入负载均衡后端,自动化扩展业务处 理能力。
减少运维干预本钱。

2、资源需求(所有IP及URL均调度为非真实IP及URL)

3、运用支配3.1 根本环境准备

业务以一个范例的wordpress的网站为例,业务容器化支配于云主机上,高可用依赖京东云的云主机高可用组,主机安装docker,并配置docker做事自动启动。

#创建运用数据目录 配置目录权限、安装docker等 mkdir -p /wp chmod 777 /wp yum install docker vim -y systemctl enable docker systemctl start docker #挂载CFS文件作为运用数据目录 yum install nfs-utils -y systemctl enable rpcbind systemctl start rpcbind mount -t nfs -o vers=3 -o noresvport 10.0.0.200:/cfs /wp#配置启动自动挂载CFS及启动做事,通过rc.local实现:#[root@wpha0 wp]# cat /etc/rc.local#!/bin/bash# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES## It is highly advisable to create own systemd services or udev rules# to run scripts during boot instead of using this file.## In contrast to previous versions due to parallel execution during boot# this script will NOT be run after all other services.## Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure# that this script will be executed during boot.touch /var/lock/subsys/localmount -t nfs -o vers=3 -o noresvport 10.0.0.200:/cfs /wp#(解释,生产环境可在/etc/fstab挂载)bash /root/start.shstart.sh见以下代码[root@wpha0 wp]# cat /root/start.shdocker stop wordpresssleep 3docker rm wordpresssleep 3docker run -d --name=wordpress --restart=unless-stopped -p 443:443 -p 80:80 -v /wp:/var/www/html wordpress#[root@wpha0 wp]##启动脚本编辑完成后,并写入rc.local后,rc.local调度成可实行,以实现启动主机运行脚本, rc.local实现了主机启动后自动挂载CFS到指定目录,然后,通过start.sh自动打消旧数据,重新拉起wordpress做事。
chmod +x /etc/rc.d/rc.local#拉取运用所需镜像 docker pull wordpress#拉取镜像后,运行做事。
docker run -d --name=wordpress --restart=unless-stopped -p 443:443 -p 80:80 -v /wp:/var/www/html wordpress

把稳,这个场景下,紧张调度了几个位置:

1、挂载CFS为wordpress的事情目录,这样,调度页面内容以及拉起新主机后,网站内容都保持同等。
干系自动挂载办法为在/etc/rc.local加入挂载命令,同时chmod +x /etc/rc.d/rc.local 把这个文件加一下可实行权限。

2、须要把wp目录的权限改为777 (或docker内部的 33 tape等,不过不同版本可能有差异,改成777相对稳妥), 否则挂载后,docker内部的wordpress无法获取目录读写权限。

3、NFS挂载须要安装nfs插件 yum install nfs-utils -y 并启动rpc做事 systemctl enable rpcbind systemctl start rpcbind

WP目录为777 权限

到这里根本主机环境准备完成。

下一步,进行wordpress运用的配置,实现高可用可视化的演示效果。

3.2业务侧wordpress配置

web运用利用wordpress支配。
通过docker支配,并实现高可用组主机自动伸缩自动化拉起。

通过docker拉取wordpress

docker pull wordpress

拉取镜像后

docker run -d —name=wordpress —restart=unless-stopped -p 443:443 -p 80:80 -v /wp:/var/www/html wordpress

个中/wp 是挂载的CFS,作为多个运用主机共同挂载,作为wordpress的运用的运用文件目录。

启动wordpress容器,并挂载CFS目录为WP的运用目录。

以上支配在3.1中已经完成。

前置准备事情-负载均衡:

配置一个带公网IP的负载均衡,并配置监听器,监听器后端暂时配置一个已经拉起了docker的这台主机

前置准备事情-数据库:

在配置网站前,须要首先在云掌握台的RDS那里为wordpress创建一个账户:wordpress,并设置密码,建立一个库:wordpress(由于后续演示方案有调度,我又创建了一个新库wordpressbackup,实际正常来讲一个库就可以了),并授权wordpress库给wordpress用户。

前置准备事情-redis:

在掌握台购买一个redis,记录redis的URL,为后续配置redis 缓存做准备。

这样,基本的运用环境就绪了。

通过浏览器访问负载均衡(把稳访问LB,不直接访问主机)的IP的80端口,即可进入wordpress的配置 页面, wordpress的配置,紧张是数据库的地址以及数据库前缀的配置,输入精确的数据库的host 地址及密码即可,别的保持默认,其他依据官网手册辅导保持默认配置即可。

配置完成后,wordpress会自动为网站创建干系的表,并提示配置wordpress的admin以及管理密码。

安装完成后,可以登录数据库查看创建的表,后续MySQL高可用演示时,也可以登录到数据库做些常规 操作,不受高可用切换影响。

到此,基本的运用就安装完成了。

配置redis动态缓存加速:

redis的角色,在这个案例里边,在wordpress里 redis 作为一个动态加速缓存利用,对加速网站访问, 减轻数据库压力起到一定浸染。

下载wordpress的redis插件,redis-cache。

下载后通过wordpress的管理页面-plugin —addnew 直接上传,然后依据插件操作手册安装配置即可。

安装redis-cache往后,会在/wp/wp-content/plugins 目录下天生一个 redis-cache目录。
须要同时在/wp/wp- content 下天生一个 object-cache.php文件,正常来讲,须要调度一个参数host改成redis的域名即可。
如果配置了密码,就须要调度这个以及redis-cache目录下的配置文件把密码配置进去,这个由于是 演示环境,redis设置 了免密,生产环境一定要设置密码。

安装配置完成后,在管理界面的setting里会有redis的配置选项,这个和版本有关系,有些版本可能会让 在这里做参数配置。
直接改文件参数效果是一样的。

mysql及redis管理及干系登录办法先容:

MySQL的登录,没有安装client,利用了一个mysql的docker

干系命令:

docker run —name mysql -p 3306:3306 —restart=unless-stopped -v /root/dbackup/:/db -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

进入mysql的docker中:

docker exec -it mysql bash

连接wordpress利用的数据库:

mysql -h mysql-xxxea04fc4c52.jdcloud.com -u wordpress -p

use wordpressbackup;

show tables;

select id from wpbackup_posts;

—中间由于做了多次演习训练和数据库切换,中间做了wordpress数据库导出和导入操作

mysql 数据库导出(均在mysql的docker容器中实行命令):

mysqldump -h mysql-xxxa04fc4c52.jdcloud.com -uwordpress -p —databases wordpressbackup >/db/wordpressbackup-0322.sql

数据导入:

进入数据库,

use wordpressbackup;

source /db/wordpressbackup-0322.sql;

——redis验证

redis验证,同样是没有安装client,通过docker里的命令行去连接:

docker run -d —name redis —memory=1G -p 7379:6379 redis

docker exec -it redis bash

redis-cli -h redis-j49rpxxx.jdcloud.com

登入后,查看信息:

KEYS

wordpress配置主页显示hostname及来源IP

---让wordpress获取hostname 并在页面展示+获取访客地址,以增强演示效果,明确看到访问的实际主 机位置。

为了让访问者看到访问的IP是哪个(证明高可用组的自动扩容及业务的自动拉起),须要在所利用的 theme 目录的function里加入干系代码。
/wp/wp- content/themes/twentytwentytwo/function.php

[root@AG-wordpress- HA-group1-c8705-2 twentytwentytwo]# vim /wp/wp-content/themes/twentytwentytwo/function.php

在里边加入以下代码,一个是show_ip函数,一个是show_hostname函数。

function get_the_user_ip() {if ( ! empty( $_SERVER["HTTP_CLIENT_IP"] ) ) {//check ip from share internet$ip = $_SERVER["HTTP_CLIENT_IP"];} elseif ( ! empty( $_SERVER["HTTP_X_FORWARDED_FOR"] ) ) {//to check ip is pass from proxy$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];} else {$ip = $_SERVER["REMOTE_ADDR"];}return apply_filters( "wpb_get_ip", $ip );}add_shortcode("show_ip", "get_the_user_ip");function get_hostname(){ $hostname = gethostname(); echo "$hostname\n"; return apply_filters( "hostname", $hostname );}add_shortcode("show_hostname", "get_hostname");

然后,在wordpress的site里加入短代码实现:

保存后,看到页面可以显示干系的IP及hostname信息了。

到这里, wordpress的运用环境配置完成。

下一步配置业务的高可用环境,实现跨AZ的高可用组及主机自动弹性伸缩。

3.3 实例模板及高可用组、LB配置

单台主机配置完成后,重启能自动拉起运用,进行确认后, 将现有主机打一个镜像。
作为高可用组的实例模板。
后续LB后真个高可用组通过这个模板创建主机。

别的包括数据库配置、网站数据、redis缓存配置等,均实现了做事及数据的分离,因此,在后期进行动 态弹性扩容时,利用这个模板的高可用组,可以直接拉起做事,实现动态弹性伸缩。

实例模板:

高可用组:

高可用组利用制作好了wordpress的运用主机的镜像。
做到高可用组自动弹性伸缩出新主机—新主机自动 拉起wordpress运用—新主机自动挂载到LB吸收业务流量的模式。

LB配置。

LB监听器选择后端做事为高可用组,并配置康健检讨。

高可用组挂载到LB后端往后,运用环境已经搭建完成。

可以访问LB入口,访问到网站,并且会轮询到不同做事器,同时,访问单台做事器的外网IP 也可以访问网站业务:

LB访问截图(2张,分别访问到了两个主机)

单台主机访问截图(直接访问单台主机IP,刷新后不会轮询主机):

演示环境就绪。

下一步,进行毁坏性演习训练,考验高可用环境的效果。

4、运用演示

高可用演示脚本:

高可用组信息,目前LB后端挂载的为高可用组:

测试页面信息(所有IP均为非真实IP):

业务入口(LB): http://100.126.35.4/

高可用组单台主机访问入口目前为:

http://100.126.38.13/

http://100.126.38.16

主机的高可用及自动伸缩:

演示所需的一些脚本:

一个是仿照生产环境,对业务主入口的LB持续访问,这个在测试过程中,一贯可以访问到,不会中断。

#!/bin/bash#for ((i=1;i<=10;i++))for i in {1..15000} docurl 100.126.35.4echo $iecho $(date +%T)sleep 3 done

一个是仿照单机环境,对业主机入口的持续访问,这个在测试过程中,当针对单机关机时,访问会卡住。

#!/bin/bash#for ((i=1;i<=10;i++))for i in {1..15000} docurl 100.126.38.16echo $iecho $(date +%T)sleep 3 done

演示过程中,高可用组自动伸缩功能,能正常扩容出新的主机并供应业务访问。

高可用组的自动伸缩,通过 stress仿照压力

安装stress后,直接运行(主机为2C):

stress —CPU 2

通过top命令可以看到CPU被打满。

过2分钟(高可用组伸缩策略配置的韶光),高可用组会自动扩展一台主机,并作为高可用组的一台主机自动挂载到LB的后端,可在LB及主机界面看到自动扩容的主机。

在掌握台将一台高可用组内主机关机,然后可见LB后端做事康健检讨创造挂载的高可用组一台做事器非常,高可用组如配置最小的主机数量,则高可用组也自动扩出一台主机,连续供应做事。
在此期间,流量会转发给后端正常主机,康健检讨非常的主机不再吸收流量,业务访问持续正常。

PAAS做事的高可用:

本演示以MySQL及redis研发在底层直接杀docker,然后业务访问不中断,掌握台上会涌现主从切换征象在这个过程中对业务的访问不会中断。

云数据库及缓存的毁坏性操作,底层操作由研发操作。

底层进行RDS主备切换(kill掉RDS主库),业务访问同样不会中断,研发供应截图可以看到主从切换过程。

本文实际支配环境为京东为客户搭建的私有云环境(JDSTACK),公有云与私有云为相同技能栈,搭建及验证过程相似。
限于篇幅,redis验证部分及主机可访问性脚本结果未截图,感兴趣的读者可自行在云上通过本文指引过程搭建验证。

相关文章

语言栏,现代科技与人类语言的完美融合

随着科技的飞速发展,人类的生活越来越便捷。其中,电脑语言栏作为现代科技与人类语言的完美融合,为我们带来了极大的便利。本文将从语言栏...

网站推广 2024-12-29 阅读0 评论0

语言框架,沟通的艺术与方法

在人际交往中,沟通是不可或缺的一环。而语言框架作为一种沟通的艺术与技巧,对于提高沟通效果、促进人际关系具有重要作用。本文将从语言框...

网站推广 2024-12-29 阅读0 评论0

语言暴力,心灵毒瘤的蔓延与反思

语言是人与人沟通的桥梁,在现实生活中,却有一部分人将语言当作伤害他人的利器,用恶毒的语言对他人进行欺负。这种现象,我们称之为“语言...

网站推广 2024-12-29 阅读0 评论0

语言教程软件,助力英语学习的新时代利器

随着科技的飞速发展,人工智能逐渐成为教育领域的有力助手。在英语学习方面,语言教程软件应运而生,为广大学子提供了便捷、高效的学习途径...

网站推广 2024-12-29 阅读0 评论0