笔者所使用的环境为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。