通过虚拟机进行搭建网站架构
使用所需的软件:VMware、xshell
vmware下载:my.vmware.comhttps://my.vmware.com/web/vmware/downloads/#all_products或者
Xshell下载:XSHELL - NetSarang Websitehttps://www.xshell.com/zh/xshell/
一、网站架构简单介绍
通过负载均衡、Web 服务器、存储和数据库服务器的组合,提供高可用性与可靠性以支持现代化的 Web 应用
二、搭建
准备环境:
系统:centos 7 镜像文件
内存:2G
CPU:1核
硬盘:40G
网卡:两块网卡(双网卡)
eth0(外网):NAT网络,网段10.0.0.1~254,网关10.0.0.254,可访问百度
eth1(内网):LAN区段,网段172.16.1.1~254,网关172.16.1.254,不可访问百度
需要创建的相关主机:
bash
服务器作用 主机名 外网地址 内网地址 运行软件
管理机 master-61 10.0.0.61 172.16.1.61 Ansible/zabbix/jumpserver/openvpn
负载均衡服务器 slb-5 10.0.0.5 172.16.1.5 nginx/keepalived
负载均衡服务器 slb-6 10.0.0.6 172.16.1.6 nginx/keepalived
web服务器 web-7 10.0.0.7 172.16.1.7 nginx/php
web服务器 web-8 10.0.0.8 172.16.1.8 nginx/tomcat
web服务器 web-9 10.0.0.9 172.16.1.9 nginx/php
存储服务器 nfs-31 10.0.0.31 172.16.1.31 nfs/rsyncd/lsyncd
备份服务器 rsync-41 10.0.0.41 172.16.1.41 nfs/rsyncd/lsyncd
数据库服务器 db-51 10.0.0.51 172.16.1.51 mysql/redis
管理机
作用: 负责运维管理,包括自动化部署(Ansible)、监控系统(Zabbix),以及实现远程访问(Jumpserver 和 OpenVPN)。负载均衡服务器
作用: 接收用户请求并将流量分发到后端的 Web 服务器,确保系统的负载均衡及高可用性。
Web 服务器
作用: 执行应用逻辑并处理用户请求。不同的 Web 服务器可以服务不同类型的应用(如 PHP 应用和 Java 应用)。
存储服务器
作用: 提供网络文件系统,允许其他服务器共享和存取文件,实现数据的集中存储。备份服务器
作用: 执行数据备份,确保在故障发生时能够快速恢复数据。数据库服务器
作用: 存储应用数据,MySQL 用于关系型查询,Redis 提供高速缓存服务。
1、先安装配置一台虚拟机(作为模板机)
VMware中设置里点击虚拟网络编辑器
选中vmnet8,点击更改设置
新建一台虚拟机后,再添加一块网卡选择为LAN
2、开始安装centos 7系统
开启虚拟机,在安装界面,按tab键,然后输入net.ifnames=0 biosdevname=0,回车即可
这两个参数的作用是修改linux的安装过程,让网卡名,恢复为旧的linux命名规则,也就是eth0
如下会出现检查更改的进度,更改完成后进入安装界面。
开始进行装机,时区选择shanghai,分区可以手动分区或者默认自动分区都可
关闭内核崩溃机制,如下图。
内核崩溃机制作用:关闭崩溃机制可以避免占用大量磁盘空间,尤其是在不打算调试内核崩溃的情况下
配置eth0网卡
修改主机名,点击configure
勾选自动连接网络
设置eth0的网卡IP为10.0.0.100,点击保存
保存后会显示IP相关信息,然后点击done,进行安装
设置root密码,用户可创建可不创建。等待安装完成后reboot重启系统
3、系统配置相关操作
1、配置网卡
更改两张网卡为如下信息
bash
[root@moban ~]# sed -ri '/(proxy_method|browser_only|uuid|defroute)/Id' /etc/sysconfig/network-scripts/ifcfg-eth0
[root@moban ~]#
[root@moban ~]# sed -i '/ipv[46]/Id' /etc/sysconfig/network-scripts/ifcfg-eth0
[root@moban ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.100
PREFIX=24
GATEWAY=10.0.0.254
DNS1=223.5.5.5
[root@moban network-scripts]# sed -i '/ipv[46]/Id' /etc/sysconfig/network-scripts/ifcfg-eth1
[root@moban network-scripts]# sed -ri '/(proxy_method|browser_only|uuid|defroute)/Id' /etc/sysconfig/network-scripts/ifcfg-eth1
[root@moban network-scripts]# cat ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=172.16.1.200
NETMASK=255.255.0.0
GATEWAY=172.16.1.254
DNS1=223.5.5.5
重启网络(基于NetworkManager服务),使两张网卡都生效
bash
[root@moban ~]# systemctl restart NetworkManager
[root@moban ~]# systemctl restart network
[root@moban ~]# 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5c:5d:d1 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5c:5dd1/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5c:5d:db brd ff:ff:ff:ff:ff:ff
inet 172.16.1.200/24 brd 172.16.1.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5c:5ddb/64 scope link
valid_lft forever preferred_lft forever
2、关闭所有防火墙、selinux、iptables
bash
[root@moban ~]# setenforce 0
[root@moban ~]# getenforce
Permissive
[root@moban ~]# grep '^SELINUX' /etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=targeted
[root@moban ~]# sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
[root@moban ~]# grep '^SELINUX' /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
[root@moban ~]# systemctl stop firewalld
[root@moban ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@moban ~]# iptables -F
[root@moban ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
3、加速ssh连接,并重启sshd服务
bash
[root@moban ~]# grep -Ei 'gssapiauth|usedns|pidfile' /etc/ssh/ssh_config
# GSSAPIAuthentication yes
GSSAPIAuthentication yes
[root@moban ssh]# sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/ssh_config
[root@moban ~]# grep -Ei 'gssapiauth|usedns|pidfile' /etc/ssh/ssh_config
# GSSAPIAuthentication no
GSSAPIAuthentication no
[root@moban ~]# systemctl restart sshd
[root@moban ~]#
4、优化PS1变量
bash
直接写入 /etc/profile
root@moban ~]# echo 'export PS1='\[\033[01;34m\](`date +"%H:%M:%S"`)\[\033[01;35m\][\[\033[01;32m\]\h\[\033[01;31m\] \u \w\[\033[31m\]\[\033[01;35m\]] \[\033[01;36m\]\$\[\033[00m\] '' >> /etc/profile
[root@moban ~]# source /etc/profile
(10:28:26)[moban root ~] #
5、yum源优化
bash
首先备份旧的yum源文件
10:28:29)[moban root ~] # cd /etc/yum.repos.d/
(10:32:15)[moban root /etc/yum.repos.d] #
(10:32:15)[moban root /etc/yum.repos.d] # mkdir repo_bak
(10:32:44)[moban root /etc/yum.repos.d] # mv *.repo repo_bak/
下载阿里云的yum源,因为wget没有下载,所以使用curl直接拉取
(10:35:48)[moban root /etc/yum.repos.d] # curl -O https://mirrors.aliyun.com/repo/Centos-7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2523 100 2523 0 0 10504 0 --:--:-- --:--:-- --:--:-- 10512
(10:35:58)[moban root /etc/yum.repos.d] # ls
Centos-7.repo repo_bak
(10:36:02)[moban root /etc/yum.repos.d] # curl -O http://mirrors.aliyun.com/repo/epel-7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 664 100 664 0 0 4565 0 --:--:-- --:--:-- --:--:-- 4579
(10:36:29)[moban root /etc/yum.repos.d] # ls
Centos-7.repo epel-7.repo repo_bak
清楚旧的yum缓存 生成新的缓存
(10:36:30)[moban root /etc/yum.repos.d] # yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base epel extras updates
Cleaning up list of fastest mirrors
(10:36:39)[moban root /etc/yum.repos.d] # yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
base | 3.6 kB 00:00:00
epel | 4.3 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/16): base/7/x86_64/group_gz | 153 kB 00:00:00
(2/16): epel/x86_64/group | 399 kB 00:00:01
......
安装基本的软件
bash
因为使最小化安装,所以很多软件无法使用
(10:48:44)[moban root ~] # yum -y install tree wget bash-completion bash-completion-extras lrzsz net-tools sysstat iotop iftop htop unzip telnet ntpdate lsof
6、关闭邮件告警
bash
Linux中所以操作都会被linux内置的邮件服务器记录,不断的写入 /var/log下的日志文件可能会占用无用的磁盘
(10:53:07)[moban root ~] # echo 'unset mailcheck' >> /etc/profile
(10:53:08)[moban root ~] # source /etc/profile
(10:53:17)[moban root ~] #
7、配置host主机名解析,通过主机名去访问不同的机器
bash
(13:27:17)[moban root ~] # cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#内网ip 外网ip 主机名 机器的作用
172.16.1.61 10.0.0.61 master-61 管理机
172.16.1.5 10.0.0.5 slb-5 负载均衡服务器
172.16.1.6 10.0.0.6 slb-6 负载均衡服务器
172.16.1.7 10.0.0.7 web-7 web服务器
172.16.1.8 10.0.0.8 web-8 web服务器
172.16.1.9 10.0.0.9 web-9 web服务器
172.16.1.31 10.0.0.31 nfs-31 存储服务器
172.16.1.41 10.0.0.41 rsync-41 备份服务器
172.16.1.51 10.0.0.51 db-51 数据库服务器
8、配置时间同步定时任务
bash
查看crontab服务是否运行
(13:27:23)[moban root ~] # systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-12-02 16:37:46 CST; 20h ago
Main PID: 690 (crond)
CGroup: /system.slice/crond.service
└─690 /usr/sbin/crond -n
Dec 02 16:37:46 moban systemd[1]: Started Command Scheduler.
Dec 02 16:37:46 moban crond[690]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 5...ed.)
Dec 02 16:37:47 moban crond[690]: (CRON) INFO (running with inotify support)
Hint: Some lines were ellipsized, use -l to show in full.
编写定时任务语句
(13:30:17)[moban root ~] # crontab -l
* * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1
9、关闭swap功能
取消swap的功能,不适用这个从磁盘获取而来的部分内存容量,因为效率太差
bash
先取消挂载,然后注释掉配置文件,重启系统即可生效
(13:34:52)[moban root ~] # swapoff -a
(13:35:01)[moban root ~] # cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Dec 2 16:09:14 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=be2d80b1-e200-4660-9df5-23fcd50e25cb /boot xfs defaults 0 0
#/dev/mapper/centos-swap swap swap defaults 0 0
(13:35:06)[moban root ~] #
三、编写修改IP脚本
1、eth0 eth1 修改网卡配置文件
bash
(13:39:20)[moban root ~] # cat network.sh
#!/bin/bash
read -p "请输入IP主机位:" my_ip
read -p "请输入主机名:" host_name
echo '正在修改网卡配置文件eth0'
sed -i "/IPADDR/s#100#${my_ip}#g" /etc/sysconfig/network-scripts/ifcfg-eth0
echo '正在修改网卡配置文件eth1'
sed -i "/IPADDR/s#200#${my_ip}#g" /etc/sysconfig/network-scripts/ifcfg-eth1
echo '网卡配置文件修改完毕'
echo '正在修改主机名'
hostnamectl set-hostname ${host_name}
echo "=========================="
echo "此时的eth0配置是:" `cat /etc/sysconfig/network-scripts/ifcfg-eth0`
echo "=========================="
echo "此时的eth1配置是:" `cat /etc/sysconfig/network-scripts/ifcfg-eth1`
echo "当前的主机名是:" `hostname`
最后进行模板机拍摄快照
2、创建9台机器,使用链接克隆,如下图
每台机器开机后循环执行network.sh 脚本,重启网络,与模板机器互相ping通即可
bash
(14:10:25)[nfs root ~] # bash network.sh
请输入IP主机位:31
请输入主机名:nfs
正在修改网卡配置文件eth0
正在修改网卡配置文件eth1
网卡配置文件修改完毕
正在修改主机名
==========================
此时的eth0配置是: TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=eth0 ONBOOT=yes IPADDR=10.0.0.31 PREFIX=24 GATEWAY=10.0.0.254 DNS1=223.5.5.5
==========================
此时的eth1配置是: TYPE=Ethernet BOOTPROTO=dhcp NAME=eth1 DEVICE=eth1 ONBOOT=yes IPADDR=172.16.1.31 NETMASK=255.255.0.0 GATEWAY=172.16.1.254 DNS1=223.5.5.5
当前的主机名是: nfs
(14:13:40)[nfs root ~] # systemctl restart NetworkManager
(14:13:47)[nfs root ~] #
(14:16:33)[nfs root ~] # ping 10.0.0.100
PING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
64 bytes from 10.0.0.100: icmp_seq=1 ttl=64 time=0.342 ms
64 bytes from 10.0.0.100: icmp_seq=2 ttl=64 time=0.928 ms
^C
--- 10.0.0.100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.342/0.635/0.928/0.293 ms
(14:16:57)[nfs root ~] # ping 172.16.1.200
PING 172.16.1.200 (172.16.1.200) 56(84) bytes of data.
64 bytes from 172.16.1.200: icmp_seq=1 ttl=64 time=1.88 ms
64 bytes from 172.16.1.200: icmp_seq=2 ttl=64 time=1.70 ms
^C
--- 172.16.1.200 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 1.703/1.794/1.885/0.091 ms
注意:如果执行完脚本重启network后报错了,可以先重启下NetworkManager,然后再重启network。
systemctl restart NetworkManager
systemctl restart network