nginx完美架构方案

nginx完美架构方案
nginx完美架构方案

北京闻康集团

有问必答架构调整方案及实施过程(高性能W E B系统)

侯在存

2010年12月

第1章调整方案概述

1.1 总体概述

项目目的出现灾难迅速恢复,让服务器的对外提供达到99.9%.

项目负责人侯在存

涉及机房三元桥东四廊坊

涉及设备DELL R710 2950

预计时间六个月

项目阶段 1.数据库应用分离 2.nginx对apache的替换3.增加memcache

需增设备2台 DELL 服务器和部分内存条(现有一台空闲服务器)项目简述:

项目前:club服务器有5台名字分https://www.360docs.net/doc/7e15164461.html, ,每台服务器跑的是AMP+nginx反向代理和负载均衡+DNS轮询及rsync程序同步,其中的mysql都是从的(读的数据库),另外还有一台是主数据198(写的)+ 一台备份数据库做冗余205(且分担蜘蛛抓取)。

注:c1 c2 在三元桥 c3 c4在廊坊 c5在东单

项目后:三元桥的C1C2和新增的1台服务器承担所有的访问,c3 c4 c5不对外提供访问,做 c1 c2服务器出现问题时的恢复冗余机和蜘蛛抓取承担,所有的mysql也停用做冗余用,增加一台读的数据库让 club服务器的读数据库都改到这台服务器上,原来的198不变但需要增加内存。例外+一台读写数据库服务器的同步冗余机,从而实现服务器出现大灾难2小时内解决,小灾难半小时解决,让服务器的对外提供达到99.9%.

注:nginx+phpcgi代替amp 及对c1 c2 的优化可以使三元桥WEB承载所有的访问。

项目影响:

由于本次将服务器的web服务替换,ssi和rewrite规则支持不一样,业务可能会中断,需某周5到-周日的修改。

第2章调整前结构分析

2.1 CLUB架构现状

2.1.1 CLUB架构现状拓扑

如图所示:C1-C5 分别是nginx反向代理+AMP 环境且mysql 都是读的数据与198主的写的数据同步,C1是rsync主的程序同步其余C2-C5是从的。205是备份服务器,备份程序和数据负载蜘蛛的抓取。

2.1.2 CLUB现在访问关系

注:每台nginx还转到后端其他AMP,1%的流量,rsync的连接线没画

第3章第一阶数据库应用分离3.1 110独立DB服务器搭建(空闲的那台服务器)

3.1.1 装系统及简单优化

1. 装系统的步骤省略

2. 优化开机启动服务

装的是centos系统,装完后首先优化开机启动服务的。

Setup--->系统服务:把不需要的服务全部关闭。

3.1.2 mysql的搭建

[root@localhost houzc]# wget https://www.360docs.net/doc/7e15164461.html,/mysql/MySQL-5.0/mysql-5.0.89.tar.gz [root@localhost houzc]# tar -zxvf mysql-5.0.89.tar.gz -C /usr/local/src/

[root@localhost houzc]# cd /usr/local/src/mysql-5.0.89/

[root@localhost mysql-5.0.89]# useradd mysql -M -s /sbin/nologin

[root@localhost mysql-5.0.89]#yum -y install libtermcap-devel

[root@localhostmysql-5.0.89]#./configure --prefix=/usr/local/mysql-5.0.89/

--with-unix-socket-path=/tmp/mysql.sock --localstatedir=/usr/local/mysql-5.0.89/data \

--without-debug \ //去除debug模式

--enable-thread-safe-client \ //以线程方式编译客户端

--enable-assembler \ //使用一些字符函数的汇编版本

--enable-profiling \ //编译一个版本带有查询取样代码

--enable-community-features \ //停用附加功能提供的用户社区

--with-mysqld-ldflags=-all-static \ // 以纯静态方式编译服务端

--with-client-ldflags=-all-static \ // 以纯静态方式编译客户端

--with-charset=latin1 \ //默认编码拉丁文

--with-extra-charset=utf8,gbk \ //支持编码的格式

--with-innodb \ //支持innodb表

--with-scv-storage-engine \ //使用SCV存储引擎

--with-mysqld-user=mysql \ //mysqld的守护进程用户

--without-embedded-server \ //构建嵌入式服务器

--with-server-suffix=-community //附加价值版本的字符串

[root@localhost mysql-5.0.89]# make

[root@localhost mysql-5.0.89]# make install

[root@localhost mysql-5.0.89]# ./scripts/mysql_install_db

[root@localhost mysql-5.0.89]# cp support-files/https://www.360docs.net/doc/7e15164461.html,f /etc/https://www.360docs.net/doc/7e15164461.html,f -fv

[root@localhost mysql-5.0.89]#chown -R root:mysql /usr/local/mysql-5.0.89/

[root@localhost mysql-5.0.89]# chown -R mysql.mysql /usr/local/mysql-5.0.89/data/

[root@localhost mysql-5.0.89]# cd /usr/local/mysql-5.0.89/libexec/

[root@localhost libexec]# cp mysql mysql.old

[root@localhost libexec]# strip mysqld

[root@localhost libexec]# echo "/usr/local/mysql-5.0.89/lib/mysql/" >> /etc/ld.so.conf

[root@localhost libexec]# ldconfig

[root@localhost libexec]# /usr/local/mysql-5.0.89/bin/mysqld_safe &

[root@localhost libexec]#ps -ef | grep mysql 验证是否成功开启mysql

[root@localhost libexec]#/usr/local/mysql-5.0.89/bin/mysqladmin -u root password "youpassword"

[root@localhost libexec]#/usr/local/mysql-5.0.89/bin/mysql -u root -p

Enter password: (输入youpassword密码)

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| test |

+--------------------+

3 rows in set (0.00 sec)

mysql> quit;

[root@localhost libexec]#vi /etc/rc.local

/usr/local/mysql-5.0.89/bin/mysqld_safe &

//平滑关闭mysqld :

[root@localhost data]# /usr/local/mysql-5.0.89/bin/mysqladmin -u root -p shutdown Enter password: (输入youpassword密码)

这样mysql服务就装完了。

3.1.3 mysql的优化

1. 编译时的优化

-static 13%

--with-client-ldflags=-all-static

--with-mysqld-ldflags=-all-static

静态链接提高13%性能

-pgcc 1%

CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc \

CXXFLAGS="-O3 -mpentiumpro -mstack-align-double \

-felide-constructors -fno-exceptions -fno-rtti"

如果是Inter处理器,使用pgcc提高1%性能

Unix Socket 7.5%

--with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock

使用unix套接字链接提高7.5%性能

--enable-assembler

[size=-1]允许使用汇编模式(优化性能)

2. 优化远程连接

skip-name-resolve

选项就能禁用DNS解析,连接速度会快很多。不过,这样的话就不能在MySQL的授权表中使用主机名了而只能用ip格式。

设置连接数set-variable = max_connections=1000

设置连接数,mysql默认的连接数是100,太少了.

3. 开启缓存机制

skip-locking#取消文件系统的外部锁

key_buffer = 12288M #索引缓存,根据内存大小而定,如果是独立的db服务器,可以设置高达80%的内存总量

#连接排队列表总数

back_log = 200

max_allowed_packet = 10M

#打开表缓存总数,可以避免频繁的打开数据表产生的开销

table_cache = 512

#每个线程排序所需的缓冲

sort_buffer_size = 16M

#MyISAM表发生变化时重新排序所需的缓冲

myisam_sort_buffer_size = 64M

#缓存可重用的线程数

thread_cache = 128

#查询结果缓存

query_cache_size = 128M

#设置超时时间,能避免长连接

set-variable = wait_timeout=60

#最大并发线程数,cpu数量*2

thread_concurrency = 16

#记录慢查询,然后对慢查询一一优化log-slow-queries=/usr/local/mysql-5.0.89/data/slow_query.log long_query_time=5

3.2 数据库主从的同步

3.2.1mysql数据库备份

3.2.2主从的同步搭建

3.3 apache的优化及内核的优化

3.3.1apache的优化

3.3.2110和club的内核优化

3.4 CLUB架构现状

3.4.1 CLUB架构现状拓扑

3.4.2 CLUB架构访问关系

3.5数据库压力测试

3.6数据库在线使用测试

第4章第二阶段APACHE的替换

相关主题
相关文档
最新文档