实现负载均衡的方式有很多种,DNS、反向代理、LVS负载均衡器(软件实现)、F5(负载均衡器,硬件,非常昂贵)这里我们只提到基于DNS,以及反向代理的方式来实现负载均衡Web服务
** DNS服务器实现负载均衡的原理是基于轮询的方式实现的,直接由
DNS
解析系统进行随机分配。除了性能分配不均之外,还有更可怕的就是如果一台服务器
down
了,
DNS
服务器因为是基于轮询方式的负载均的,所以它并不能够探测到或者没有对付这种情况的动作,所以会继续向这台服务器分配流量,导致访问超时,给用户带来不便。并且基于DNS服务实现负载均衡web集群,需要3个公网IP,代价可想而知。现在IPv4的资源及其紧张,铺张浪费不是一个好的运维工程师,你懂得.
**
** 如果说使用
nginx
实现负载均衡的话**
如图所示:内网有三台
web server
(两台Apache,一台Nginx),管理员可以根据服务器的性能,设置
权重
,来分配服务器的使用几率
。如果某台服务器反回超时或者挂掉了,Nginx反向代理会基于max_fails这样的机制,使其不再把用户分配到那台服务器,这样比
DNS
服务器直接进行随机分配好的多。可靠性和利用率大大提高。你懂得.
** 并且基于nginx反向代理:只要有一个
IP
地址来绑定就可以实现
nginx
负载均衡,大大节省购买
IP
地址时的代价。当用户访问公司域名时,请求直接被发送到
Nginx Server
上,
Nginx Server
根据
weight
值和
fail_timeout
来进行合理分配服务器资源。注释:
**
更加人性化。
反向代理还经常被称为网关服务器,因为它能够防止了
公司内网Web server
直接暴露在外网的环境下,在一定程度上保证了
web server
的安全。
** NFS 全称:Network file system NFS由SUN公司开发,目前已经成为文件服务的一种标准。我们在这里,通过NFS实现存储.**
** NFS 跟PHP-FPM服务器为同一台都为(172.16.251.215)
**
**一、配置Nginx反向代理
**
1、创建用户和组
2、编译安装Nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 1# groupadd nginx
2# useradd -g nginx -s /bin/false -M nginx
3./configure \
4 --prefix=/usr \
5 --sbin-path=/usr/sbin/nginx \
6 --conf-path=/etc/nginx/nginx.conf \
7 --error-log-path=/var/log/nginx/error.log \
8 --http-log-path=/var/log/nginx/access.log \
9 --pid-path=/var/run/nginx/nginx.pid \
10 --lock-path=/var/lock/nginx.lock \
11 --user=nginx \
12 --group=nginx \
13 --with-http_ssl_module \
14 --with-http_flv_module \
15 --with-http_stub_status_module \
16 --with-http_gzip_static_module \
17 --http-client-body-temp-path=/var/tmp/nginx/client/ \
18 --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
19 --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
20 --with-pcre
21make && make install
22
3、提供Nginx服务脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 11 #!/bin/sh
2 2 #
3 3 # nginx - this script starts and stops the nginx daemon
4 4 #
5 5 # chkconfig: - 85 15
6 6 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \
7 7 # proxy and IMAP/POP3 proxy server
8 8 # processname: nginx
9 9 # config: /etc/nginx/nginx.conf
10 10 # config: /etc/sysconfig/nginx
11 11 # pidfile: /var/run/nginx.pid
12 12
13 13 # Source function library.
14 14 . /etc/rc.d/init.d/functions
15 15
16 16 # Source networking configuration.
17 17 . /etc/sysconfig/network
18 18
19 19 # Check that networking is up.
20 20 [ "$NETWORKING" = "no" ] && exit 0
21 21
22 22 nginx="/usr/sbin/nginx"
23 23 prog=$(basename $nginx)
24 24
25 25 NGINX_CONF_FILE="/etc/nginx/nginx.conf"
26 26
27 27 [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
28 28
29 29 lockfile=/var/lock/subsys/nginx
30 30
31 31 make_dirs() {
32 32 # make required directories
33 33 user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
34 34 options=`$nginx -V 2>&1 | grep 'configure arguments:'`
35 35 for opt in $options; do
36 36 if [ `echo $opt | grep '.*-temp-path'` ]; then
37 37 value=`echo $opt | cut -d "=" -f 2`
38 38 if [ ! -d "$value" ]; then
39 39 # echo "creating" $value
40 40 mkdir -p $value && chown -R $user $value
41 41 fi
42 42 fi
43 43 done
44 44 }
45 45
46 46 start() {
47 47 [ -x $nginx ] || exit 5
48 48 [ -f $NGINX_CONF_FILE ] || exit 6
49 49 make_dirs
50 50 echo -n $"Starting $prog: "
51 51 daemon $nginx -c $NGINX_CONF_FILE
52 52 retval=$?
53 53 echo
54 54 [ $retval -eq 0 ] && touch $lockfile
55 55 return $retval
56 56 }
57 57
58 58 stop() {
59 59 echo -n $"Stopping $prog: "
60 60 killproc $prog -QUIT
61 61 retval=$?
62 62 echo
63 63 [ $retval -eq 0 ] && rm -f $lockfile
64 64 return $retval
65 65 }
66 66
67 67 restart() {
68 68 configtest || return $?
69 69 stop
70 70 sleep 1
71 71 start
72 72 }
73 73
74 74 reload() {
75 75 configtest || return $?
76 76 echo -n $"Reloading $prog: "
77 77 killproc $nginx -HUP
78 78 RETVAL=$?
79 79 echo
80 80 }
81 81
82 82 force_reload() {
83 83 restart
84 84 }
85 85
86 86 configtest() {
87 87 $nginx -t -c $NGINX_CONF_FILE
88 88 }
89 89
90 90 rh_status() {
91 91 status $prog
92 92 }
93 93
94 94 rh_status_q() {
95 95 rh_status >/dev/null 2>&1
96 96 }
97 97
98 98 case "$1" in
99 99 start)
100100 rh_status_q && exit 0
101101 $1
102102 ;;
103103 stop)
104104 rh_status_q || exit 0
105105 $1
106106 ;;
107107 restart|configtest)
108108 $1
109109 ;;
110110 reload)
111111 rh_status_q || exit 7
112112 $1
113113 ;;
114114 force-reload)
115115 force_reload
116116 ;;
117117 status)
118118 rh_status
119119 ;;
120120 condrestart|try-restart)
121121 rh_status_q || exit 0
122122 ;;
123123 *)
124124 echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
125125 exit 2
126126 esac
127
4、配置Nginx实现反向代理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139 1#使用的用户和组
2#user nobody;
3#指定工作衍生进程数(一般等于CPU的总核数或者总和数)
4worker_processes 1;
5
6#指定错误日志存放的路径,错误日志记录级别可选项[debug|info|notice|warn|error|crit]
7#error_log logs/error.log;
8#error_log logs/error.log notice;
9#error_log logs/error.log info;
10
11#指定pid存放的路径
12#pid logs/nginx.pid;
13
14events {
15#默认使用的网络I/O模型,Linux系统推荐采用epoll模型,FreeBSD推荐采用kqueue模型
16#use epoll;
17 worker_connections 1024; #允许的连接数
18
19}
20
21
22http {
23 include mime.types;
24 default_type application/octet-stream;
25 #设置使用的字符集,如果一个网站多种字符集,请不要随便设置。
26 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
27 '$status $body_bytes_sent "$http_referer" '
28 '"$http_user_agent" "$http_x_forwarded_for"';
29#通过$remote_addr:可以获取Nginx反向代理服务器的IP地址
30#X-Forwarded-For:用以记录原有的客户端ip和原来客户端请求的服务器地址.
31#$remote_user:用于记录远程客户端用户名称
32#$time_local:用于记录访问时间与时区
33#$request:用于记录请求URL与http协议
34#$status:用于记录请求状态,列如成功状态为200,,页面找不到时状态404
35#$body_bytes_sent:用于记录发送客户端的文件主体内容的大小;
36#$http_referer:用于记录是从哪个页面链接访问过来的;
37#$http_usr_agent:用于记录客户端浏览器的相关信息.
38#采用日志格式combined记录的日志的格式是非常广泛和流行的
39access_log path [format [buffer=size | off]]
40 access_log logs/access.log main;
41 sendfile on;
42 #tcp_nopush on;
43 #keepalive_timeout 0;
44 keepalive_timeout 65;
45 #gzip on;
46 #proxy_cache_path /nginx/cache levels=1:2 keys_zone=mycache:16m
47# inactive=24h max_size=1g;
48 upstream backend
49 server 172.16.251.253 weight=1 max_fails=2 fail_timeout=30s;
50 server 172.16.251.244 weight=1 max_fails=2 fail_timeout=30s;
51 server 172.16.251.208 weight=1 max_fails=2 fail_timeout=30s;
52}
53#upstream:该指令用于设置可以再proxy_pass和fastcgi_pass指令中使用的代理服务器
54#weight:设置服务器的权重,权重数值越高,被分配到的客户端请求数越多.默认为1
55#max_fails:指定的时间内对后端服务器请求失败的次数,如果检测到后端服务器无法连接及发生服务器错误(404错误除外),则标记为失败.默认为1,设为数值0将关闭这项检测
56#fail_timeout:在经历参数max_fails设置的失败次数后,暂停的时间.
57#down:标记服务器为永久离线状态,用于ip_hash指令
58#backup:仅仅非在backup服务器全部繁忙的时候才会启用.
59 server {
60 listen 80;
61 server_name www.nginx.com 220.2.2.2;
62#server_name 绑定域名,以及IP地址
63 location / {
64 proxy_pass http://backend;
65 proxy_set_header host www.nginx.com;
66 #proxy_cache mycache;
67 #proxy_cache_valid 200 301 1d;
68 #proxy_cache_valid 404 1m;
69}
70#proxy_pass:指定后端被代理的服务器
71#proxy_connect_timeout:跟后端服务器连接的超时时间_发起握手等候响应超时时间
72#proxy_read_timeout:连接成功后_等待后端服务器响应时间_其实已经进入后端的排队之中等候处理。
73#proxy_send_timeout:后端服务器数据回传时间_就是规定时间内后端服务器必须传完所有的数据
74#proxy_buffer_size:代理请求缓存_这个缓存区间会保存用户的头部信息以供Nginx进行规则处理_一般只能保存下头信息即可
75#proxy_buffers:同上 告诉nginx保存单个用的几个buffer最大可用空间
76#proxy_busy_buffers_size:如果系统很忙的时候可以申请更大的Proxy_buffers
77#proxy_temp_file_write_size:缓存临时文件的大小;
78# location / {
79# root html;
80# index index.php index.html index.htm;
81# }
82 error_page 404 /404.html;
83 # redirect server error pages to the static page /50x.html
84 #
85 error_page 500 502 503 504 /50x.html;
86 location = /50x.html {
87 root html;
88 }
89 # proxy the PHP scripts to Apache listening on 127.0.0.1:80
90 #
91 #location ~ \.php$ {
92 # proxy_pass http://127.0.0.1;
93 #}
94 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
95 #
96 #location ~ \.php$ {
97 # root html;
98 # fastcgi_pass 172.16.251.215:9000;
99 # fastcgi_index index.php;
100 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
101 # include fastcgi_params;
102 #}
103 # deny access to .htaccess files, if Apache's document root
104 # concurs with nginx's one
105 #
106 #location ~ /\.ht {
107 # deny all;
108 #}
109 }
110 # another virtual host using mix of IP-, name-, and port-based configuration
111 #
112 #server {
113 # listen 8000;
114 # listen somename:8080;
115 # server_name somename alias another.alias;
116 # location / {
117 # root html;
118 # index index.html index.htm;
119 # }
120 #}
121 # HTTPS server
122 #
123 #server {
124 # listen 443;
125 # server_name localhost;
126 # ssl on;
127 # ssl_certificate cert.pem;
128 # ssl_certificate_key cert.key;
129 # ssl_session_timeout 5m;
130 # ssl_protocols SSLv2 SSLv3 TLSv1;
131 # ssl_ciphers HIGH:!aNULL:!MD5;
132 # ssl_prefer_server_ciphers on;
133 # location / {
134 # root html;
135 # index index.html index.htm;
136 # }
137 #}
138}
139
**二、安装web服务,编译安装Httpd Web Server:172.16.251.208
**
** Web Server: 172.16.251.244
**
**1、编译安装http2.4.9,依赖于更高版本的apr和apr-util。apr全称为apache portable runtime **
1
2
3
4
5 1#tar xf apr-1.5.0.tar.bz2
2#cd apr-1.5.0
3#./configure --prefix=/usr/local/apr
4#make && make install
5
**2、编译安装
apr-util-1.5.2 **
1
2
3
4
5 1#tar xf apr-util-1.5.2.tar.bz2
2#cd apr-util-1.5.2
3#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
4#make && make install
5
3、编译安装http2.4.9
1
2
3
4
5 11 # tar xf httpd-2.4.9.tar.bz2
22 # cd httpd-2.4.9
33 # ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=event
44 # make && make install
5
4、后续的配置:
1
2
3
4
5
6 11 #ln -sv /usr/local/apache/include/usr/include/httpd
22 #vim /etc/profile.d/httpd.sh
33 exportPATH=/usr/local/apache/bin:$PATH
44 #vim /etc/man.conf
55 #MANPATH /usr/local/apache/man
6
5、修改httpd的主配置文件,设置其Pid文件的路径 vim /etc/httpd24/httpd.conf
1
2 1PidFile "/var/run/httpd.pid"
2
6、补充:
(1)构建MPM为静态模块
在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。为了使用指定的MPM,请在执行configure脚本 时,使用参数 –with-mpm=NAME。NAME是指定的MPM名称。编译完成后,可以使用 ./httpd -l 来确定选择的MPM。 此命令会列出编译到服务器程序中的所有模块,包括 MPM。
(2)构建 MPM 为动态模块
在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。 构建 MPM 为动态模块允许通过修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。在执行configure脚本时,使用–enable-mpms-shared选项即可启用此特性。当给出的参数为all时,所有此平台支持的MPM模块都会被安装。还可以在参数中给出模块列表。默认MPM,可以自动选择或者在执行configure脚本时通过–with-mpm选项来指定,然后出现在生成的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM。
7、提供SysV服务脚本/etc/rc.d/init.d/httpd,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 11 #!/bin/bash
2 2 #
3 3 # httpd Startup script for the Apache HTTP Server
4 4 #
5 5 # chkconfig: - 85 15
6 6 # description: Apache is a World Wide Web server. It is used to serve \
7 7 # HTML files and CGI.
8 8 # processname: httpd
9 9 # config: /etc/httpd/conf/httpd.conf
1010 # config: /etc/sysconfig/httpd
1111 # pidfile: /var/run/httpd.pid
1212 # Source function library.
1313 . /etc/rc.d/init.d/functions
1414 if [ -f /etc/sysconfig/httpd ]; then
1515 . /etc/sysconfig/httpd
1616 fi
1717 # Start httpd in the C locale by default.
1818 HTTPD_LANG=${HTTPD_LANG-"C"}
1919 # This will prevent initlog from swallowing up a pass-phrase prompt if
2020 # mod_ssl needs a pass-phrase from the user.
2121 INITLOG_ARGS=""
2222 # Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
2323 # with the thread-based "worker" MPM; BE WARNED that some modules may not
2424 # work correctly with a thread-based MPM; notably PHP will refuse to start.
2525 # Path to the apachectl script, server binary, and short-form for messages.
2626 apachectl=/usr/local/apache/bin/apachectl
2727 httpd=${HTTPD-/usr/local/apache/bin/httpd}
2828 prog=httpd
2929 pidfile=${PIDFILE-/var/run/httpd.pid}
3030 lockfile=${LOCKFILE-/var/lock/subsys/httpd}
3131 RETVAL=0
3232 start() {
3333 echo -n $"Starting $prog: "
3434 LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
3535 RETVAL=$?
3636 echo
3737 [ $RETVAL = 0 ] && touch ${lockfile}
3838 return $RETVAL
3939 }
4040 stop() {
4141 echo -n $"Stopping $prog: "
4242 killproc -p ${pidfile} -d 10 $httpd
4343 RETVAL=$?
4444 echo
4545 [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
4646 }
4747 reload() {
4848 echo -n $"Reloading $prog: "
4949 if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
5050 RETVAL=$?
5151 echo $"not reloading due to configuration syntax error"
5252 failure $"not reloading $httpd due to configuration syntax error"
5353 else
5454 killproc -p ${pidfile} $httpd -HUP
5555 RETVAL=$?
5656 fi
5757 echo
5858 }
5959 # See how we were called.
6060 case "$1" in
6161 start)
6262 start
6363 ;;
6464 stop)
6565 stop
6666 ;;
6767 status)
6868 status -p ${pidfile} $httpd
6969 RETVAL=$?
7070 ;;
7171 restart)
7272 stop
7373 start
7474 ;;
7575 condrestart)
7676 if [ -f ${pidfile} ] ; then
7777 stop
7878 start
7979 fi
8080 ;;
8181 reload)
8282 reload
8383 ;;
8484 graceful|help|configtest|fullstatus)
8585 $apachectl $@
8686 RETVAL=$?
8787 ;;
8888 *)
8989 echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
9090 exit 1
9191 esac
9292 exit $RETVAL
93
8、而后为此脚本赋予执行权限:并且加入服务列表:
1
2
3 11 # chmod +x /etc/rc.d/init.d/httpd
22 # chkconfig --add httpd
3
9、配置Apache能够调用后端的PHP-FPM服务器(fastCIG服务器),因为默认编译安装的Httpd有许多模块都是被注释掉的,要启用之,去掉注释即可:并且在这里Apache是作为反向代理服务,代理PHP-FPM(fastCGI)服务器工作之.所以在这里需要启动代理模块
1
2
3
4
5
6 11 LoadModule proxy_module modules/mod_proxy.so
22 #LoadModule proxy_connect_module modules/mod_proxy_connect.so
33 #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
44 #LoadModule proxy_http_module modules/mod_proxy_http.so
55 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
6
10、根据标准配置我们还应该启用虚拟主机,在Httpd2.4.9中配置文件被拆分了多个子配置文件,在/etc/httpd24/extra/此目录下众多的配置文件都是httpd的,前面说到要想启用虚拟主机也要去掉注释,表示将虚拟主机的配置文件包含之,实现的方法都是如此
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 11 460 # User home directories
2 2 461 #Include /etc/httpd24/extra/httpd-userdir.conf
3 3 462
4 4 463 # Real-time info on requests and configuration
5 5 464 #Include /etc/httpd24/extra/httpd-info.conf
6 6 465
7 7 466 # Virtual hosts
8 8 467 Include /etc/httpd24/extra/httpd-vhosts.conf
9 9 468
1010 469 # Local access to the Apache HTTP Server Manual
1111 470 #Include /etc/httpd24/extra/httpd-manual.conf
1212 471
1313 472 # Distributed authoring and versioning (WebDAV)
1414 473 #Include /etc/httpd24/extra/httpd-dav.conf
1515 474
1616 475 # Various default settings
1717 476 #Include /etc/httpd24/extra/httpd-default.conf
1818 477
19
11、配置虚拟主机,在httpd2.4.9中虚拟主机需要配置控制才能够访问,默认是拒绝访问的.DocumentRoot:定义虚拟主机网站的根目录(这里的根目录是NFS通过网络共享存储)我们将其挂载到本地,以及后端PHP Server的ip地址,Apache现在的角色是反向代理PHP-FPM应用成服务器
1
2 1# vim /etc/httpd24/extra/httpd-vhosts.conf
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 11 # The first VirtualHost section is used for all requests that do not
2 2 # match a ServerName or ServerAlias in any <VirtualHost> block.
3 3 #
4 4 <VirtualHost *:80>
5 5 ServerAdmin Admin@aaa.com
6 6 DocumentRoot "/usr/html/"
7 7 ServerName www.aaa.com
8 8 Errorlog "logs/access.log"
9 9 CustomLog "logs/error.log" combined
1010 <Directory "/usr/html/">
1111 Options None
1212 Require all granted
1313 </Directory>
1414 ProxyRequests Off
1515 ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.251.215:9000/usr/html/$1
1616 </VirtualHost>
17
这里我们已经将其挂载之(NFS共享存储的文件系统),使用mount命令可查看之;
1
2
3
4
5 11 #mount -t nfs ServerIP:/ShareDirectory /LocalDirectory
22 #mount -t nfs 172.16.251.215/usr/html /usr/html
33 #mount
44 #172.16.251.215:/usr/html on /usr/html type nfs (rw,vers=4,addr=172.16.251.215
5
另外一台web服务器配置如上
**三、安装mysql DB MysqlDB Server 172.16.251.243
**
1、准备数据存放的文件系统,新建一个逻 辑卷,并将其挂载至特定目录即可。这里不再给出过程。(实际生产环境下都是如此)这里假设其逻辑卷的挂载目录为/mydata
2、新建用户以安全方式运行进程:
1
2
3
4 1# groupadd -r mysql
2# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
3# chown -R mysql:mysql /mydata/data
4
3、安装mysql DB-5.5.33
1
2
3
4
5 11 # tar xf mysql-5.5.33-linux2.6-i686.tar.gz -C /usr/local
22 # cd /usr/local/
33 # ln -sv mysql-5.5.33-linux2.6-i686 mysql
44 # cd mysql
5
1
2
3
4 1# chown -R mysql:mysql .
2# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
3# chown -R root .
4
4、为mysql提供主配置文件:
1
2
3 1# cd /usr/local/mysql
2# cp support-files/my-large.cnf /etc/my.cnf
3
并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行,另外还需要添加如下行指定mysql数据文件的存放位置:
1
2
3 11 #thread_concurrency = 2
22 #datadir = /mydata
3
5、为mysql提供sysv服务脚本:
1
2
3
4 1# cd /usr/local/mysql
2# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
3# chmod +x /etc/rc.d/init.d/mysqld
4
**6、添加至服务列表: **
1
2
3 1# chkconfig --add mysqld
2# chkconfig mysqld on
3
为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:
7、输出mysql的man手册至man命令的查找路径: 编辑/etc/man.config,添加如下行即可:
1
2 11 MANPATH /usr/local/mysql/man
2
8、输出mysql的头文件至系统头文件路径/usr/include:这可以通过简单的创建链接实现
1
2 11 # ln -sv /usr/local/mysql/include /usr/include/mysql
2
9、修改PATH环境变量,让系统可以直接使用mysql的相关命令。
1
2
3
4
5 11 # vim /etc/profile.d/mysql.sh
22 # export PATH=/usr/local/mysql/bin:$PATH
33 # . /etc/profile.d/mysql.sh
44 # echo $PATH
5
(PHP-FPM)Application Server IP:172.16.251.215 NFS Server IP:172.16.251.215
四、编译安装php-5.4.26
1
2
3 11 # yum -y groupinstall "Desktop Platform Development"
22 # yum -y install bzip2-devel libmcrypt-devel
3
如果想让编译的php支持mcrypt、mhash扩展和libevent
另外,也可以根据需要安装libevent,系统一般会自带libevent,但版本有些低。因此可以编译安装之
说明:libevent是一个异步事件通知库文件,其API提供了在某文件描述上发生某事件时或其超时时执行回调函数的机制,它主要用来替换事件驱动的网络服务器上的event loop机制。目前来说, libevent支持/dev/poll、kqueue、select、poll、epoll及Solaris的event ports。
1、
libevent
1
2
3
4
5
6 11 # tar zxvf libevent-1.4.14b-stable.tar.gz
22 # cd libevent-1.4.14b-stable
33 # ./configure
44 # make && make install
55 # make verify
6
2、
libiconv
1
2
3
4
5 11 # tar zxvf libiconv-1.13.1.tar.gz
22 # cd libiconv-1.13.1
33 # ./configure
44 # make && make install
5
3、
libmcrypt
1
2
3
4
5
6
7
8
9 11 # tar zxvf libmcrypt-2.5.8.tar.gz
22 # cd libmcrypt-2.5.8
33 # ./configure
44 # make && make install
55 # ldconfig -v
66 # cd libltdl
77 # ./configure --with-gmetad --enable-gexec
88 # make && make install
9
4、
mhash
1
2
3
4
5
6
7 11 # tar jxvf mhash-0.9.9.9.tar.bz2
22 # cd mhash-0.9.9.9
33 # ./configure
44 # make && make install
55 # ln -sv /usr/local/lib/libmcrypt* /usr/lib/
66 # ln -sv /usr/local/lib/libmhash.* /usr/lib/
7
5、编译安装php5.4.26;
1
2
3
4
5
6
7 1# tar xf php-5.4.4.tar.bz2
2# cd php-5.4.4
3# ./configure --prefix=/usr/local/php --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-curl
4# make
5# make test
6# make intall
7
说明:如果前面第1步解决依赖关系时安装mcrypt相关的两个rpm包,此./configure命令还可以带上–with-mcrypt选项以让php支持mycrpt扩展。–with-snmp选项则用于实现php的SNMP扩展,但此功能要求提前安装net-snmp相关软件包
为php提供配置文件:
1
2 11 cp php.ini-production /etc/php.ini
2
为php-fpm提供Sysv init脚本,并将其添加至服务列表:
1
2
3
4
5 11 # cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
22 # chmod +x /etc/rc.d/init.d/php-fpm
33 # chkconfig --add php-fpm
44 # chkconfig php-fpm on
5
编辑php-fpm的配置文件:
1
2 11 # vim /usr/local/php/etc/php-fpm.conf
2
配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):注释:因为php-fpm默认只监听127.10.0.1:9000上;
1
2
3
4
5
6
7 11 pm.max_children = 150
22 pm.start_servers = 8
33 pm.min_spare_servers = 5
44 pm.max_spare_servers = 10
55 pid = /usr/local/php/var/run/php-fpm.pid
66 listen = 0.0.0.0:9000
7
接下来就可以启动php-fpm了:
1
2 1# service php-fpm start
2
使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):
1
2 11 # ps aux | grep php-fpm
2
默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验正其是否已经监听在相应的套接字。
1
2
3 11 # netstat -tnlp | grep php-fpm
22 tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 689/php-fpm
3
五、NFS服务在Centos或者redhat系列发行版linux中默认已安装过啦!这里我们只要修改配置文件启用之就行啦!
1
2
3 11 # vim /etc/exports
22 #/usr/html 172.16.0.0/16(rw,no_root_squash)
3
六 、整合nginx和php5 ,因为在公司内部还有一台Nginx的webSercer
1、编辑/etc/nginx/nginx.conf,启用如下选项:
1
2
3
4
5
6
7
8 1location ~ \.php$ {
2root html;
3fastcgi_pass 127.0.0.1:9000;
4fastcgi_index index.php;
5fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
6include fastcgi_params;
7}
8
2、编辑/etc/nginx/fastcgi_params,将其内容更改为如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 11 fastcgi_param GATEWAY_INTERFACE CGI/1.1;
2 2 fastcgi_param SERVER_SOFTWARE nginx;
3 3 fastcgi_param QUERY_STRING $query_string;
4 4 fastcgi_param REQUEST_METHOD $request_method;
5 5 fastcgi_param CONTENT_TYPE $content_type;
6 6 fastcgi_param CONTENT_LENGTH $content_length;
7 7 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
8 8 fastcgi_param SCRIPT_NAME $fastcgi_script_name;
9 9 fastcgi_param REQUEST_URI $request_uri;
1010 fastcgi_param DOCUMENT_URI $document_uri;
1111 fastcgi_param DOCUMENT_ROOT $document_root;
1212 fastcgi_param SERVER_PROTOCOL $server_protocol;
1313 fastcgi_param REMOTE_ADDR $remote_addr;
1414 fastcgi_param REMOTE_PORT $remote_port;
1515 fastcgi_param SERVER_ADDR $server_addr;
1616 fastcgi_param SERVER_PORT $server_port;
1717 fastcgi_param SERVER_NAME $server_name;
18
并在所支持的主页面格式中添加php格式的主页,类似如下:
1
2
3
4
5 11 location / {
22 root html;
33 index index.php index.html index.htm;
44 }
5
而后重新载入nginx的配置文件:
1
2 11 # service nginx reload
2
4、在/usr/html新建index.php的测试页面,测试php是否能正常工作:
1
2
3
4
5 11 # cat > /usr/html/index.php << EOF
22 <?php
33 phpinfo();
44 ?>
5
七、安装xcache,为php加速:
1、安装
1
2
3
4
5
6 11 # tar xf xcache-2.0.0.tar.gz
22 # cd xcache-2.0.0
33 # /usr/local/php/bin/phpize
44 # ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
55 # make && make install
6
安装结束时,会出现类似如下行:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/
2、编辑php.ini,整合php和xcache:
首先将xcache提供的样例配置导入php.ini
1
2
3 11 # mkdir /etc/php.d
22 # cp xcache.ini /etc/php.d
3
注意:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。
3、重新启动php-fpm
1
2 11 # service php-fpm restart
2
八、搭建论坛
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 11、安装wordpress
2#Unzip wordpress-3.0.5-zh_CN.zip
3# mv wordpress /www/htdoc2/mybbs
4# cp wp-config-sample.php wp-config.php
5#chmod a+x wp-config.php
6# vim wp-config.php
7# mysql -uroot -pzhangxiaocen –hlocalhost
8mysql> create database wpdb
918 define('DB_NAME', 'wpdb');
10
1121 define('DB_USER', 'root');
12
1324 define('DB_PASSWORD', 'zhangxiaocen');
1427 define('DB_HOST', 'localhost');
15
1630 define('DB_CHARSET', 'utf8');
17
1
2
3
4
5
6
7 12、 安装Discuz_X2.5_SC_GBK
2# unzip Discuz_X2.5_SC_GBK.zip
3# mv upload /www/htdoc3/bbs
4# chown -R daemon:daemon ./*
5#mysql>create database discuz;
6#grant all on discuz.* to discuz@'172.16.251.243' identified by 'zhangxiaocen';
7
通过网页登上论坛发表帖子,并通过其他web服务器登录,查看帖子!这里就不再演示。负载均衡的话,写上三个不同的网页页面测试之.
9、基于DNS实现负载均衡
1
2 11 # yum -y install bind
2
1
2
3
4
5
6
7
8
9
10
11
12
13 1$TTL 664
2@ IN SOA DNS.nginx.com. admin.nginx.com. (
3 0 ; serial
4 1D ; refresh
5 1H ; retry
6 1W ; expire
7 3H ) ; minimum
8 IN NS DNS.nginx.com.
9DNS IN A 172.16.251.198
10www IN A 172.16.251.253
11www IN A 172.16.251.244
12www IN A 172.16.251.208
13