LVS负载均衡+keepalived高可用+Nginx反向代理+Session共存

xiaoxiao2021-02-28  48

一、准备相关资源并规划

说明: 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

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 923 2011 debug drwxr-xr-x. 4 root root 4096 124 20:49 kernels lrwxrwxrwx 1 root root 43 74 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心跳是否正常

我这里测试了,没有问题!你们也动手玩玩

以上内容仅供学习,有什么错误,或者不对的,请多多指教!大家共同进步,共同学习!谢谢

转载请注明原文地址: https://www.6miu.com/read-1000321.html

最新回复(0)