一、准备相关资源并规划
说明:
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,我这里是为了快速配置方便,不用花太多时间去研究应用服务器怎么搭建)
注意访问时需要配置防火墙规则,或者关闭防火墙
大致规划图如下
二、搭建主服务器(反向代理 Nginx_Master)
- 1、安装gcc和安装Nginx需要的依赖包
[root@localhost home]# yum install -y gcc
[root@localhost home]# yum install -y pcre pcre-devel
[root@localhost home]# yum install -y zlib zlib-devel
[root@localhost home]# yum install -y openssl openssl-devel
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 nginx
4、配置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
[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
*如果出现一下问题
checking for nl_socket_modify_cb in -lnl... yes
checking libnfnetlink/libnfnetlink.h usability... no
checking libnfnetlink/libnfnetlink.h presence... no
checking for libnfnetlink/libnfnetlink.h... no
configure: error:
!!! Please install libnfnetlink headers.
*解决办法
##安装这个后,再重新编译安装keepalived!
[root@localhost keepalived-1.2.7]# yum install -y libnfnetlink-devel
进行最后的设定
[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
如下图所示配置成功
三、搭建备服务器(反向代理 Nginx_Backup)
搭建方法其实和主服务器一样,不同的是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
}
}
四、搭建Web_Sever服务器(三台)
同样是先搭建一台,再利用克隆的方式克隆多几台,这里我为了快速方便测试,就装个phpstudy,你们也可以用其他方式搭建都可以,但是必须配上redis就可以。
1、下载phpStudy
[root@localhost home]# wget http://lamp.phpstudy.net/phpstudy-all.bin
[root@localhost home]# chmod +x ./phpstudy-all.bin ##给权限
[root@localhost home]# ./phpstudy-all.bin
###解压中————————解压完成根据提示完成操作
###等待编译----这个时候你可以去喝杯茶---等个十来分钟(看电脑性能)有的快有的慢
2、操作phpStudy
一般安装在根目录的
[root@localhost ~]# phpstudy start|stop|restart 开启 | 停止 | 重启
配置文件地址
apache配置文件 /phpstudy/server/httpd/conf/httpd.conf
PHP配置文件 /phpstudy/server/php/etc/php.ini
打开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密码 ##直接打开
问题,php可能连接不了mysql
解决办法
[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-----可以了
3、安装php_redis扩展
下载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服务器
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
在浏览器访问设置的vip
192.168.0.100
以上是轮询的结构
把主服务器断了,测试一下keepalived心跳是否正常
我这里测试了,没有问题!你们也动手玩玩