搭建动态Web集群应用、构建高可用集群,配置nginx实现https负载均衡,NFS部署、LAMP服务部署(保姆级教程),建议收藏!!!

目录

搭建动态Web集群应用

一、单独部署数据库MariaDB服务

1、在VM上创建一台服务器,然后进行克隆,配置同网段的IP进行下面操作,上面这个IP是我这边的配置情况,这个根据实际情况来定就可以,只要可以互相通信就没多大问题,然后使用Xshell连接工具进行登录

2、在data服务器上安装MariaDB数据库服务

(1)配置yum源安装服务

(2)安装MariaDB客户端和服务端

(3)初始化数据库

(4)允许用户远程登录数据库服务。通过设置,配置数据库的登录密码为“1”

(5)授权远程计算机可以访问数据库可以登录数据服务还是不够的,需要授权其他计算机可以访问数据服务中的数据库,授权方法如下

二、单独部署NFS服务

1、安装NFS

2、启动NFS和RPC服务,设置开机自启,关闭防火墙

3、上传文件到共享目录

4、配置共享文件目录

5、重启服务,验证配置效果

三、部署两台动态Web服务

1、安装Apache和PHP、php-mysql、php-gd服务

2、挂载192.168.100.40(data主机节点)的/dedecms目录到/var/www/html下

(1)安装nfs-utils服务

(2)关闭SElinux,关闭防火墙,启动服务,挂载NFS服务目录

(3)修改目录权限

(4)安装织梦程序

(5)现在安装的程序在192.168.100.40(data主机)的dedecms文件夹中,当Web2服务安装完(进行与Web1相同的操作),并挂载data服务器的dedecms目录后,就可以直接通过Web2主机IP访问Web程序首页了

四、配置Nginx实现http负载均衡

1、安装Nginx服务

(1)拉取扩展源到本地

(2)安装nginx服务

2、配置Nginx服务的负载均衡应用

3、启动Nginx服务,设置开机自启,测试效果

五、配置Nginx实现https安全访问

1、创建私钥

2、以server.key为私钥,生成自签证书server.crt

3、配置https访问

六、配置Nginx实现https负载均衡

构建Nginx高可用集群

一、构建两台Nginx高可用服务

二、安装配置keepalived服务

1、分别在nginx和nginx1两台服务器上安装keepalived服务

2、配置nginx服务器为keepalived的主服务器

3、配置nginx1服务器为keepalived的从服务器

三、编写Shell脚本监测服务

1、编写check.sh脚本,监测nginx服务运行状态

2、设置脚本的可执行权限

3、修改nginx服务的ssl.conf配置

4、重启nginx服务和启动keepalived服务

5、验证配置


搭建动态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;

[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.comf文件,添加修改以下内容

[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 {
     2909@qq.com                                        //接收通知邮件的邮箱
   }
   notification_email_from 1872@163.com                 //发送通知邮件的邮箱   
   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 {
     2909@qq.com
   }
   notification_email_from 1872@163.com
   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高可用集群部署完美完成!!!

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值