群集搭建【LNMP+负载均衡+高可用+跳板机】
原创项目需求
实验目的:构建一个环境拓扑映射的基础上,安装一个论坛,通过创建一个证书https访问,实现负载平衡和高可用性。通过代理服务器实现跳板的作用机,可以远程访问mysql主机、nfs主机、web主机。
拓扑图如下:

实验的想法:基于拓扑图中提供的信息,首先构建web服务器,然后配置mysql、php、nfs最后,建立一个代理服务器来实现负载平衡。
LNMP部署
web1部署
1、创建证书
-
nginx部署
[root@web1 ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force
[root@web1 ~]# systemctl start nginx
[root@web1 ~]# systemctl enable nginx
-
模拟创建一个私有密钥(本地)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

-
生成一个证书和删除私钥密码。
[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、挂载的目录
-
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挂载目录

-
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部署
-
负载均衡配置
[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
-
高可用性配置
[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
-
角度偏移地址

lb2部署
-
负载均衡
[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
-
高可用
[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连接到数据库表的内容。

上面的是整个实验的过程,注意区分主机名和思考它的意义。
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123





