业界动态
手把手让你实现开源企业级web高并发解决方案
2024-12-23 13:21
本来想起个比较风趣点的标题,可想来思去,还是走常规路线,做一系列的手把手吧。
这样一来,便于我的老朋友们识别,也让我对这篇文章的粒度把我有个定位。
 
本篇博文主要介绍利用开源的解决方案,来为企业搭建web高并发服务器架构花了一个多小时,画了张图片,希望能先帮你理解整个架构,之后我在一一介绍.linux的大型架构其实是一点点小架构拼接起来的,笔者从各个应用开始配置,最后在完全整合起来,以实现效果。
 

笔者所使用的环境为RHEL5.4 内核版本2.6.18 实现过程在虚拟机中,所用到的安装包为DVD光盘自带rpm包
装过 Development Libraries Development Tools 包组

笔者所使用的环境为RHEL5.4 内核版本2.6.18 实现过程在虚拟机中,所用到的安装包为DVD光盘自带rpm包
装过 Development Libraries Development Tools 包组
笔者虚拟机有限,只演示单边varnish配置

一、配置前端LVS负载均衡

笔者选用LVS的DR模型来实现集群架构,如果对DR模型不太了了解的朋友建议先去看看相关资料。
本模型实例图为:

 

现在director上安装ipvsadm,笔者yum配置指向有集群源所以直接用yum安装。
yum install ipvsadm

 

下面是Director配置:
DIP配置在接口上 172.16.100.10
VIP配置在接口别名上:172.16.100.1
varnish服务器配置:RIP配置在接口上:172.16.100.11 ;VIP配置在lo别名上

如果你要用到下面的heartbeat的ldirectord来实现资源转换,则下面的#Director配置不用配置

至此,前端lvs负载均衡基本实现,下面配置高可用集群

二、heartbeat高可用集群

本应用模型图:

 

高可用则是当主服务器出现故障,备用服务器会在最短时间内代替其地位,并且保证服务不间断。

简单说明:从服务器和主服务器要有相同配置,才能在故障迁移时让无界感受不到,从而保证服务不间断运行。在你的两台机器(一台 作为主节点,另一台为从节点)上运行heartbeat, 并配置好相关的选项,最重要的是lvs资源一定要配置进去。那么开始时主节点提供lvs服务,一旦主节点崩溃,那么从节点立即接管lvs服务。

SO:
director主服务器和从服务器都有两块网卡,一块eth0是和后面varnish服务器通信,另一块eth1是彼此之间监听心跳信息和故障迁移是资源转移。笔者用的eth0是172.16.100.0网段 vip为172.16.100.1 监听心跳为eth1网卡,主从的IP分别为10.10.10.1(node1) 和10.10.10.2(node2)
修改上面模型图两台主从服务器的信息

为了安全起见,node1和node2的通信需要加密进行

准备工作完成,下面开始安装heartbeat和ldirectord
所需要的安装包为

本人直接用yum来实现,能自动解决依赖关系 ,node1和node2都需要安装

安装后配置:

 

同步配置文件到node2

 

 

 

启动两个节点上的heartbeat

启动后查看/var/log/messages 可以看到启动过程,并可以手动执行/usr/lib/heartbeat/下的hb_standby 来释放资源hb_takeover来争夺资源

还可以通过ipvsadm -Ln 在主节点上查看lvs的资源状态

 

至此,带状态检测的前端集群已经布置完毕,下面就是varnish缓存服务器和后端nginx的web应用配置

三:varnish缓存服务器

可以去varnish的官网下载最新的源码包,笔者为了便于演示,就用rpm包了,(别鄙视我)
varnish官网地址:http://www.varnish-cache.org/
我下的是最新的varnish-release-3.0-1.noarch.rpm
先rpm -ivh varnish-release-3.0-1.noarch.rpm

它的作用是给你yum生成varnish的仓库,然后你在用yum安装varnish
yum install varnish

安装好后配置文件为/etc/default.vcl
本人只实现基本功能,没有对varnish做优化,所以配置比较简单

配置完成后保存退出,需手动启动
varnishd -f /etc/varnish/default.vcl -s malloc,128m -T 127.0.0.1:2000
-f etc/varnish/default.vcl -f 指定varnishd使用哪个配置文件。
-s malloc,1G -s用来指定varnish使用的存储类型和存储容量。我使用的是 malloc 类型(malloc 是一个 C 函数,用于分配内存空间), 1G 定义多少内存被 malloced。
-T 127.0.0.1:2000 -T 指定varnish的管理端口。Varnish有一个基于文本的管理接口,启动它的话可以在不停止 varnish 的情况下来管理 varnish。您可以指定管理软件监听哪个接口。
-a 0.0.0.0:8080 指定varnish所监听所有IP发给80的http请求。如果不指定-a ,则为默认监听0.0.0.0:

ps:先配置nginx在配置varnish可以直接测试效果,本人为了演示架构层次,所以就一层一层的配置了,建议如果按我的顺序做的话,后端web服务器先用yum装上apache方便测试。varnish到此就配置成功。到此我在帮各位顺一下思路

目前,如果你完全按照本文章做实验,我们用了5台服务器。
一台director 它的vip为172.16.100.1 DIP为172.16.100.10
与它实现高可用的从服务器vip为172.16.100.1 DIP为 172.16.100.12
而这两台服务器都装的有heartbeat和ipvsadm 并通过ldirectord把VIP定义为资源,会自动流动,和自动添加ipvsadm分发条目
在ipvsadm中 定义的有一台varnish服务器 地址为172.16.100.11
varnish缓存服务器在做反向代理时后端是两台web服务器分别为web1和web2
IP分别为172.16.100.15和172.16.100.17 下图帮你顺下思路

四:nginx服务器+php+eAccelerator

(1)编译安装PHP 5.3.6所需的支持库:

 

 

 


 

 

 

 

 

 

启动php-cgi进程,监听127.0.0.1的9000端口,

 

(1)安装Nginx所需的pcre库:

(2)安装Nginx

(3)创建Nginx日志目录

(4)创建Nginx配置文件

在/usr/local/nginx/conf/目录中创建nginx.conf文件:

输入以下内容:

 

user www www;

worker_processes 8; ## 根据自己的CPU来决定到底应该是多少
error_log /web/logs/nginx_error.log crit;
pid /usr/local/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;

events
{
use epoll;
worker_connections 65535;
}

http
{
include mime.types;
default_type application/octet-stream;
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;

client_max_body_size 8m;
sendfile on;
tcp_nopush on;

keepalive_timeout 60;
tcp_nodelay on;

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

#limit_zone crawler $binary_remote_addr 10m;

server
{
listen 80;
server_name 192.168.0.156; ## 这里简单测试,所以直接使用IP
index index.html index.htm index.php;
root /web;

#limit_conn crawler 20;

location ~ .*.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*.(js|css)?$
{
expires 1h;
}

location /status {
stub_status on; ## 开启状态统计,为后面的优化做测试
}

log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';

access_log /web/logs/access.log access;
}
}

 

②、在/usr/local/nginx/conf/目录中创建.conf文件:

输入以下内容:

 

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param script_FILENAME $document_root$fastcgi_script_name;
fastcgi_param script_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param document_URI $document_uri;
fastcgi_param document_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

 

(5)启动Nginx

(6)配置开机自动启动Nginx + PHP

在末尾增加以下内容:

 

ulimit -SHn 65535
/usr/local/php/sbin/php-fpm start
/usr/local/nginx/sbin/nginx

 

启动后用浏览器测试,能出PHP则配置成功

到这里,前端的应用基本就算完成了,接下来就是数据库了

五、mysql数据库+memcached

 

PHP 如何作为 memcached 客户端
有两种方法可以使 PHP 作为 memcached 客户端,调用 memcached 的服务进行对象存取操作。

第一种,PHP 有一个叫做 memcache 的扩展,Linux 下编译时需要带上 –enable-memcache[=DIR] 选项,编译完成后
并在php.ini配置文件中有这一项,而且库文件也有此文件
extension = "memcache.so"
除此之外,还有一种方法,可以避开扩展、重新编译所带来的麻烦,那就是直接使用 php-memcached-client。

二、memcached 服务端安装

首先是下载 memcached 了,目前最新版本是 v1.4.8,直接从官方网站即可下载到除此之外,memcached 用到了 libevent,

 

安装完成后需要启动

参数说明:-m 指定使用多少兆的缓存空间;-p 指定要监听的端口; -u 指定以哪个用户来运行

接下来是要安装php的memcache模块与memcached通信修改php.ini

修改完后,重启php和nginx

之后编辑个测试页面test.php

通过web浏览器访问成功图示如下:

至此,基本配置都已经完成,下面需要安装出来mysql,整个架构就基本实现了。

笔者在这里就不演示mysql的主主架构了,虚拟机真不够用了。给出一个二进制mysql的教程。

 

绿色二进制包安装MySQL 5.5.15

①:安装过程

②:配置过程

vim /etc/my.cnf
[mysqld]段内加入并修改以下两处
datadir = /mydata/data
thread_concurrency 2
## (并发线程数,一般是cpu核心的两倍)

 

vim /etc/profile 在里面加入:
PATH=$PATH:/usr/local/mysql/bin

 

 

vim /etc/ld.so.conf.d/mysql.conf 写入
/usr/local/mysql/lib

 

③:启用过程

 

输入以下SQL语句,创建一个具有root权限的用户(admin)和密码(12345678):
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY '123';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'127.0.0.1' IDENTIFIED BY '123';

 


PS:

php在编译的时候要支持上mysql,如果是php和mysql分离开来,最好yum装上php-mysql和mysql-devel包 然后再编译带上with-mysql

varnish在实现方向代理负载均衡的时候要定义为组的结构,还要定义出动作的触发条件。

memcached 的缓存对象要设置合理,不然反而会减慢效率。

nginx在优化时要结合机器的硬件,切勿网上直接copy。

 

    以上就是本篇文章【手把手让你实现开源企业级web高并发解决方案】的全部内容了,欢迎阅览 ! 文章地址:http://keair.bhha.com.cn/news/4783.html 
     文章      相关文章      动态      同类文章      热门文章      栏目首页      网站地图      返回首页 康宝晨移动站 http://keair.bhha.com.cn/mobile/ , 查看更多   
最新文章
网站优化,提升用户体验,助力企业腾飞,网站优化与用户体验提升,企业腾飞的关键策略,网站优化与用户体验,企业腾飞的双引擎策略
网站优化,其核心目标在于提升用户的浏览体验,通过精妙的结构布局、快速的加载速度以及合理的内容规划,我们能够有效增强用户间
坪山区红酒电商打包推广,开启红酒销售新征程
在当今数字化时代,电商行业蓬勃发展,而红酒作为一种具有深厚文化底蕴和广泛消费群体的饮品,其电商销售也逐渐成为热门领域,坪
chatgpt赋能python:如何找到Python的位置?
在成为一名Python工程师之前,首先你需要知道如何找到Python的位置。Python通常作为一种解释性语言,在计算机上执行
百度推广调价助手(百度推广调价助手怎么用)
大家好,今天小编关注到一个比较有意思的话题,就是关于百度推广调价助手的问题,于是小编就整理了3个相关介绍百度推广调价助手
介绍吴桥SEO操作,如何让您的网站在搜索引擎中脱颖而出
随着互联网的飞速发展,搜索引擎优化(SEO)已成为企业提升网站排名、提高品牌知名度的重要手段。,作为我国著名的杂技之乡,拥
全部本地化!ChatGLM+oneapi+fastgpt+微秘+微信 部署实操
One-API接入ChatGLM2-6B-int4的OpenAI服务接口 参考:https://doc.fastgpt.in/docs/development/one-api/ 基于docker进行
7.我每个月结余下来500块来投.资有意义吗?
     【量化思维】是富人思维最重要的思维之一,从今天开始重视自己的时间价值,哪怕是目前一无所有的人࿰
手把手让你实现开源企业级web高并发解决方案
本来想起个比较风趣点的标题,可想来思去,还是走常规路线,做一系列的手把手吧。这样一来,便于我的老朋友们识别,也让我对这篇
iOS runloop 处理卡顿 ios runloop的使用场景
1、什么是 ?作用有哪些? 可以称之为运行循环,在程序运行过程中循环做一些事情,如果没有程序执行完毕就会立即退出,有程序会一
国外虚拟主机1美元能买吗?
国外虚拟主机1美元是可以买的,但是提供1美元商家并不多,而Hostens虚拟主机是其中一个,最低售价1.6美元/月,10GB磁盘空间、1TB
相关文章