群集搭建【LNMP+负载均衡+高可用+跳板机】

原创
小哥 2年前 (2023-05-17) 阅读数 9 #大杂烩

项目需求

实验目的:构建一个环境拓扑映射的基础上,安装一个论坛,通过创建一个证书https访问,实现负载平衡和高可用性。通过代理服务器实现跳板的作用机,可以远程访问mysql主机、nfs主机、web主机。

拓扑图如下:

实验的想法:基于拓扑图中提供的信息,首先构建web服务器,然后配置mysql、php、nfs最后,建立一个代理服务器来实现负载平衡。

LNMP部署

web1部署

1、创建证书

  1. nginx部署

    [root@web1 ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force

    [root@web1 ~]# systemctl start nginx

    [root@web1 ~]# systemctl enable nginx

  2. 模拟创建一个私有密钥(本地)CA)

    [root@web1 ~]# mkdir /etc/nginx/ssl_key

    [root@web1 ~]# cd /etc/nginx/ssl_key

    [root@web1 ssl_key]# openssl genrsa -idea -out server.key 2048

  1. 生成一个证书和删除私钥密码。

    [root@web1 ssl_key]# openssl req -days 3650 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

2、创建一个论坛

编辑配置文件,使用证书,并指定根目录。

[root@web1 ssl_key]# cd /etc/nginx/conf.d/
[root@web1 conf.d]# rm -rf default.conf
[root@web1 conf.d]# vim blog.conf
server {
        listen 443 ssl;
        server_name blog.benet.com;
        ssl_certificate ssl_key/server.crt;
        ssl_certificate_key ssl_key/server.key;
        root /wordpress;
        index index.php index.html;

        location ~ .php$ {
                root /wordpress;
                fastcgi_pass 192.168.1.10:9000;         //php服务器主机
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                }
        }
server {
        listen 80;
        server_name blog.benet.com;
#       rewrite .* https://blog.benet.com;         //指定重定向(http转https)
#       rewrite .* https://$host$request_uri redirect;
#       rewrite .* https://$server_name$request_uri redirect;
        rewrite .* https://$server_name$1 redirect;         //可以重定向所有四个,一个就足够了。
        }
[root@web1 conf.d]# systemctl restart nginx

mysql部署

[root@mysql ~]# rpm -ivh /media/mysql5.6-rpm/* --nodeps --force
[root@mysql ~]# systemctl start mysqld
[root@mysql ~]# systemctl enable mysqld
[root@mysql ~]# mysqladmin -uroot password
New password:         //请输入一个新密码
Confirm new password:          //请输入一个新密码
[root@mysql ~]# mysql -uroot -p123
//省略一些内容
mysql> create database blog;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on blog.* to blog@% identified by 123456;
Query OK, 0 rows affected (0.00 sec)

php部署

[root@php ~]# rpm -ivh /media/php-rpm/* --nodeps --force

[root@php ~]# vim /etc/php-fpm.d/www.conf

listen = 192.168.1.10:9000         //修改为php本机IP

listen.allowed_clients = 192.168.1.7,192.168.1.8     //修改为web主机IP

[root@php ~]# systemctl start php-fpm

[root@php ~]# systemctl enable php-fpm

nfs部署

1,创建共享目录

[root@nfs ~]# yum -y install nfs-utils rpcbind

[root@nfs ~]# cp -rp /media/wordpress-4.9.4-zh_CN.zip /

[root@nfs ~]# cd /

[root@nfs /]# unzip wordpress-4.9.4-zh_CN.zip //解压缩软件方案

[root@nfs /]# vim /etc/exports

/wordpress 192.168.1.0/24(rw,sync,no_root_squash) //发布共享目录

[root@nfs /]# chmod -R 777 /wordpress

[root@nfs /]# systemctl start rpcbind nfs

[root@nfs /]# systemctl enable rpcbind nfs

2、挂载的目录

  1. web1挂载

    [root@web1 ~]# showmount -e 192.168.1.11 //检查目录是否正确地共享

    Export list for 192.168.1.11:

    /wordpress 192.168.1.0/24

    [root@web1 ~]# mkdir /wordpress

    [root@web1 ~]# mount -t nfs 192.168.1.11:/wordpress /wordpress //web1挂载目录

  1. PHP挂载

    [root@php ~]# mkdir /wordpress

    [root@php ~]# mount -t nfs 192.168.1.11:/wordpress/ /wordpress //PHP挂载目录

LNMP测试

修改测试机hosts文件是通过域名访问。

[root@client ~]# echo  "192.168.1.7 blog.benet.com" >> /etc/hosts

访问浏览器blog.benet.com你可以直接去https这是上面的重定向的目的。

下一个是安装论坛页面。mysql服务器IP然后单击submit,现在安装。

进入论坛的信息后,单击安装。

在登录之后,您可以编辑论坛。

负载平衡和高可用性

上面的配置后,lnmp和nfs就是这样,现在我们将实现负载平衡和高可用性的功能。

web2部署

web1配置文件和证书已经配置,请直接复制在这里。

[root@web2 ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force

[root@web2 ~]# cd /etc/nginx/conf.d/

[root@web2 conf.d]# rm -rf default.conf

[root@web2 conf.d]# scp -rp root@192.168.1.7:/etc/nginx/conf.d/blog.conf .

[root@web2 conf.d]# cd ..

[root@web2 nginx]# scp -rp root@192.168.1.7:/etc/nginx/ssl_key /etc/nginx //复制证书

[root@web2 nginx]# systemctl start nginx

[root@web2 nginx]# mkdir /wordpress

[root@web2 nginx]# mount -t nfs 192.168.1.11:/wordpress/ /wordpress //山论坛目录

lb1部署

  1. 负载均衡配置

    [root@lb1 ~]# rpm -ivh /media/nginx-rpm/*  --nodeps --force [root@lb1 ~]# cd /etc/nginx/conf.d/ [root@lb1 conf.d]# rm -rf default.conf [root@lb1 conf.d]# vim lb.conf upstream web {         server 192.168.1.7:443;         server 192.168.1.8:443;         } server {         listen 443 ssl;         server_name blog.benet.com;         ssl_certificate ssl_key/server.crt;         ssl_certificate_key ssl_key/server.key;         location / {                 proxy_pass https://web;                 include nginx_params;         } } server {         listen 80;         server_name blog.benet.com;         return 302 https://$server_name$1;         } [root@lb1 conf.d]# cd .. [root@lb1 nginx]# vim nginx_params proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; [root@lb1 conf.d]# scp -rp root@192.168.1.7:/etc/nginx/ssl_key /etc/nginx/ //复制证书 [root@lb1 conf.d]# nginx -t [root@lb1 conf.d]# systemctl restart nginx

  2. 高可用性配置

    [root@lb1 ~]# yum -y install keepalived [root@lb1 ~]# vim /etc/keepalived/keepalived.conf global_defs {    router_id lb1 //修改路线名称    vrrp_strict //删除此行 } vrrp_instance VI_1 {     state MASTER     interface ens33 //指定网卡信息     virtual_router_id 51     priority 100     advert_int 1     authentication {         auth_type PASS         auth_pass 1111     }     virtual_ipaddress {         192.168.1.200 //指定偏移地址     } } [root@lb1 ~]# systemctl start keepalived

  3. 角度偏移地址

lb2部署

  1. 负载均衡

    [root@lb2 ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force

    [root@lb2 ~]# scp -rp root@192.168.1.5:/etc/nginx/* /etc/nginx/

    [root@lb2 ~]# cd /etc/nginx/conf.d/

    [root@lb2 conf.d]# rm -rf default.conf

    [root@lb2 conf.d]# systemctl start nginx

  2. 高可用

    [root@lb2 ~]# yum -y install keepalived [root@lb2 ~]# vim /etc/keepalived/keepalived.conf global_defs {    router_id lb2 //修改路线名称    vrrp_strict //删除此行 } vrrp_instance VI_1 {     state BACKUP //指定备份主机     interface ens33 //指定网卡信息     virtual_router_id 51     priority 99 //指定优先级     advert_int 1     authentication {         auth_type PASS         auth_pass 1111     }     virtual_ipaddress {         192.168.1.200 //指定偏移地址     } } [root@lb2 ~]# systemctl start keepalived

验证群集

删除之前的配置hosts文件,指定IP偏移地址。

[root@client ~]# vim /etc/hosts
192.168.1.200 blog.benet.com

客户端访问blog.benet.com会自动切换到https://blog.benet.com登录到博客,你成功了。

通过关闭lb1的keepalived,查看lb2主机的ip地址, 确认漂移的地址去lb2在主机上。 它可以正常访问。

开启lb1的 keepalived关闭服务器,nginx服务和访问网页可能导致无法访问网页。

[root@lb1 ~]# systemctl start keepalived

[root@lb1 ~]# systemctl stop nginx

[root@lb1 ~]# mkdir /sh
[root@lb1 ~]# vim /sh/check_nginx_proxy.sh
#!/bin/bash
killall  -0  nginx
if  [ $? -ne 0 ];then
  systemctl stop keepalived
fi
[root@lb1 ~]# chmod +x /sh/check_nginx_proxy.sh
[root@lb1 ~]# vim /etc/keepalived/keepalived.conf //添加脚本跟踪模块keepalived配置文件
vrrp_script check_nginx_proxy {
        script "/sh/check_nginx_proxy.sh"
        interval 2
        weight 5
        }
vrrp_instance VI_1 { //添加两个模块分别在和上面这个模块
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.200
    }
    track_script {
        check_nginx_proxy
        }
}
[root@lb1 ~]# systemctl restart keepalived

验证关闭后重新启动lb1主机的nginx服务,发现你仍然可以访问论坛表示成功。

[root@lb1 ~]# systemctl stop nginx

跳板的作用机

现lnmp负载平衡和高可用性的功能已经实现,但客户仍然提供了直接访问后端mysql及web等主机,通过客户端访问代理服务器转跳至目标主机。

分别连接web1、nfs主机,连接mysql数据库,客户端通过访问虚拟端口连接。

[root@lb1 ~]# vim /etc/nginx/nginx.conf
//在http添加以上字段
stream {
        upstream web1 {
                server 192.168.1.7:22;
        }
        upstream mysql {
                server 192.168.1.9:3306;
        }
        upstream nfs {
                server 192.168.1.11:22;
        }
        server {
                listen  5555;
                proxy_pass web1;
                proxy_connect_timeout 30;
                proxy_timeout 60;
        }
         server {
                listen 7777;
                proxy_pass mysql;
                proxy_connect_timeout 30;
                proxy_timeout 60;
        }
         server {
                listen 9999;
                proxy_pass nfs;
                proxy_connect_timeout 30;
                proxy_timeout 60;
        }
}
[root@lb1 ~]# nginx -t
[root@lb1 ~]# systemctl restart nginx

将这个文件复制到lb2在主机,实现负载平衡。

[root@lb2 ~]# scp -rp  root@192.168.1.5:/etc/nginx/nginx.conf /etc/nginx/

[root@lb2 ~]# systemctl restart nginx

测试机的跳板

连接web1服务器测试是否成功。

连接nfs服务器测试成功 。

mysql服务器3306港口首先需要使用win直接登录通过终端软件连接mysql数据库。

通过SQLyog连接到数据库表的内容。

上面的是整个实验的过程,注意区分主机名和思考它的意义。

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除