资源描述
互联网项目系统软件集成处理方案
目录
前言 3
Nginx安装 4
Nignx下载 4
Nginx安装 4
JDK安装 5
Tomcat安装 6
Memecached安装 6
第一步安装libevent 7
第二部安装memcached 8
第三步启动并检测memcached 10
配置Nginx+Tomcat集群实现负载均衡 10
Tomcat集群配置 11
Nginx配置 12
Tomcat实现session同步 16
Tomcat调用memcached配置 18
优化linux内核 19
测试Nginx下Tomcat实现session同步 19
MySQL集群 20
管理节点(MGM)的安装及配置 21
存储节点(NDB)的安装及配置 22
负载均衡 23
序言
本文关键目标是经过对下面所列出软件进行合理配置和合理使用来处理互联网项目中怎样提升应用系统平台高可用性及稳定性。
本文中关键应用软件为:
Nginx负载均衡
Tomcat应用服务器
Memcached缓存服务器
Mysql数据库
相关插件:
JDK
Libevent
Pcre
msm
Heartbeat
Ldirectord
假如说单纯根据本文档操作配置实现了负载均衡及集群,大大提升了系统高可用性及系统性能就算完成任务,那么就失去了文档本身意义。本文档所列内容只是高可用系统一个基础,只是基于怎样去搭建高可用平台,同时也只是运维工作一个开始。
系统7*二十四小时高可用并不只是一套高可用软件集成,而是在这个基础上怎样去维护它。我们能够经过一套完整运维管理制度去约束运维团体进行细致工作,对任何出现系统问题进行分析及处理。对于运维工程师能够不停去探索怎样去监控并合理利用网络资源;怎样去监控并合理使用服务器及存放硬件资源;怎样去深度发掘上述软件更多使用奥妙及大胆尝试新软件及技术;怎样去对程序进行监控,和研发团体紧密沟通提升代码性能;怎样去对数据库进行监控并优化,大大提升数据存放及读取效率等等。
意在不忽略运维工作中每个细节,虑小患而治大忧,这么才能最大程度确保系统稳定性,7*二十四小时不间断提供服务,为企业经过互联网平台不停获益提供保障。
本文档参考了大量文件,最终整合在一起,期望对从事系统运维工作好友带来部分帮助。有愿意深入进行技术交流大家能够mail我:。有不足地方也期望大家多多指出。
Nginx安装
本文以nginx-0.7.67为例,到官网,以0.7.67版本为例。
Nignx下载
[root@localhost ~]# wget
---09-24 14:48:12--
Resolving nginx.org... 81.19.68.137
Connecting to nginx.org|81.19.68.137|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 608462 (594K) [application/octet-stream]
Saving to: `nginx-0.7.67.tar.gz'
100%[<========================================>] 608,462 44.5K/s in 18s
-09-24 14:48:32 (32.8 KB/s) - `nginx-0.7.67.tar.gz' saved [608462/608462]
Nginx安装
解压压缩文件
[root@localhost ~]# tar -zxvf nginx-0.7.67.tar.gz
进入安装文件目录
[root@localhost ~]# cd nginx-0.7.67
指定安装到
[root@localhost nginx-0.7.67]# ./configure –prefix=/usr/local/nginx
/usr/local/nginx目录下,可用./configure –help查看需要哪些编译参数
编译
[root@localhost nginx-0.7.67]#make
安装
[root@localhost nginx-0.7.67]#make install
查看是否安装成功
[root@localhost nginx-0.7.67]# ll /usr/local/nginx/
drwxr-xr-x 2 root root 4096 Sep 24 15:12 conf
drwxr-xr-x 2 root root 4096 Sep 24 15:12 html
drwxr-xr-x 2 root root 4096 Sep 24 15:12 logs
drwxr-xr-x 2 root root 4096 Sep 24 15:12 sbin
测试Nginx配置文件是否正确
[root@localhost nginx-0.7.67]#/usr/local/nginx/sbin/nginx –t
开启Nginx
[root@localhost nginx-0.7.67]#/usr/local/nginx/sbin/nginx
下面验证Nginx是否正常开启,浏览器中输入nginx服务器地址,出现以下图说明nginx正常工作。
JDK安装
赋权实施权限给JDK*.bin
# chmod u+x JDK*.bin
运行JDK安装包
# ./JDK*.bin
创建指定jdk文件路径
# mkdir /usr/java -pv
将jdk移动到指定路径,依据实际情况进行配置
# mv jdk* /usr/java
申明Java环境变量
修改/etc/profile文件,增加JAVA_HOME,JRE_HOME,PATH,CLASSPATH属性
# vi /etc/profile
export JAVA_HOME=/jdk路径 如export JAVA_HOME=/root/jdk1.6.0_18
export JRE_HOME=/jre路径 如export JRE_HOME=/root/jdk1.6.0_18/jre
export PATH=/java/bin路径 如export PATH=/root/jdk1.6.0_18/bin
export CLASSPATH=/java/../lib路径 如export CLASSPATH=./:/usr/jdk1.6.0_18/lib:/usr/jdk1.6.0_18/jre/lib
保留并退出。
运行./etc/profile使环境变量生效。
也能够使用echo $PATH看是否包含添加路径。
运行命令:
# java -version
若出现以下信息则证实java运行成功
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
Tomcat安装
安装Tomcat安装包到/usr/local目录下实施以下命令:
解压tomcat
# tar xf apache-Tomcatt*.tar.gz -C /usr/local
建立连接符,依据实际情况配置
# ln -sv apache-Tomcat* tomcat
# cd tomcat
修改/etc/profile文件,导入tomcat目录,申明环境变量
加入以下两条命令:
export CATALINA_HOME=/usr/local/tomcat
echo $CATALINA_HOME
赋权实施权限给catalina.sh和startup.sh
# chmod u+x catalina.sh
# chmod u+x startup.sh
手动开启tomcat
# bin/catalina.sh start
或
# bin/startup.sh
在用户端验证toncat是否安装成功,默认端口为8080。
访问http://service_IP:8080
Memecached安装
下载 Memcache :
Memcache用到了libevent这个库用于Socket处理,所以还需要安装libevent。
下载 libevent:
http:// .org/~provos/libevent-1.4.14b-stable.tar.gz
第一步安装libevent
先安装libevent:
解压软件包
# tar zxvf libevent-1.4.14b-stable.tar.gz
路径跳转
# cd libevent-1.4.14b-stable
配置安装路径
# ./configure --prefix=/usr
编译
# make
安装
# make install
假如安装过程中,发觉提醒:
configure: error: no acceptable C compiler found in $PATH
需要安装C compiler,安装方法:
在Linux环境下只要能链接Internet就能够经过当地yum源来安装,在终端下输入
# yum install gcc
就能够,自动安装。安装时候需确保linux能够上网,因为需要网上下载安装包。
然后看看我们libevent是否安装成功:
实施命令:
# ls -al /usr/lib | grep libevent
lrwxrwxrwx 1 root root 21 3月 2 13:17 libevent-1.4.so.2 -> libevent-1.4.so.2.1.2
-rwxr-xr-x 1 root root 280215 3月 2 13:17 libevent-1.4.so.2.1.2
-rw-r--r-- 1 root root 367094 3月 2 13:17 libevent.a
lrwxrwxrwx 1 root root 26 3月 2 13:17 libevent_core-1.4.so.2 -> libevent_core-1.4.so.2.1.2
-rwxr-xr-x 1 root root 107511 3月 2 13:17 libevent_core-1.4.so.2.1.2
-rw-r--r-- 1 root root 146924 3月 2 13:17 libevent_core.a
-rwxr-xr-x 1 root root 860 3月 2 13:17 libevent_core.la
lrwxrwxrwx 1 root root 26 3月 2 13:17 libevent_core.so -> libevent_core-1.4.so.2.1.2
lrwxrwxrwx 1 root root 27 3月 2 13:17 libevent_extra-1.4.so.2 -> libevent_extra-1.4.so.2.1.2
-rwxr-xr-x 1 root root 219655 3月 2 13:17 libevent_extra-1.4.so.2.1.2
-rw-r--r-- 1 root root 281482 3月 2 13:17 libevent_extra.a
-rwxr-xr-x 1 root root 867 3月 2 13:17 libevent_extra.la
lrwxrwxrwx 1 root root 27 3月 2 13:17 libevent_extra.so -> libevent_extra-1.4.so.2.1.2
-rwxr-xr-x 1 root root 825 3月 2 13:17 libevent.la
lrwxrwxrwx 1 root root 21 3月 2 13:17 libevent.so -> libevent-1.4.so.2.1.2
出现以上提醒则证实libevent安装完成。
第二部安装memcached
解压软件包
# tar zxvf memcached-1.4.5.tar.gz
跳转到指定路径
# cd memcached-1.4.5
配置安装路径
# ./configure --with-libevent=/usr
编译
# make
安装
# make install
假如中间出现报错,请仔细检验错误信息,根据错误信息来配置或增加对应库或路径。
安装完成后会把memcached放到 /usr/local/bin/memcached 。
我们看以下是否安装了:
# ls -al /usr/local/bin/mem*
-rwxr-xr-x 1 root root 121249 3月 2 13:23 /usr/local/bin/memcached
-rwxr-xr-x 1 root root 130179 3月 2 13:23 /usr/local/bin/memcached-debug
安装完成后,现在我们看以下memcache帮助:
# /usr/local/bin/memcached -h
出现:error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory 原因是找不到libevent-1.4.so.2类库。
处理措施以下:
使用LD_DEBUG=help ./memcached -v来确定加载类库路径。
方法以下:
# LD_DEBUG=libs ./memcached -v 2>&1 > /dev/null | less
则系统会显示:
linux:/local/memcached/bin # LD_DEBUG=libs ./memcached -v 2>&1 > /dev/null | less
20421: find library=libevent-1.4.so.2; searching
20421: search cache=/etc/ld.so.cache
20421: search path=/lib/tls/i686/sse2:/lib/tls/i686:/lib/tls/sse2:/lib/tls:/lib/i686/sse2:/lib/i686:/lib/sse2:/lib:/usr/lib/tls/i686
/sse2:/usr/lib/tls/i686:/usr/lib/tls/sse2:/usr/lib/tls:/usr/lib/i686/sse2:/usr/lib/i686:/usr/lib/sse2:/usr/lib (system search path)
20421: trying file=/lib/tls/i686/sse2/libevent-1.4.so.2
20421: trying file=/lib/tls/i686/libevent-1.4.so.2
20421: trying file=/lib/tls/sse2/libevent-1.4.so.2
20421: trying file=/lib/tls/libevent-1.4.so.2
20421: trying file=/lib/i686/sse2/libevent-1.4.so.2
20421: trying file=/lib/i686/libevent-1.4.so.2
20421: trying file=/lib/sse2/libevent-1.4.so.2
20421: trying file=/lib/libevent-1.4.so.2
20421: trying file=/usr/lib/tls/i686/sse2/libevent-1.4.so.2
20421: trying file=/usr/lib/tls/i686/libevent-1.4.so.2
20421: trying file=/usr/lib/tls/sse2/libevent-1.4.so.2
20421: trying file=/usr/lib/tls/libevent-1.4.so.2
20421: trying file=/usr/lib/i686/sse2/libevent-1.4.so.2
20421: trying file=/usr/lib/i686/libevent-1.4.so.2
20421: trying file=/usr/lib/sse2/libevent-1.4.so.2
20421: trying file=/usr/lib/libevent-1.4.so.2
20421:
./memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
我们看到,memcached会到很多地方去找,所以依据其它求,我们只需建一个软链接,指定到我们安装类库上即可
方法以下:
# ln -s /usr/local/lib/libevent-1.4.so.2 /lib/libevent-1.4.so.2
再测试是否安装成功:
# /usr/local/bin/memcached -h
memcached 1.2.6
-p <num> TCP port number to listen on (default: 11211)
-U <num> UDP port number to listen on (default: 0, off)
-s <file> unix socket path to listen on (disables network support)
-a <mask> access mask for unix socket, in octal (default 0700)
-l <ip_addr> interface to listen on, default is INDRR_ANY
-d run as a daemon
-r maximize core file limit
-u <username> assume identity of <username> (only when run as root)
-m <num> max memory to use for items in megabytes, default is 64 MB
-M return error on memory exhausted (rather than removing items)
-c <num> max simultaneous connections, default is 1024
-k lock down all paged memory. Note that there is a
limit on how much memory you may lock. Trying to
allocate more than that would fail, so be sure you
set the limit correctly for the user you started
the daemon with (not for -u <username> user;
under sh this is done with 'ulimit -S -l NUM_KB').
-v verbose (print errors/warnings while in event loop)
-vv very verbose (also print client commands/reponses)
-h print this help and exit
-i print memcached and libevent license
-b run a managed instanced (mnemonic: buckets)
-P <file> save PID in <file>, only used with -d option
-f <factor> chunk size growth factor, default 1.25
-n <bytes> minimum space allocated for key+value+flags, default 48
出现上面描述,表示安装成功。
第三步开启并检测memcached
开启一个Memcache服务器端:
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.173 -p 1 -c 256 -P /tmp/memcached.pid
相关参数
-d选项是开启一个守护进程。
-m是分配给Memcache使用内存数量,单位是MB,我这里是10MB。
-u是运行Memcache用户,我这里是root。
-l是监听服务器IP地址,假如有多个地址话,我这里指定了服务器IP地址127.0.0.1。
-p是设置Memcache监听端口,我这里设置了1,最好是1024以上端口。
-c选项是最大运行并发连接数,默认是1024,我这里设置了256,根据你服务器负载量来设定。
-P是设置保留Memcachepid文件,我这里是保留在/tmp/memcached.pid。
假如要结束Memcache进程,实施:
# kill -9 `cat /tmp/memcached.pid`
也能够开启多个守护进程,不过端口不能反复。
用 netstat -lp|grep memcached 命令能够查看 memcached 是否已经开启:
# netstat -lp|grep memcached
tcp 0 0 127.0.0.1:1 *:* LISTEN 9037/memcached
udp 0 0 127.0.0.1:1 *:* 9037/memcached
说明 memcached 正在运行。
配置Nginx+Tomcat集群实现负载均衡
因为我们需要实现tomcat负载均衡,而且在多台用于运行tomcat服务器和每台服务器上同时运行多个tomcat服务,故以下我们以一台服务器上运行多个tomcat服务举例进行说明,对于多台服务器操作方法类似,只是需要注意IP地址及端口使用及合理计划即可。
Tomcat集群配置
以下为我们以一台服务上同事运行两个tomcat服务为例进行具体说明。
安装了两个tomcat,解压tomcat到/usr/local/tomcat1和/usr/local/tomcat2。
分别进入/usr/local/tomcat1/bin和/usr/local/tomcat2/bin。
目录实施命令:
设置实施权限
# chmod u+x *.Sh
修改tomcat1下conf中server.xml
<!--Server port="8005"需要修改,确保唯一性,能够设置为9011、9012、9021、9022-->
<Server port="9011" shutdown="SHUTDOWN">
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<!--Connector port="8080"需要修改,确保唯一性,能够设置为8011、8012、8021、8022-->
<Connector port="8011" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="0" disableUploadTimeout="true" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<!--Connector port="8009"需要修改,确保唯一性,能够设置为8111、8112、8121、8122-->
<Connector port="8111" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
修改tomcat1下bin中startup.sh和shutdown.sh添加以下内容
export JAVA_HOME=/usr/local/java1.5.0_09
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib
export CATALINA_HOME=$CATALINA_HOME_1
export CATALINA_BASE=$CATALINA_BASE_1
修改tomcat2下conf中server.xml
<!--Server port="8005"需要修改,确保唯一性,能够设置为9011、9012、9021、9022-->
<Server port="9012" shutdown="SHUTDOWN">
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<!--Connector port="8080"需要修改,确保唯一性,能够设置为8011、8012、8021、8022-->
<Connector port="8012" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="0" disableUploadTimeout="true" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<!--Connector port="8009"需要修改,确保唯一性,能够设置为8111、8112、8121、8122-->
<Connector port="8112" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
修改tomcat2下bin中startup.sh和shutdown.sh添加以下内容
export JAVA_HOME=/usr/local/java1.5.0_09
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib
export CATALINA_HOME=$CATALINA_HOME_2
export CATALINA_BASE=$CATALINA_BASE_2
修改profile配置文件
vi /etc/profile 配置系统变量,打开后添加以下内容:
CATALINA_BASE_1=/usr/local/tomcat1
CATALINA_HOME_1=/usr/local/tomcat1
export CATALINA_BASE_1 CATALINA_HOME_1
TOMCAT_HOME_1=/usr/local/tomcat1
export TOMCAT_HOME_1
CATALINA_BASE_2=/usr/local/tomcat2
CATALINA_HOME_2=/usr/local/tomcat2
export CATALINA_BASE_2 CATALINA_HOME_2
TOMCAT_HOME_2=/usr/local/tomcat2
export TOMCAT_HOME_2
设置tomcat随系统开启
vi /etc/rc.d/rc.local 添加以下内容
/usr/local/tomcat1/bin/startup.sh
/usr/local/tomcat2/bin/startup.sh
保留退出,logout 注销一下
分别进入/usr/local/tomcat1/bin和/usr/local/tomcat2/bin目录实施./startup.sh
访问http://IP:8011/和http://IP:8012/看是否能够看到tomcat欢迎界面
Nginx配置
安装nginx,在安装nginx之前需要先安装所需pcre库
以nginx-0.7.60-linux及pcre-7.8为例,解压我们下载pcre-7.8.tar.gz
解压pcre
# tar zxvf pcre-7.8.tar.gz
# cd pcre-7.8
配置pcre
# ./configure
编译
# make
安装
# make install
安装完成。
# tar zxvf nginx-0.7.60-linux.tar.gz
# ./configure--user=www--group=www--prefix=/usr/local/nginx--with-http_stub_status_module--with-http_ssl_module
创建代理文件 vi /usr/local/nginx/conf/proxy.conf 输入以下内容
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 8k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
保留退出。
编辑nginx.conf文件 vi /usr/local/nginx/conf/nginx.conf 修改以下
#运行用户
#user nobody;
#启用进程
worker_processes 8;
#全局错误日志和pid
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
#工作模式及连接数上限
worker_rlimit_nofile 51200;
events {
worker_connections 51200;
}
#配置http已经反向代理做负载均衡
http {
include mime.types;
default_type application/octet-stream;
include proxy.conf;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_refere
展开阅读全文