说明: Nginx主服务器,Nginx备服务器,(keepalived心跳检测进行宕机切换)
安装phpstudy服务器三天台(或者多台),由Nginx进行反向代理和负载均衡,此处可以搭建服务器集群(多个应用集群)
redis服务器,用于多台应用服务器的Session的分离共享
参数配置:
虚拟ip/vip:192.168.0.88
Nginx主服务器 Nginx_Master (IP : 192.168.0.11)
Nginx备服务器 Nginx_Backup (IP : 192.168.0.12)
phpstudy应用服务器 WebServer1 (IP : 192.168.0.142:8027)
phpstudy应用服务器 WebServer2 (IP : 192.168.0.143:8028)
phpstudy应用服务器 WebServer2 (IP : 192.168.0.144:8029)
Redis服务器 Redis_Server (IP : 192.168.0.140)
Mysql服务器 Mysql_Server (IP : 192.168.0.141) (这个可以不用搭建,也可以自己尝试去搭建,或者搭建主从备份数据库)
(这里我为什么要装phpstudy呢?因为我们需要检测Session,必须要安装配置Nginx或者Apache及PHP,我这里是为了快速配置方便,不用花太多时间去研究应用服务器怎么搭建)
注意访问时需要配置防火墙规则,或者关闭防火墙
大致规划图如下
2、下载Nginx源码包
可以到Nginx官网下载:Nginx官网
[或者]
[root@localhost src]# wget http://nginx.org/download/nginx-1.13.2.tar.gz [root@localhost src]# tar -zxvf nginx-1.13.2.tar.gz [root@localhost src]# cd nginx-1.13.2 [root@localhost src]# ./configure --prefix=/usr/local/mysoftware/nginx [root@localhost src]# make && make install [root@localhost src]# cp /usr/local/mysoftware/nginx/sbin/nginx /usr/bin/nginx 3、开启Nginx [root@localhost src]# cd /usr/local/mysoftware/nginx/sbin # 启动nginx [root@localhost sbin]# nginx # 停止nginx [root@localhost sbin]# nginx -s stop # 重新启动 [root@localhost sbin]# nginx -s reload # 可通过ps -ef | grep nginx查看nginx是否已启动成功 [root@localhost sbin]# ps -ef|grep nginx root 19128 1 0 14:49 ? 00:00:00 nginx: master process ./nginx nobody 19129 19128 0 14:49 ? 00:00:00 nginx: worker process nobody 19130 19128 0 14:49 ? 00:00:00 nginx: worker process root 19312 106791 0 16:00 pts/0 00:00:00 grep nginx4、配置Nginx开机启动
把/usr/bin/nginx命令添加到/etc/rc.d/rc.local文件中,rc.local文件会在系统启动的时候执行。 但是centos7建议将开机启动服务写成服务描述文件添加到系统服务中,所以rc.local默认是没有执行权限,这里需要给它添加执行权限。
[root@localhost ~]# vim /etc/rc.d/rc.local # 添加以下参数 /usr/bin/nginx [root@localhost ~]# chmod +x /etc/rc.d/rc.local #给执行权限 5、配置Nginx #Nginx用户和属组 #user nginx nginx; #工作进程:数目根据硬件调整,通常等于CPU数量或者2倍于CPU worker_processes 2; #错误日志存放路径 #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log info; #指定pid存放文件(进程标识符):存放路径。 pid logs/nginx.pid; events { #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue window下不指定 use epoll; #允许最大连接数 worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #定义日志格式 #log_format main '$remote_addr - $remote_user [$time_local] $request ' # '"$status" $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log off; access_log logs/access.log; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; client_header_buffer_size 1k; large_client_header_buffers 4 4k; sendfile on; tcp_nopush on; tcp_nodelay on; #fastcgi_intercept_errors on; error_page 404 /404.html; #keepalive_timeout 75 20; gzip on; gzip_min_length 1000; gzip_types text/plain text/css application/x-javascript; #配置被代理的服务器 upstream blank { server 192.168.0.142:8027; server 192.168.0.143:8028; server 192.168.0.144:8029; } server { #nginx监听80端口,请求该端口时转发到真实目标 listen 80; #配置访问域名 server_name localhost; location / { #这里配置代理是指上面定义的三个被代理目标,blank名字必须一致, #设置被代理服务器的端口或套接字,以及URL proxy_pass http://blank; #proxy_redirect off; #如果是非80端口,配置为Host $host:端口号,目的是将代理服务器收到的 #用户的信息传到真实服务器上,以下三行,目的是将代理服务器收到的用户的信息传到真实服务器上 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #设定通过nginx上传文件的大小 client_max_body_size 10m; #如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器, #来提交任意小于256k的图片,都很正常。如果注释该指令,使用默认的client_body_buffer_size设置, #也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。 #无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片, #都返回500 Internal Server Error错误 client_body_buffer_size 128k; #后端服务器连接的超时时间_发起握手等候响应超时时间 proxy_connect_timeout 300; #后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据 proxy_send_timeout 300; #连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理 #(也可以说是后端服务器处理请求的时间) proxy_read_timeout 300; #设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头, #默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小 proxy_buffer_size 4k; #设置用于读取应答(来自被代理服务器)的缓冲区数目和大小, #默认情况也为分页大小,根据操作系统的不同可能是4k或者8k proxy_buffers 4 32k; #设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长 proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; add_header Access-Control-Allow-Origin *; } #这里定义500 502 503 504的错误页面 error_page 500 502 503 504 /50x.html; #错误页面位置 location = /50x.html { #root表示路径 html为nginx安装目录中的html文件夹 #位于/usr/local/mysoftware/nginx/html/下 root html; } } }可以参考更详细的Nginx配置:http://blog.csdn.net/tjcyjd/article/details/50695922
6、安裝keepalived 下载keepalived下载 下载popt-static-1.13-7.el6.x86_64.rpm下载 [root@localhost ~]# yum -y install openssl-devel popt-devel [root@localhost ~]# yum -y install popt-static-1.13-7.el6.x86_64.rpm [root@localhost ~]# yum -y install kernel-devel make gcc openssl-devel libnl* popt* [root@localhost ~]# cd /usr/src [root@localhost src]# ln -s /usr/src/kernels/2.6.32-696.3.1.el6.x86_64/ /usr/src/linux [root@localhost src]# ll 总用量 8 drwxr-xr-x. 2 root root 4096 9月 23 2011 debug drwxr-xr-x. 4 root root 4096 1月 24 20:49 kernels lrwxrwxrwx 1 root root 43 7月 4 10:47 linux -> /usr/src/kernels/2.6.32-696.3.1.el6.x86_64/#这里就有了,换上你自己的内核版本 #####这里说明一下kernels目录下的是内核版本 ##查看自己的内核版本 [root@localhost src]# ls /usr/src/kernels/ 2.6.32-696.3.1.el6.x86_64 ##内核版本 ########## [root@localhost ~]# tar -zxvf keepalived-1.2.7.tar.gz [root@localhost ~]# cd keepalived-1.2.7 [root@localhost keepalived-1.2.7]#./configure --with-kernel-dir=/usr/src/kernels/2.6.32-696.3.1.el6.x86_64/ [root@localhost keepalived-1.2.7]# make && make install进行最后的设定
[root@localhost keepalived-1.2.7]# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived [root@localhost keepalived-1.2.7]# cp /usr/local/keeplived/etc/sysconfig/keepalived /etc/sysconfig/ [root@localhost keepalived-1.2.7]# cp /usr/local/keeplived/etc/rc.d/init.d/keepalived /etc/init.d/ [root@localhost keepalived-1.2.7]# chmod 755 /etc/init.d/keepalived [root@localhost keepalived-1.2.7]# mkdir /etc/keepalived [root@localhost keepalived-1.2.7]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf ##开机自启 [root@localhost keepalived-1.2.7]# chkconfig --add keepalived [root@localhost keepalived-1.2.7]# chkconfig --level 35 keepalived on 7、配置Keepalived ! Configuration File for keepalived #全局的配置 global_defs { #指定keepalived在发生切换时需要发送邮件(email)到的对象 notification_email { root@localhost } #指定发件人 notification_email_from lyrcmd@163.com ##指定smtp服务器地址 #smtp_server 127.0.0.1 ##指定smtp连接超时时间 #smtp_connect_timeout 30 ##运行keepalived机器的一个标识 router_id LVS_DEVEL } #主备配置 vrrp_instance VI_1 { ##标示状态为MASTER 备份机为BACKUP state MASTER ##设置指定keepalived实例绑定的服务器的网卡 interface eth0 ##在同一实例下“即同一组主备机下”必须相同,主和备都要用同一个id virtual_router_id 51 ##数字越大权重越大,Master主服务器的权重一定要高于Backup备服务器,Master为100则Backup最大为99 priority 100 ##Master与Backup负载均衡器之间同步检查的时间间隔,单位是秒 advert_int 1 ##设置认证 authentication { ##主从服务器验证方式,PASS为明文密码验证 auth_type PASS ##密码 auth_pass 1111 } ##设置虚拟IP/vip,与我们的主备机在同一网段下,可以设置多个,多个要换行 virtual_ipaddress { 192.168.0.100 } }重启keepalived测试虚拟ip是否成功配置
[root@localhost ~]# service keepalived restart [root@localhost ~]# ip add搭建方法其实和主服务器一样,不同的是keepalived配置文件,我这里就把主服务器克隆出来
keepalived的配置
! Configuration File for keepalived #全局的配置 global_defs { #指定keepalived在发生切换时需要发送邮件(email)到的对象 notification_email { root@localhost } #指定发件人 notification_email_from lyrcmd@163.com ##指定smtp服务器地址 #smtp_server 127.0.0.1 ##指定smtp连接超时时间 #smtp_connect_timeout 30 ##运行keepalived机器的唯一个标识 router_id LVS_DEVEL } ##主备配置 vrrp_instance VI_1 { ##备机为BACKUP state BACKUP ##注意--备机网卡标识,一般都是eth0,先查询一下 interface eth1 #virtual_router_id必须与主机相同 virtual_router_id 51 #权重,备服务器必须比主服务器小 priority 99 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒,设置为1秒 advert_int 1 #认证,与主机一致 authentication { auth_type PASS auth_pass 1111 } #虚拟IP,必须和主服务器一致 virtual_ipaddress { 192.168.0.100 } }同样是先搭建一台,再利用克隆的方式克隆多几台,这里我为了快速方便测试,就装个phpstudy,你们也可以用其他方式搭建都可以,但是必须配上redis就可以。
一般安装在根目录的
[root@localhost ~]# phpstudy start|stop|restart 开启 | 停止 | 重启打开MySQL控制台
[root@localhost ~]# /phpstudy/mysql/bin/mysql -uroot -proot 或者把他复制到/usr/sbin/mysql这样就可以直接打开mysql控制台,不用到目录mysql里面打开。 [root@localhost ~]# cp /phpstudy/mysql/bin/mysql /usr/sbin/mysql [root@localhost ~]# mysql -uroot -p密码 ##直接打开解决办法
[root@localhost ~]# vim /phpstudy/server/php/etc/php.ini ##修改php配置文件 ##在配置文件里面找下面两条,补全等号后面的信息 pdo_mysql.default_socket=/phpstudy/data/mysql.sock mysql.default_socket=/phpstudy/data/mysql.sock 重启ok-----可以了下载phpredis下载 下载autoconf-2.62.tar.gz下载
3.1、进入phpredis源码目录并执行php的bin目录下的一个工具叫 phpize [root@localhost src]# tar -zxvf phpredis.tar.gz [root@localhost src]# cd phpredis [root@localhost phpredis]# /phpstudy/server/php/bin/phpize #这个命令一定要在解压后的phpredis里面执行 Configuring for: PHP Api Version: 20121113 Zend Module Api No: 20121212 Zend Extension Api No: 220121212 3.2、安装autoconf [root@localhost src]# tar zxvf autoconf-2.62.tar.gz [root@localhost src]# cd autoconf-2.62 [root@localhost autoconf-2.62]# ./configure && make && make install 3.3、编译安装phpredis并配置 [root@localhost src]# cd phpredis [root@localhost phpredis]# ./configure --prefix=/usr/local/mysoftware/redis --with-php-config=/phpstudy/server/php/bin/php-config [root@localhost phpredis]## make && make install ##成功后会有一个提示你,redis扩展在那里 Installing shared extensions: /phpstudy/server/php/lib/php/extensions/no-debug-non-zts-20121212 ##此时redis.so扩展已经有了,需要去php配置文件那里把redis配置上去 [root@localhost no-debug-non-zts-20121212]# ls opcache.so redis.so 3.5、修改php配置文件 php.ini添加redis扩展 [root@localhost ~]# vim /phpstudy/server/php/etc/php.ini添加如图所示
3.6、重启phpstudy [root@localhost ~]# phpstudy restart 3.7、查看php是否引入redis扩展redis服务,解决session共存,其实是把要存的session值改成存redis
下载redis-2.6.14.tar.gz下载
[root@localhost ~]# tar zxvf redis-2.6.14.tar.gz [root@localhost ~]# cd redis-2.6.14 [root@localhost redis-2.6.14]# make PREFIX=/usr/local/mysoftware/redis install [root@localhost src]# cd src ##看到下图 [root@localhost redis-2.6.14]# cp redis.conf /usr/local/mysoftware/redis/ ##启动redis [root@localhost redis]# ./bin/redis-server ./redis.conf ##关闭redis [root@localhost redis]# ./bin/redis-cli shutdown这种启动方式是前端启动,必须保持在当前窗口,如果 退出了redis也就退出了,要改为后端启动: 首先修改redis.conf中daemonize的值
打开redis的配置文件修改如下图,吧daemonize改为yes 重启redis ok
Web1复制设置值,其他两台复制读取值。
Web2和Web3
192.168.0.100
以上是轮询的结构
我这里测试了,没有问题!你们也动手玩玩