目录
1、在VM上创建一台服务器,然后进行克隆,配置同网段的IP进行下面操作,上面这个IP是我这边的配置情况,这个根据实际情况来定就可以,只要可以互相通信就没多大问题,然后使用Xshell连接工具进行登录
(4)允许用户远程登录数据库服务。通过设置,配置数据库的登录密码为“1”
(5)授权远程计算机可以访问数据库可以登录数据服务还是不够的,需要授权其他计算机可以访问数据服务中的数据库,授权方法如下
1、安装Apache和PHP、php-mysql、php-gd服务
2、挂载192.168.100.40(data主机节点)的/dedecms目录到/var/www/html下
(2)关闭SElinux,关闭防火墙,启动服务,挂载NFS服务目录
2、以server.key为私钥,生成自签证书server.crt
1、分别在nginx和nginx1两台服务器上安装keepalived服务
搭建动态Web集群应用
扩容当前的单机Web应用,构建应用集群,用户访问前端Nginx负载均衡器,然后由负载均衡器发送请求到各Web应用上,实现高负载、高并发和高可用。
任务内容:
(1)单独部署NFS和MariaDB数据库
(2)配置Nginx实现负载均衡
(3)配置Nginx实现https访问
一、单独部署数据库MariaDB服务
两台Web服务器的程序文件和数据库文件要一致。如果程序文件不一致,那么用户访问时会出现访问Web界面不一致的问题,用户上传文件到一个Web服务器,但在另一台服务器上看不到,另外,修改Web程序时,只需修改一处即可。同时,两个Web服务器使用的数据库应该是完全一致的,否则在第一台服务器上注册,会发现在第二台服务器上无法登录。
本次部署Web集群架构,需要4台服务器,1、Nginx服务器,2、第一台Web服务器部署Apache与PHP服务,3、第二台Web服务器同样部署Apache与PHP服务,4、NFS服务器以提高Web程序文件的挂载服务,同时提供MariaDB数据库服务为两台Web服务器提供数据库服务。
1、在VM上创建一台服务器,然后进行克隆,配置同网段的IP进行下面操作,上面这个IP是我这边的配置情况,这个根据实际情况来定就可以,只要可以互相通信就没多大问题,然后使用Xshell连接工具进行登录
#安装上表分别对每个服务器的名称进行修改,修改命令如下
hostnamectl set-hostname data
#其他三台使用相同命令,也进行名称修改
#修改后重新登录(Ctrl+D),就可以看到修改的服务器名称了
修改服务器名称的目的只是为了辨别服务器,没有实际的功能。
2、在data服务器上安装MariaDB数据库服务
(1)配置yum源安装服务
#这边可以挂载centos镜像,然后去配置本地yum源文件
这边具体的配置本地yum源的方式就不展示了
#或者直接拉取网络源这样比较方便
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
四台服务器直接输入上面的命令即可
(2)安装MariaDB客户端和服务端
[root@data ~]# yum install mariadb mariadb-server -y
(3)初始化数据库
[root@data ~]# systemctl start mariadb
[root@data ~]# mysql_secure_installation
(4)允许用户远程登录数据库服务。通过设置,配置数据库的登录密码为“1”
#特别需要注意的是,这里一定要选择n,选择n就是不拒绝root用户的远程登录,这样才可以在其他计算机上登录该数据库服务。
Disallow root login remotely? [Y/n] n
... skipping.
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
(5)授权远程计算机可以访问数据库可以登录数据服务还是不够的,需要授权其他计算机可以访问数据服务中的数据库,授权方法如下
[root@data ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '1';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
[root@data ~]#
#使用mysql -uroot -p登录时,输入初始化时设置的数据库密码“1”,然后进入数据库。之后使用“GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '1';”
授权,其中“GRANT ALL PRIVILEGES”是授权的意思,“ON *.* TO 'root'”就是所有的数据库和表给root用户,“@'%' IDENTIFIED BY '1'”表示在任意的主机上使用密码“1”登录,
%代表任何主机,如果使用localhost则只能在本机使用。
二、单独部署NFS服务
在data服务器上需要安装NFS服务,把源程序放到NFS服务器上,这样Web1和Web2这两个NFS的客户端通过挂载就可以同时使用源程序文件了
1、安装NFS
[root@data ~]# yum install -y nfs-utils -y
2、启动NFS和RPC服务,设置开机自启,关闭防火墙
[root@data ~]# systemctl start rpcbind
[root@data ~]# systemctl enable rpcbind
[root@data ~]# systemctl start nfs
[root@data ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@data ~]# systemctl stop firewalld
3、上传文件到共享目录
在根目录下建立目录dedecms,然后将织梦程序文件上传到这个目录中
[root@data ~]# mkdir /dedecms
[root@data ~]# cd /dedecms/
[root@data dedecms]# ls
DedeCMS-V5.7.111-UTF8.zip
#安装解压工具
[root@data dedecms]# yum install unzip -y
#解压
[root@data dedecms]# unzip DedeCMS-V5.7.111-UTF8.zip
[root@data dedecms]# ls
DedeCMS-V5.7.111-UTF8.zip docs uploads
[root@data dedecms]# cd uploads/
[root@data uploads]# ls
a assets data dede favicon.ico images include index.php install license.txt m member plus robots.txt special tags.php templets uploads
[root@data uploads]# cp -r * /dedecms/
#这里需要把uploads里的所有文件复制到/dedecms/目录下,这样/dedecms目录就包括所有程序了,复制之后可以删除压缩包和解压后的文件夹
[root@data uploads]# cd /dedecms/
[root@data dedecms]# ls
a data DedeCMS-V5.7.111-UTF8.zip favicon.ico include install m plus special templets
assets dede docs images index.php license.txt member robots.txt tags.php uploads
[root@data dedecms]# rm -rf DedeCMS-V5.7.111-UTF8.zip docs
[root@data dedecms]# ls
a assets data dede favicon.ico images include index.php install license.txt m member plus robots.txt special tags.php templets uploads
[root@data dedecms]#
4、配置共享文件目录
[root@data dedecms]# vi /etc/exports
/dedecms/ 192.168.100.0/24(rw,no_root_squash)
#将/dedecms目录共享,允许192.168.100.0/24网络可读可写可访问,然后使用“exportfs -r”命令使配置生效
[root@data dedecms]# exportfs -r
5、重启服务,验证配置效果
#配置完成后需要重启服务,再查看配置信息
[root@data dedecms]# showmount -e 192.168.100.40
Export list for 192.168.100.40:
/dedecms 192.168.100.0/24
三、部署两台动态Web服务
Web1和Web2两台动态Web服务器搭建方法是一样的,这里我以Web1为例讲解搭建过程
1、安装Apache和PHP、php-mysql、php-gd服务
安装Apache和PHP服务,以及程序以及MariaDB连接的php-mysql服务,以及php-gd支持图片服务
[root@web1 ~]# yum install httpd php php-mysql php-gd -y
Installed:
httpd.x86_64 0:2.4.6-99.el7.centos.1 php.x86_64 0:5.4.16-48.el7 php-gd.x86_64 0:5.4.16-48.el7 php-mysql.x86_64 0:5.4.16-48.el7
Dependency Installed:
apr.x86_64 0:1.4.8-7.el7 apr-util.x86_64 0:1.5.2-6.el7_9.1 httpd-tools.x86_64 0:2.4.6-99.el7.centos.1 libX11.x86_64 0:1.6.7-4.el7_9 libX11-common.noarch 0:1.6.7-4.el7_9
libXau.x86_64 0:1.0.8-2.1.el7 libXpm.x86_64 0:3.5.12-2.el7_9 libjpeg-turbo.x86_64 0:1.2.90-8.el7 libxcb.x86_64 0:1.13-1.el7 libzip.x86_64 0:0.10.1-8.el7
mailcap.noarch 0:2.1.41-2.el7 php-cli.x86_64 0:5.4.16-48.el7 php-common.x86_64 0:5.4.16-48.el7 php-pdo.x86_64 0:5.4.16-48.el7 t1lib.x86_64 0:5.1.2-14.el7
Complete!
2、挂载192.168.100.40(data主机节点)的/dedecms目录到/var/www/html下
(1)安装nfs-utils服务
[root@web1 ~]# yum install -y nfs-utils
Installed:
nfs-utils.x86_64 1:1.3.0-0.68.el7.2
Dependency Installed:
gssproxy.x86_64 0:0.7.0-30.el7_9 keyutils.x86_64 0:1.5.8-3.el7 libbasicobjects.x86_64 0:0.1.1-32.el7 libcollection.x86_64 0:0.7.0-32.el7 libevent.x86_64 0:2.0.21-4.el7
libini_config.x86_64 0:1.3.1-32.el7 libnfsidmap.x86_64 0:0.25-19.el7 libpath_utils.x86_64 0:0.2.1-32.el7 libref_array.x86_64 0:0.1.5-32.el7 libtirpc.x86_64 0:0.2.4-0.16.el7
libverto-libevent.x86_64 0:0.2.5-4.el7 quota.x86_64 1:4.01-19.el7 quota-nls.noarch 1:4.01-19.el7 rpcbind.x86_64 0:0.2.0-49.el7 tcp_wrappers.x86_64 0:7.6-77.el7
(2)关闭SElinux,关闭防火墙,启动服务,挂载NFS服务目录
解释:rpcbind是NFS中用来进行消息通知的服务,一般情况下rpcbind运行在111、31端口,并且NFS配置开启 rpcbind_enable=“YES”
#临时关闭SElinux
[root@web1 ~]# setenforce 0
#永久关闭SElinux
[root@web1 ~]# vi /etc/selinux/config
#修改配置文件内容如下
SELINUX=disabled
[root@web1 ~]# systemctl stop firewalld
#在NFS的客户端只需要启动rpcbind服务即可,通过mount挂载NFS服务目录到本地的httpd服务默认目录
[root@web1 ~]# systemctl start rpcbind
[root@web1 ~]# showmount -e 192.168.100.40
Export list for 192.168.100.40:
/dedecms 192.168.100.0/24
[root@web1 ~]# mount 192.168.100.40:/dedecms /var/www/html
[root@web1 ~]# cd /var/www/html
[root@web1 html]# ls
a assets data dede favicon.ico images include index.php install license.txt m member plus robots.txt special tags.php templets uploads
[root@web1 html]#
###########################################永久挂载方法##################################################
#上面挂载需要注意,这个只是一个临时挂载,当你重启服务器(虚拟机),这个挂载目录就会掉了,如果只是实验你可以这样做
但是,如果是实际的搭建的话,可以挂载到网络文件系统(rc.local)中,实现一个永久挂载
编辑文件,在文件尾行加入如下所示(要注意的是:将挂载文件放到rc.local中,尽量加mount的全路径)
[root@data ~]# cat /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
/bin/mount -t nfs 192.168.100.40:/dedecms /var/www/html
(3)修改目录权限
#设置/var/www/html下所有目录及文件的权限为777,否则有些目录不可写,会影响程序安装
[root@web1 html]# chmod -R 777 /var/www/html
(4)安装织梦程序
[root@web1 html]# systemctl start httpd
#启动httpd服务,浏览器访问(web1主机IP) http://192.168.100.20
安装过程需要指定数据库主机为192.168.100.40,即data服务器IP地址,管理员密码可以自己设置,也可以默认,配置完成点击继续等待安装即可!
(5)现在安装的程序在192.168.100.40(data主机)的dedecms文件夹中,当Web2服务安装完(进行与Web1相同的操作),并挂载data服务器的dedecms目录后,就可以直接通过Web2主机IP访问Web程序首页了
四、配置Nginx实现http负载均衡
1、安装Nginx服务
nginx安装可以采用二进制源码编译、yum源安装,为了方便起见起这里采用yum安装
(1)拉取扩展源到本地
[root@nginx ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
(2)安装nginx服务
[root@nginx ~]# yum install nginx -y
Installed:
nginx.x86_64 1:1.20.1-10.el7
Dependency Installed:
centos-indexhtml.noarch 0:7-9.el7.centos gperftools-libs.x86_64 0:2.6.1-1.el7 nginx-filesystem.noarch 1:1.20.1-10.el7 openssl11-libs.x86_64 1:1.1.1k-5.el7
Complete!
2、配置Nginx服务的负载均衡应用
配置Nginx的负载均衡应用,实现客户端首先访问Nginx服务,然后由Nginx服务把流量平均分配到Web1(192.168.100.20)和Web2(192.168.100.30)两台服务器上
Nginx的主配置文件在/etc/nginx目录下,名称是nginx.conf。使用cat命令查看nginx.conf文件后发现有一行内容为include /etc/nginx/conf.d/*.conf;
这行配置指示nginx服务器在启动时包含指定目录下所有以 `.conf` 结尾的配置文件。具体来说:
- `include`: nginx配置指令,用于包含其他配置文件的内容。
- `/usr/share/nginx/modules/*.conf`: 这是一个通配符路径,表示所有位于 `/usr/share/nginx/modules/` 目录下并且文件名以 `.conf` 结尾的文件都会被包含进来。
因此,这行配置的含义是在nginx启动时,将 `/usr/share/nginx/modules/` 目录下所有 `.conf` 结尾的配置文件内容加载到当前配置中,以扩展nginx的功能或配置。
[root@nginx ~]# cd /etc/nginx/
[root@nginx nginx]# ls
conf.d fastcgi.conf fastcgi_params koi-utf mime.types nginx.conf scgi_params uwsgi_params win-utf
default.d fastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf.default scgi_params.default uwsgi_params.default
#查看主配置文件,这里我复制一部分出来
[root@nginx nginx]# cat nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
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 /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
这说明可以在/etc/nginx/conf.d目录下建立*.conf的配置,作为Nginx的辅助配置,所以在conf.d目录下建立proxy.conf文件输入以下内容
[root@nginx nginx]# cd conf.d/
[root@nginx conf.d]# vi proxy.conf
upstream dede{
server 192.168.100.20;
server 192.168.100.30;
}
server {
listen 80;
server_name 192.168.100.10;
location / {
proxy_pass http://dede;
}
}
#上面的配置upstream dede块即可实现将访问Nginx的流量平均分配到Web1和Web2上。server块其中代码的含义是当客户端访问本机的80端口根目录时,本地将流量代理到http://dede
3、启动Nginx服务,设置开机自启,测试效果
[root@nginx conf.d]# systemctl stop firewalld
[root@nginx conf.d]# systemctl start nginx
[root@nginx conf.d]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
使用浏览器访问192.168.100.10(Nginx主机IP),就可以看到Web1和Web2的动态Web界面了
噔噔噔!!!可以发现,访问Nginx时,被负载均衡到Web1和Web2上!
五、配置Nginx实现https安全访问
随着流量的不断增加,安全性变得尤为重要,所以需要配置https访问代替https访问,以提高Web访问的安全性
1、创建私钥
首先在Nginx服务器的根目录(/etc/nginx)下创建文件夹ssl,使用openssl命令生成私钥文件,名称为server.key
[root@nginx ~]# mkdir /etc/nginx/ssl
[root@nginx ~]# cd /etc/nginx/ssl
[root@nginx ssl]# openssl genrsa -idea -out server.key 2048
Generating RSA private key, 2048 bit long modulus
..........+++
........................+++
e is 65537 (0x10001)
#输入生成的私钥的密码123456,生成私钥文件server.key
Enter pass phrase for server.key:123456
Verifying - Enter pass phrase for server.key:123456
#上述命令中2048表示密钥长度,默认是512。
2、以server.key为私钥,生成自签证书server.crt
[root@nginx ssl]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
Generating a 2048 bit RSA private key
...............................+++
......................................+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:ln
Locality Name (eg, city) [Default City]:sy
Organization Name (eg, company) [Default Company Ltd]:school
Organizational Unit Name (eg, section) []:computer
Common Name (eg, your name or your server's hostname) []:nginx
Email Address []:
(1)openssl req是一个 PKCS#10 证书签署请求和证书生成工具,req表示管理证书签名请求,这里是签名场景,所以用到new,表示生成一个CA证书文件或证书签名请求文件
(2)x509是CA证书专属的参数,表示用作证书签名
(3)key表示指定私钥文件
(4)-out表示输出的证书文件
(5)days表示证书的有效期
(6)keyout指定基于的私钥文件
填写生成证书的内容信息即自己的基本情况,填写完成后,在ssl目录下就生成了自己的私钥文件server.key和证书文件server.crt,证书文件其实就是签名的公钥,通过公钥加密、私钥解密的方法来对传输数据进行加密处理
[root@nginx ssl]# ls
server.crt server.key
3、配置https访问
#在/etc/nginx的conf.d目录下建立Nginx的配置文件ssl.conf,添加如下内容
[root@nginx conf.d]# vi /etc/nginx/conf.d/ssl.conf
server {
listen 443;
server_name 192.168.100.10;
ssl on;
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
location / {
root /code;
index index.html;
}
}
#这里将443端口的https访问设置了证书和私钥路径,然后设置了访问的根目录是/code
#关闭SElinux,重启nginx服务,在/code目录下创建index.html首页文件,填入“123”,使用浏览器就可以访问了https://192.168.100.10
[root@nginx ~]# setenforce 0
[root@nginx conf.d]# systemctl restart nginx
[root@nginx ssl]# mkdir /code
[root@nginx ssl]# echo 123 > /code/index.html
六、配置Nginx实现https负载均衡
首先修改proxy.conf文件名称为proxy.conf.bak,取消http的负载均衡配置
[root@nginx ~]# cd /etc/nginx/conf.d/
[root@nginx conf.d]# ls
proxy.conf ssl.conf
[root@nginx conf.d]# mv proxy.conf proxy.conf.bak
[root@nginx conf.d]# ls
proxy.conf.bak ssl.conf
然后配置ssl.conf文件,添加修改以下内容
[root@nginx conf.d]# vi ssl.conf
upstream dedecms{
server 192.168.100.20;
server 192.168.100.30;
}
server {
listen 443;
server_name 192.168.100.10;
ssl on;
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
location / {
proxy_pass http://dedecms;
}
}
server {
listen 80;
server_name 192.168.100.10;
rewrite (.*) https://$server_name$request_uri;
}
#其中$request_uri记录的是当前请求的原始URL(包含参数),如果没有执行内部重定向操作,request_uri去掉参数后的值和uri的值是一样的。也就是如果在后端服务器中看到的请求和Nginx中存放的request_uri无法匹配,可以考虑去uri里边进行查找。
其中包含请求的文件名和路径及所有参数
#配置文件最后5行的作用是如果用户输入的是http://192.168.100.10(或192.168.100.10),则自动跳转到https://192.168.100.10,rewrite实现的是跳转到用户输入路径不变,但协议转换成https协议
#跳转到https之后了,即访问了中间部分内容,中间部分 location /块实现了自动代理到https://dedecms
#代理到的具体地址就是开始部分upstream dedecms块,即192.168.100.20和192.168.100.30,这样就实现了https的安全阀昂文,有实现了负载均衡功能
#重启服务,访问Web界面
[root@nginx conf.d]# systemctl restart nginx
构建Nginx高可用集群
当配置Web集群后,能够解决高并发的问题,但Nginx负载均衡服务却成了一个单点故障隐患。如果Nginx服务出现问题,则整个Web集群将无法正常工作,所以我们需要配置Nginx负载均衡服务高可用,实现冗余备份功能
任务内容:
(1)Nginx的高可用配置
(2)keepalived服务配置
(3)Shell脚本监测Nginx服务
一、构建两台Nginx高可用服务
本次部署Nginx和Nginx1两台服务器,两台服务器的IP地址和安装服务如下所示,通过keepalived服务,将192.168.100.10和192.168.100.11虚拟成IP地址192.168.100.12,用户访问的是192.168.100.12这个虚拟地址,当Nginx服务器配置成keepalived主服务之后,192.168.100.12指向192.168.100.10这个IP地址,通过配置监测Nginx服务器上的Nginx服务运行状态,当Nginx停止服务时,keepalived将192.168.100.12指向192.168.100.11,用户就可以无缝对接到Nginx1上的Nginx服务,实现高可用
克隆Nginx服务器,修改IP地址为192.168.100.11,服务器名为nginx1
[root@nginx ~]# hostnamectl set-hostname nginx1
二、安装配置keepalived服务
1、分别在nginx和nginx1两台服务器上安装keepalived服务
[root@nginx ~]# yum install keepalived -y
Installed:
keepalived.x86_64 0:1.3.5-19.el7
Dependency Installed:
lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7 net-snmp-agent-libs.x86_64 1:5.7.2-49.el7_9.3 net-snmp-libs.x86_64 1:5.7.2-49.el7_9.3 perl.x86_64 4:5.16.3-299.el7_9
perl-Carp.noarch 0:1.26-244.el7 perl-Encode.x86_64 0:2.51-7.el7 perl-Exporter.noarch 0:5.68-3.el7 perl-File-Path.noarch 0:2.09-2.el7
perl-File-Temp.noarch 0:0.23.01-3.el7 perl-Filter.x86_64 0:1.49-3.el7 perl-Getopt-Long.noarch 0:2.40-3.el7 perl-HTTP-Tiny.noarch 0:0.033-3.el7
perl-PathTools.x86_64 0:3.40-5.el7 perl-Pod-Escapes.noarch 1:1.04-299.el7_9 perl-Pod-Perldoc.noarch 0:3.20-4.el7 perl-Pod-Simple.noarch 1:3.28-4.el7
perl-Pod-Usage.noarch 0:1.63-3.el7 perl-Scalar-List-Utils.x86_64 0:1.27-248.el7 perl-Socket.x86_64 0:2.010-5.el7 perl-Storable.x86_64 0:2.45-3.el7
perl-Text-ParseWords.noarch 0:3.29-4.el7 perl-Time-HiRes.x86_64 4:1.9725-3.el7 perl-Time-Local.noarch 0:1.2300-2.el7 perl-constant.noarch 0:1.27-2.el7
perl-libs.x86_64 4:5.16.3-299.el7_9 perl-macros.x86_64 4:5.16.3-299.el7_9 perl-parent.noarch 1:0.225-244.el7 perl-podlators.noarch 0:2.5.1-3.el7
perl-threads.x86_64 0:1.87-4.el7 perl-threads-shared.x86_64 0:1.43-6.el7
Complete!
[root@nginx1 ~]# yum install keepalived -y
Installed:
keepalived.x86_64 0:1.3.5-19.el7
Dependency Installed:
lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7 net-snmp-agent-libs.x86_64 1:5.7.2-49.el7_9.3 net-snmp-libs.x86_64 1:5.7.2-49.el7_9.3 perl.x86_64 4:5.16.3-299.el7_9
perl-Carp.noarch 0:1.26-244.el7 perl-Encode.x86_64 0:2.51-7.el7 perl-Exporter.noarch 0:5.68-3.el7 perl-File-Path.noarch 0:2.09-2.el7
perl-File-Temp.noarch 0:0.23.01-3.el7 perl-Filter.x86_64 0:1.49-3.el7 perl-Getopt-Long.noarch 0:2.40-3.el7 perl-HTTP-Tiny.noarch 0:0.033-3.el7
perl-PathTools.x86_64 0:3.40-5.el7 perl-Pod-Escapes.noarch 1:1.04-299.el7_9 perl-Pod-Perldoc.noarch 0:3.20-4.el7 perl-Pod-Simple.noarch 1:3.28-4.el7
perl-Pod-Usage.noarch 0:1.63-3.el7 perl-Scalar-List-Utils.x86_64 0:1.27-248.el7 perl-Socket.x86_64 0:2.010-5.el7 perl-Storable.x86_64 0:2.45-3.el7
perl-Text-ParseWords.noarch 0:3.29-4.el7 perl-Time-HiRes.x86_64 4:1.9725-3.el7 perl-Time-Local.noarch 0:1.2300-2.el7 perl-constant.noarch 0:1.27-2.el7
perl-libs.x86_64 4:5.16.3-299.el7_9 perl-macros.x86_64 4:5.16.3-299.el7_9 perl-parent.noarch 1:0.225-244.el7 perl-podlators.noarch 0:2.5.1-3.el7
perl-threads.x86_64 0:1.87-4.el7 perl-threads-shared.x86_64 0:1.43-6.el7
Complete!
2、配置nginx服务器为keepalived的主服务器
修改/etc/keepalived/keepalived/keepalived.conf配置文件,添加如下内容
[root@nginx ~]# vi /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected] //接收通知邮件的邮箱
}
notification_email_from [email protected] //发送通知邮件的邮箱
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS
}
vrrp_script check_nginx {
script "/root/check.sh" //检查nginx运行状况的Shell脚本
interval 2 //检查时间间隔
}
vrrp_instance VI_1 {
state MASTER
//主服务器
interface ens33 //绑定本机的网卡
virtual_router_id 51
priority 100 //主服务器的权重
advert_int 1 //监测时间
authentication {
auth_type PASS //认证类型
auth_pass 111 //认证密码
}
virtual_ipaddress {
192.168.100.12 //定义虚拟IP
}
track_script {
check_nginx //监测脚本的名称
}
}
3、配置nginx1服务器为keepalived的从服务器
从服务器的keepalived配置和主服务器基本一致,只需要需改从服务器和从服务器权重即可
[root@nginx1 ~]# vi /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS
}
vrrp_script check_nginx {
script "/root/check.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP //从服务器
interface ens33
virtual_router_id 51
priority 90 //从服务的权重
advert_int 1
authentication {
auth_type PASS
auth_pass 111
}
virtual_ipaddress {
192.168.100.12
}
track_script {
check_nginx
}
}
三、编写Shell脚本监测服务
1、编写check.sh脚本,监测nginx服务运行状态
注:以下两台服务器分别操作
在两台服务器的/root目录下编写如下check.sh脚本
编写监控脚本的目的是当nginx停止服务后,关闭该主机的keepalived服务,让从服务器变成主服务器
因为keepalived检查的是linux,当nginx挂掉后,keepalived依然还是会绑定在主节点上,就会使得用户无法请求。
所以我们需要写一些脚本检查nginx是否还在正常运行,如果挂掉就重启它或者当启动不了再让keepalived绑定备用机器,停止主服务器的keepalived服务
[root@nginx ~]# vi check.sh
#!/bin/bash
#查看nginx运行状态
systemctl status nginx &> /dev/null
#判断nginx是否关闭
if [ $? -ne "0" ];then
systemctl stop keepalived
fi
[root@nginx1 ~]# vi check.sh
#!/bin/bash
#查看nginx运行状态
systemctl status nginx &> /dev/null
#判断nginx是否关闭
if [ $? -ne "0" ];then
systemctl stop keepalived
fi
2、设置脚本的可执行权限
[root@nginx ~]# chmod 755 /root/check.sh
[root@nginx1 ~]# chmod 755 /root/check.sh
3、修改nginx服务的ssl.conf配置
将80端口和443端口访问的server_name修改为192.168.100.12(虚拟IP),用作输入http://192.168.100.12跳转到https://192.168.100.12,再负载均衡到192.168.100.20(Web1主机)和192.168.100.30(Web2主机)
#nginx服务器
[root@nginx ~]# vi /etc/nginx/conf.d/ssl.conf
upstream dedecms{
server 192.168.100.20;
server 192.168.100.30;
}
server {
listen 443;
server_name 192.168.100.12;
ssl on;
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
location / {
proxy_pass http://dedecms;
}
}
server {
listen 80;
server_name 192.168.100.12;
rewrite (.*) https://$server_name$request_uri;
}
#nginx1服务器
[root@nginx1 ~]# vi /etc/nginx/conf.d/ssl.conf
upstream dedecms{
server 192.168.100.20;
server 192.168.100.30;
}
server {
listen 443;
server_name 192.168.100.12;
ssl on;
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
location / {
proxy_pass http://dedecms;
}
}
server {
listen 80;
server_name 192.168.100.12;
rewrite (.*) https://$server_name$request_uri;
}
4、重启nginx服务和启动keepalived服务
[root@nginx ~]# systemctl restart nginx
[root@nginx ~]# systemctl start keepalived
[root@nginx ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:ba:5a:72 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.10/24 brd 192.168.100.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.100.12/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::769a:4c8b:12d6:9cd8/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::1cc5:f3e2:8fe1:c3af/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::b010:3991:77e8:b2f3/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
[root@nginx1 ~]# systemctl restart nginx
[root@nginx1 ~]# systemctl start keepalived
[root@nginx1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:50:62:03 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.11/24 brd 192.168.100.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.100.12/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::769a:4c8b:12d6:9cd8/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::1cc5:f3e2:8fe1:c3af/64 scope link noprefixroute
valid_lft forever preferred_lft forever
5、验证配置
通过http:192.168.100.12访问时,可以跳转到Web1和Web2服务网站
再关闭192.168.100.10(nginx)服务器的nginx服务进行测试,发现192.168.100.11(nginx1)服务还可以正常访问界面
[root@nginx ~]# systemctl stop nginx
#停止服务后在nginx上查看IP地址信息,虚拟地址已被关闭
[root@nginx ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:ba:5a:72 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.10/24 brd 192.168.100.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.100.12/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::769a:4c8b:12d6:9cd8/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::1cc5:f3e2:8fe1:c3af/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::b010:3991:77e8:b2f3/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
#在nginx1上查看IP地址信息,发现包含了192.168.100.11和192.168.100.12,说明192.168.100.12已经执行192.168.100.11,提供访问服务了
[root@nginx1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:50:62:03 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.11/24 brd 192.168.100.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.100.12/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::769a:4c8b:12d6:9cd8/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::1cc5:f3e2:8fe1:c3af/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@nginx1 ~]#
注:如果出现不能正常访问请注意是否关闭防火墙和SElinux
然后尝试两边手动执行一下脚本bash /root/check.sh,如果还是不行请检查你的keepalived主配置文件是否配置有误
至此,搭建动态Web集群应用,实现https安全访问Web,实现负载均衡及构建nginx高可用集群部署完美完成!!!