PROJECT

day01

单机安装基于LNMP结构的WordPress网站

基本环境准备

  • 创建虚拟机,并配置防火墙、SELINUX、主机名、IP地址、yum
[root@zzgrhel8 ~]# vm clone web1    # 克隆一台7版本的虚拟机
[root@zzgrhel8 ~]# virsh console web1   # 访问虚拟机的控制台
localhost login: root
Password: a

# 执行以下命令初始化
hostnamectl set-hostname web1
nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.11/24
nmcli connection down eth1
nmcli connection up eth1
echo a | passwd --stdin root

# 退出控制台,以ssh方式登陆
[root@localhost ~]# logout
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
web1 login:    # 按ctrl+]退回到真机

# 以ssh方式登陆
[root@zzgrhel8 ~]# ssh 192.168.99.11
[root@web1 ~]# cat /etc/yum.repos.d/local.repo
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.99.240/dvd
enabled=1
gpgcheck=0

配置nginx

  • nginx安装及基本配置
[root@web1 ~]# yum -y install gcc openssl-devel pcre-devel
[root@zzgrhel8 ~]# scp /linux-soft/2/lnmp_soft.tar.gz 192.168.99.11:/root
[root@web1 ~]# tar xf lnmp_soft.tar.gz 
[root@web1 ~]# cd lnmp_soft/
[root@web1 lnmp_soft]# tar xf nginx-1.12.2.tar.gz 
[root@web1 lnmp_soft]# cd nginx-1.12.2/
[root@web1 nginx-1.12.2]# ./configure --with-http_ssl_module --with-http_stub_status_module
[root@web1 nginx-1.12.2]# make && make install
  • 安装数据库,并配置php支持连接数据库
[root@web1 ~]# yum install -y mariadb-server mariadb-devel php php-fpm php-mysql
  • 配置服务
# mariadb数据库服务
[root@web1 ~]# systemctl enable mariadb.service --now
[root@web1 ~]# ss -tlnp | grep :3306
LISTEN     0      50           *:3306
# php-fpm服务,处理php动态程序
[root@web1 ~]# systemctl enable php-fpm.service --now
[root@web1 ~]# ss -tlnp | grep :9000
LISTEN     0      128    127.0.0.1:9000

# 配置nginx
[root@web1 ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The Nginx HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT ${MAINPID}

[Install]
WantedBy=multi-user.target
[root@web1 ~]# systemctl enable nginx --now
[root@web1 ~]# ss -tlnp | grep :80
LISTEN     0      128          *:80
  • 修改nginx配置文件,实现动静分离
[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf
... ...
 43         location / {
 44             root   html;
 45             index  index.php index.html index.htm;
 46         }
 ... ...
 65         location ~ \.php$ {
 66             root           html;
 67             fastcgi_pass   127.0.0.1:9000;
 68             fastcgi_index  index.php;
 69         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_scri    pt_name;
 70             include        fastcgi.conf;
 71         }
[root@web1 ~]# systemctl restart nginx  # 重启服务

# 测试对php的支持
[root@web1 ~]# vim /usr/local/nginx/html/index.php
<?php
    phpinfo();
?>
# 相关日志位置:/usr/local/nginx/logs和/var/log/php-fpm/目录
# 浏览器访问http://192.168.99.11/查看结果
# 如果可以看到php信息的网页,则正确。如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JV6CsnWx-1682339328428)(…/imgs/image-20220110114544551.png)]

# 测试完后,删除网页:
[root@web1 ~]# rm -f /usr/local/nginx/html/index.php

配置数据库服务器

  • 创建程序所需的数据库
  • 授权用户可以访问数据库
[root@web1 ~]# mysql
# 创建名为wordpress的数据库,字符编码采用utf8mb4
MariaDB [(none)]> create database wordpress character set utf8mb4;
# 创建名为wordpress的用户,可以对wordpress拥有全部权限,他的登录密码也是wordpress。该用户既可以在本机登录,也可以在其他客户端地址登录。
MariaDB [(none)]> grant all on wordpress.* to wordpress@'localhost' identified by 'wordpress';
MariaDB [(none)]> grant all on wordpress.* to wordpress@'192.168.99.11' identified by 'wordpress';
MariaDB [(none)]> grant all on wordpress.* to wordpress@'%' identified by 'wordpress';
MariaDB [(none)]> flush privileges;   # 刷新权限

# 测试账号连接数据库
# -u指定数据库账户名称,-p指定数据库账户的密码,-h指定需要远程数据库的IP地址
[root@web1 ~]# mysql -uwordpress -pwordpress -h192.168.99.11 wordpress

部署wordpress

  • 复制程序文件到nginx工作目录
# 解压
[root@web1 ~]# cd lnmp_soft/
[root@web1 lnmp_soft]# yum install -y unzip
[root@web1 lnmp_soft]# unzip wordpress.zip 
[root@web1 lnmp_soft]# cd wordpress/
[root@web1 wordpress]# tar xf wordpress-5.0.3-zh_CN.tar.gz 
[root@web1 wordpress]# cd wordpress/
[root@web1 wordpress]# cp -r * /usr/local/nginx/html/
# php程序是由php-fpm处理的,php-fpm以apache身份运行
[root@web1 wordpress]# ps aux | grep php-fpm
# 为了让php-fpm程序能对html目录进行读写操作,需要为他授予权限
[root@web1 wordpress]# chown -R apache:apache /usr/local/nginx/html
  • 访问http://192.168.99.11/readme.html可以查阅wordpress使用说明
  • 访问http://192.168.99.11/进行初始化,它将自动跳转到http://192.168.99.11/wp-admin/setup-config.php

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5LGCgdo1-1682339328429)(…/imgs/image-20220110144632332.png)]

点击该页面最下方的“现在就开始”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yVRE4Zdr-1682339328430)(…/imgs/image-20220110144828863.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-no08Ucho-1682339328430)(…/imgs/image-20220110144853898.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l55OaZTK-1682339328431)(…/imgs/image-20220110145026155.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZQNz6RF4-1682339328431)(…/imgs/image-20220110145051902.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ErtgCMpQ-1682339328431)(…/imgs/image-20220110145113781.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xe2HLHqu-1682339328432)(…/imgs/image-20220110145139164.png)]

注意:以上页面为后台管理页面。前台用户可以查看到的页面如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0C6G47AK-1682339328432)(…/imgs/image-20220110145242397.png)]

web与数据库服务分离

准备数据库服务器

  • 初始化:配置防火墙、SELINUX、YUM、主机名、IP地址
[root@zzgrhel8 ~]# vm clone database
[root@zzgrhel8 ~]# virsh console database
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
localhost login: root
Password: a

# 执行以下命令初始化
hostnamectl set-hostname database
nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.21/24
nmcli connection down eth1
nmcli connection up eth1
echo a | passwd --stdin root

# 使用ssh远程连接
[root@localhost ~]# logout
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
database login:   # 按ctrl+]
[root@zzgrhel8 ~]# ssh 192.168.99.21
[root@database ~]# vim /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.99.240/dvd
enabled=1
gpgcheck=0

# 安装mariadb-server并启动
[root@database ~]# yum install -y mariadb-server mariadb-devel
[root@database ~]# systemctl enable mariadb.service --now 
  • 创建数据库,并授权
[root@database ~]# mysql
MariaDB [(none)]> create database wordpress character set utf8mb4;
MariaDB [(none)]> grant all on wordpress.* to wordpress@'%' identified by 'wordpress';
  • 为了测试数据迁移成功与否,可以再创建新的BLOG。迁移完数据后,BLOG仍在,则数据未丢失。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4BE3ZPln-1682339328432)(…/imgs/image-20220110163604937.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GQA0hdSp-1682339328433)(…/imgs/image-20220110163707407.png)]

点击右上角的“发布”后,回到首页,查看结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AtrkCP3j-1682339328433)(…/imgs/image-20220110163806874.png)]

  • 向用户发布停服更新通知。然后迁移数据库
# 1. 在源服务器上备份数据库中的数据。备份数据库wordpress中的数据到wordpress.sql文件
[root@web1 ~]# mysqldump wordpress > wordpress.sql
# 2. 将备份文件拷贝到新数据库服务器
[root@web1 ~]# scp wordpress.sql 192.168.99.21:/root/
# 3. 在新数据库服务器上,导入数据。将wordpress.sql中的数据导入到wordpress数据库中
[root@database ~]# mysql wordpress < wordpress.sql 
# 4. 修改php网站,将数据库服务器地址,指向新数据库服务器
[root@web1 ~]# vim /usr/local/nginx/html/wp-config.php
 32 define('DB_HOST', '192.168.99.21');
# 5. 停止web1上的mariadb数据库,wordpress网站仍然可以访问
[root@web1 ~]# systemctl stop mariadb
[root@web1 ~]# systemctl disable mariadb
# 6. 停止database上的mariadb数据库,wordpress将不能访问
[root@database ~]# systemctl stop mariadb
# 7. 测试后,再启动database上的mariadb。
[root@database ~]# systemctl start mariadb

附:查看数据库中的内容

# 1. 登录数据库
[root@database ~]# mysql 
# 2. 查看有哪些数据库
MariaDB [(none)]> show databases;
# 3. 进入名为wordpress的数据库
MariaDB [(none)]> use wordpress;
# 4. 查看数据库中的表
MariaDB [wordpress]> show tables;
# 5. 查看注册的用户信息
MariaDB [wordpress]> select * from wp_users;
MariaDB [wordpress]> select * from wp_users\G
# 6. 查看文章
MariaDB [wordpress]> select * from wp_posts\G

day02

拓扑及主机配置

客户端
代理
web1
web2
web3
nfs
数据库
主机角色主机名IP地址
clientclienteth0: 192.168.88.10/24
代理服务器proxyeth0: 192.168.88.5/24
eth1: 192.168.99.5/24
web服务器web1eth1: 192.168.99.11/24
web服务器web2eth1: 192.168.99.12/24
web服务器web3eth1: 192.168.99.13/24
数据库服务器databaseeth1: 192.168.99.21/24
NFS服务器nfseth1: 192.168.99.31/24

配置额外的web服务器

  • 初始化
[root@zzgrhel8 ~]# vm clone web{2..3}

[root@zzgrhel8 ~]# virsh console web2
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
localhost login: root
Password: a
# 执行以下命令,初始化
hostnamectl set-hostname web2
nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.12/24 autoconnect yes
nmcli connection down eth1
nmcli connection up eth1
echo a | passwd --stdin root

[root@localhost ~]# logout
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
web2 login:  # 按ctrl+]

[root@zzgrhel8 ~]# virsh console web3
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
localhost login: root
Password: a
# 执行以下命令,初始化
hostnamectl set-hostname web3
nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.13/24 autoconnect yes
nmcli connection down eth1
nmcli connection up eth1
echo a | passwd --stdin root

[root@localhost ~]# logout
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
web2 login:  # 按ctrl+]
  • 配置web服务器
# 配置yum
[root@web2 ~]# vim /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.99.240/dvd
enabled=1
gpgcheck=0
[root@web3 ~]# vim /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.99.240/dvd
enabled=1
gpgcheck=0

# 把web1的nginx打包拷贝到web2和web3上
[root@web1 ~]# cd /usr/local/
[root@web1 local]# tar czf /root/nginx.tar.gz nginx
[root@web1 local]# cd
[root@web1 ~]# scp nginx.tar.gz 192.168.99.12:/root/
[root@web1 ~]# ^12^13   # 将上一条命令的12换成13执行

# 在web2和web3上解压,实现nginx部署
[root@web2 ~]# tar xf nginx.tar.gz -C /usr/local/
[root@web3 ~]# tar xf nginx.tar.gz -C /usr/local/

# 把web1上的service文件拷贝到web2和web3上
[root@web1 ~]# scp /usr/lib/systemd/system/nginx.service 192.168.99.12:/usr/lib/systemd/system/
[root@web1 ~]# ^12^13

# 在web2和web3上启服务
[root@web2 ~]# systemctl daemon-reload 
[root@web2 ~]# systemctl enable nginx.service --now
[root@web2 ~]# ss -tlnp | grep :80
LISTEN     0      128          *:80
[root@web3 ~]# systemctl daemon-reload 
[root@web3 ~]# systemctl enable nginx.service --now
[root@web3 ~]# ss -tlnp | grep :80
LISTEN     0      128          *:80
  • 配置web2和web3支持php
[root@web2 ~]# yum install -y php php-fpm php-mysql
[root@web2 ~]# systemctl enable php-fpm --now

[root@web3 ~]# yum install -y php php-fpm php-mysql
[root@web3 ~]# systemctl enable php-fpm --now
  • 测试访问web2和web3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0QqKRGsv-1682339328434)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20220111105040496.png)]

  • 在web1、web2、web3上任意的一个页面上新建文章,另外的两台主机,也可以看到更新。因为3台web服务器新建文章时,都是把数据存入到数据库服务器了。

配置NFS服务器

  • 准备环境
[root@zzgrhel8 ~]# vm clone nfs

[root@zzgrhel8 ~]# virsh console nfs 
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
localhost login: root
Password: a

# 执行以下命令进行初始化
hostnamectl set-hostname nfs
nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.31/24 autoconnect yes
nmcli connection down eth1
nmcli connection up eth1
echo a | passwd --stdin root

[root@localhost ~]# logout
CentOS Linux 7 (Core)5
Kernel 3.10.0-862.el7.x86_64 on an x86_64
nfs login:  # 按ctrl+]
  • 配置NFS服务
[root@nfs ~]# vim /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.99.240/dvd
enabled=1
gpgcheck=0

# 安装nfs
[root@nfs ~]# yum install -y nfs-utils.x86_64 

# 配置共享
[root@nfs ~]# mkdir /web_share
[root@nfs ~]# vim /etc/exports
/web_share      192.168.99.0/24(rw,no_root_squash)
# rw表示读写权限
# no_root_squash,表示远程主机root创建的文件,属主属组就是root。默认会变成nfsnobody
[root@nfs ~]# exportfs -rv

# 启动服务。注意,NFS服务依赖rpcbind服务
[root@nfs ~]# systemctl enable rpcbind --now
[root@nfs ~]# ss -tlnp | grep :111
LISTEN     0      128          *:111
[root@nfs ~]# systemctl enable nfs --now
[root@nfs ~]# ss -tlnp | grep :2049
LISTEN     0      64           *:2049
# 验证
[root@nfs ~]# showmount -e
Export list for nfs:
/web_share 192.168.99.0/24
  • 迁移文件至nfs共享
# 1. 将网页目录保留权限,打压缩包
[root@web1 ~]# cd /usr/local/nginx/
[root@web1 nginx]# tar cpzf /root/html.tar.gz html

# 2. 拷贝文件至nfs服务器
[root@web1 ~]# scp html.tar.gz 192.168.99.31:/root/

# 3. 在nfs服务器上解压
[root@nfs ~]# tar xf html.tar.gz -C /web_share/

# 4. 删除web服务器html目录中的内容
[root@web1 ~]# rm -rf /usr/local/nginx/html/*
[root@web2 ~]# rm -rf /usr/local/nginx/html/*
[root@web3 ~]# rm -rf /usr/local/nginx/html/*

# 5. 此时,通过浏览器访问各web服务器,将会报403错误
# 6. 在各web服务器上挂载共享目录
[root@web1 ~]# yum install -y nfs-utils
[root@web1 ~]# echo '192.168.99.31:/web_share/html /usr/local/nginx/html nfs defaults 0 0' >> /etc/fstab 
[root@web1 ~]# mount -a
[root@web1 ~]# df -h /usr/local/nginx/html/
文件系统                      容量  已用  可用 已用% 挂载点
192.168.99.31:/web_share/html   30G  1.4G   29G    5% /usr/local/nginx/html

[root@web2 ~]# yum install -y nfs-utils
[root@web2 ~]# echo '192.168.99.31:/web_share/html /usr/local/nginx/html nfs defaults 0 0' >> /etc/fstab 
[root@web2 ~]# mount -a
[root@web2 ~]# df -h /usr/local/nginx/html/
文件系统                      容量  已用  可用 已用% 挂载点
192.168.99.31:/web_share/html   30G  1.4G   29G    5% /usr/local/nginx/html

[root@web3 ~]# yum install -y nfs-utils
[root@web3 ~]# echo '192.168.99.31:/web_share/html /usr/local/nginx/html nfs defaults 0 0' >> /etc/fstab 
[root@web3 ~]# mount -a
[root@web3 ~]# df -h /usr/local/nginx/html/
文件系统                      容量  已用  可用 已用% 挂载点
192.168.99.31:/web_share/html   30G  1.4G   29G    5% /usr/local/nginx/html

# 7. 此时,通过浏览器访问各web服务器,又将恢复正常
# 8. 在任意一台web服务器上新建文章,查看web是否同步
# 重启web1,若自动挂载不上,则可在rc.local文件中追加一条开机自动执行命令 
[root@web1 ~]# reboot
[root@web1 ~]# echo 'mount -a'  >>  /etc/rc.d/rc.local
[root@web1 ~]# chmod +x /etc/rc.d/rc.local

配置代理服务器

  • 准备环境
[root@zzgrhel8 ~]# vm clone proxy

[root@zzgrhel8 ~]# virsh console proxy 
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
localhost login: root
Password: a

# 执行以下命令进行初始化
hostnamectl set-hostname proxy
nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.5/24
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.5/24
nmcli connection down eth1
nmcli connection up eth1
nmcli connection down eth0
nmcli connection up eth0
echo a | passwd --stdin root

[root@localhost ~]# logout
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
proxy login:  # 按ctrl+]
  • 配置HAProxy服务器
[root@proxy ~]# yum install -y haproxy
[root@proxy ~]# vim /etc/haproxy/haproxy.cfg 
# 把63行到最后一行删除,然后追加以下内容
listen wordpress *:80
    balance roundrobin
    server web1 192.168.99.11:80 check inter 2000 rise 2 fall 3
    server web2 192.168.99.12:80 check inter 2000 rise 2 fall 3
    server web3 192.168.99.13:80 check inter 2000 rise 2 fall 3
[root@proxy ~]# systemctl enable haproxy.service --now
[root@proxy ~]# ss -tlnp | grep :80
LISTEN     0      128          *:80
  • 客户端访问http://192.168.88.5或http://192.168.99.5仍然可以正常访问

  • 为HAProxy配置监控页面

[root@proxy ~]# vim /etc/haproxy/haproxy.cfg 
# 在结尾追加以下内容
listen mon *:1080
    stats refresh 30s
    stats uri /mon       # "/mon"可以自己定义
    stats auth admin:admin
[root@proxy ~]# systemctl restart haproxy
# 访问http://192.168.88.5:1080/mon。不断访问http://192.168.88.5,在监控页可以看到不同的服务器有连接数。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vNgDoYQv-1682339328434)(/root/下载/NSD2302笔记资料(整理)/第二阶段/nsd2210/imgs/image-20220111164543156.png)]

配置名称解析

  • 通过本机hosts文件实现名称解析
[root@zzgrhel8 ~]# echo -e "192.168.99.5\twww.lab.com" >> /etc/hosts

附:如果客户端是windows主机,则使用记事本程序打开C:\windows\System32\drivers\etc\hosts添加名称解析

  • 访问http://www.lab.com

  • 当点击http://www.lab.com页面中任意链接时,地址栏上的地址,都会变成192.168.99.11。通过以下方式修复它:

# 在nfs服务器上修改配置文件
[root@nfs ~]# vim /web_share/html/wp-config.php 
# 在define('DB_NAME', 'wordpress')它的上方添加以下两行:
define('WP_SITEURL', 'http://www.lab.com');
define('WP_HOME', 'http://www.lab.com');

day03

深入理解程序的数据存储

  • 程序在保存文字数据时,是存到数据库中了
  • 序在保存非文字数据(如图片、视频、压缩包等)时,是存到相应的文件目录中

验证

  • 发一篇文章,文章内容包含文字和图片
  • 在NFS上查看图片
[root@nfs 01]# ls /web_share/html/wp-content/uploads/
2022
[root@nfs 01]# ls /web_share/html/wp-content/uploads/2022/01/
html_css.jpeg
  • 在数据库服务器上查看文字数据
[root@database ~]# mysql
MariaDB [(none)]> use wordpress;
MariaDB [wordpress]> select * from wp_posts\G

安装额外的调度器

  • proxy2:eth0->192.168.88.6/24;eth1 -> 192.168.99.6/24
  • 准备环境
[root@zzgrhel8 ~]# vm clone proxy2

[root@zzgrhel8 ~]# virsh console proxy2 
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
localhost login: root
Password: a

# 执行以下命令进行初始化
hostnamectl set-hostname proxy2
nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.6/24
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.6/24
nmcli connection down eth1
nmcli connection up eth1
nmcli connection down eth0
nmcli connection up eth0
echo a | passwd --stdin root

[root@localhost ~]# logout
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
proxy2 login:  # 按ctrl+]
  • 配置HAProxy服务器
[root@proxy2 ~]# yum install -y haproxy
# 将第1台haproxy配置文件拷贝到haproxy2
[root@proxy ~]# scp /etc/haproxy/haproxy.cfg 192.168.99.6:/etc/haproxy/
# 起动第2台haproxy2的服务
[root@proxy2 ~]# systemctl enable haproxy.service --now
[root@proxy2 ~]# ss -tlnp | grep :80
LISTEN     0      128          *:80
  • 客户端访问http://192.168.88.6

在调度器上配置Keepalived

  • 安装并修改配置文件
[root@proxy ~]# yum install -y keepalived.x86_64 
[root@proxy2 ~]# yum install -y keepalived.x86_64 
[root@proxy ~]# vim /etc/keepalived/keepalived.conf 
  1 ! Configuration File for keepalived
  2 
  3 global_defs {
  4    notification_email {
  5      acassen@firewall.loc
  6      failover@firewall.loc
  7      sysadmin@firewall.loc
  8    }
  9    notification_email_from Alexandre.Cassen@firewall.loc
 10    smtp_server 192.168.200.1
 11    smtp_connect_timeout 30
 12    router_id proxy1    # 改这里 
 13    vrrp_iptables       # 加一行
 14    vrrp_skip_check_adv_addr
 15    vrrp_strict
 16    vrrp_garp_interval 0
 17    vrrp_gna_interval 0
 18 }
 19 
 20 vrrp_instance VI_1 {
 21     state MASTER
 22     interface eth0            # 注意网卡名
 23     virtual_router_id 51
 24     priority 100
 25     advert_int 1
 26     authentication {
 27         auth_type PASS
 28         auth_pass 1111
 29     }
 30     virtual_ipaddress {
 31         192.168.88.80           # VIP地址
 32     }
 33 }
[root@proxy ~]# systemctl enable keepalived.service --now
[root@proxy ~]# ip a s eth0 | grep '88\.80'
    inet 192.168.88.80/32 scope global eth0

# 修改proxy2的配置,并启动
[root@proxy2 ~]# vim /etc/keepalived/keepalived.conf 
  1 ! Configuration File for keepalived
  2 
  3 global_defs {
  4    notification_email {
  5      acassen@firewall.loc
  6      failover@firewall.loc
  7      sysadmin@firewall.loc
  8    }
  9    notification_email_from Alexandre.Cassen@firewall.loc
 10    smtp_server 192.168.200.1
 11    smtp_connect_timeout 30
 12    router_id proxy2      # 改id
 13    vrrp_iptables         # 加一行
 14    vrrp_skip_check_adv_addr
 15    vrrp_strict
 16    vrrp_garp_interval 0
 17    vrrp_gna_interval 0
 18 }
 19 
 20 vrrp_instance VI_1 {
 21     state BACKUP           # 改状态
 22     interface eth0         # 注意网卡名
 23     virtual_router_id 51
 24     priority 80            # 优先级低于MASTER
 25     advert_int 1
 26     authentication {
 27         auth_type PASS
 28         auth_pass 1111
 29     }
 30     virtual_ipaddress {
 31         192.168.88.80        # VIP地址
 32     }
 33 }
[root@proxy2 ~]# systemctl enable keepalived.service --now
[root@proxy2 ~]# ip a s eth0 | grep '88\.80'   # 查不到
  • 客户端访问http://192.168.88.80
  • 修改客户端的名称解析
[root@zzgrhel8 ~]# vim /etc/hosts
... ...
192.168.88.80    www.lab.com
  • 客户端访问http://www.lab.com

验证高可用

  • 在浏览器所在的主机上查看www.lab.com的地址
[root@zzgrhel8 ~]# ping -c2 www.lab.com
PING www.lab.com (192.168.88.80) 56(84) bytes of data.
  • 验证VIP
# vip在proxy上
[root@proxy ~]# ip a s eth0 | grep '88\.80'
    inet 192.168.88.80/32 scope global eth0
[root@proxy2 ~]# ip a s eth0 | grep '88\.80'   # 没有vip

# 模拟proxy故障,将其关机
[root@proxy ~]# shutdown -h now
# 查看proxy2上有没有出现vip
[root@proxy2 ~]# ip a s eth0 | grep '88\.80'
    inet 192.168.88.80/32 scope global eth0    # 已经出现vip
# 浏览器上继续访问http://www.lab.com,服务仍然可用

# 重新启动proxy,vip将会切回
[root@proxy ~]# ip a s eth0 | grep '88\.80'
    inet 192.168.88.80/32 scope global eth0
[root@proxy2 ~]# ip a s eth0 | grep '88\.80'   # vip消失
1. keepalived检查本机的80端口(haproxy运行端口),如果正在监听80,则keepalived拥有vip;如果没有80端口,则切换ip到BACKUP
2. keepalived使用脚本检查80端口,如果有80则退出码为0,否则为1
3. keepalived使用脚本,发现脚本推出码是1,则切换ip
4. 如果脚本退出码为0,则重新成MASTER,拥有ip
[root@proxy ~]# vim /etc/keepalived/check_haproxy.sh
#!/bin/bash
ss -tlnp | grep :88 &> /dev/null && exit 0 || exit 1
[root@proxy ~]# vim /etc/keepalived/keepalived.conf
# 在virtual_ipaddpress 下方添加:
track_script {          
    check_haproxy
}
# 在global和vrrp_instance之间加入:
vrrp_script check_haproxy {
    script "/etc/keepalived/check_haproxy.sh"
    interval 2
}
[root@proxy ~]# chmod +x /etc/keepalived/check_haproxy.sh

配置ceph

主机角色主机名IP地址
ceph节点1node1192.168.99.41/24
ceph节点2node2192.168.99.42/24
ceph节点3node3192.168.99.43/24
  • 每台机器还要再添加2块20GB的硬盘
[root@zzgrhel8 ~]# vm clone node{1..3}

[root@zzgrhel8 ~]# virsh console node1 
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
localhost login: root
Password: a

# 执行以下命令进行初始化
hostnamectl set-hostname node1
nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.41/24
nmcli connection down eth1
nmcli connection up eth1
echo a | passwd --stdin root

[root@localhost ~]# logout
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
localhost login:  # 按ctrl+]

[root@zzgrhel8 ~]# virsh console node2
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
localhost login: root
Password: a

# 执行以下命令进行初始化
hostnamectl set-hostname node2
nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.42/24
nmcli connection down eth1
nmcli connection up eth1
echo a | passwd --stdin root

[root@localhost ~]# logout
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
localhost login:  # 按ctrl+]

[root@zzgrhel8 ~]# virsh console node3
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
localhost login: root
Password: a

# 执行以下命令进行初始化
hostnamectl set-hostname node3
nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.43/24
nmcli connection down eth1
nmcli connection up eth1
echo a | passwd --stdin root

[root@localhost ~]# logout
CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64
localhost login:  # 按ctrl+]

# 查看3台机器的硬盘
[root@node1 ~]# lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  30G  0 disk 
└─vda1 253:1    0  30G  0 part /
vdb    253:16   0  20G  0 disk 
vdc    253:32   0  20G  0 disk 

[root@node2 ~]# lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  30G  0 disk 
└─vda1 253:1    0  30G  0 part /
vdb    253:16   0  20G  0 disk 
vdc    253:32   0  20G  0 disk 

[root@node3 ~]# lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  30G  0 disk 
└─vda1 253:1    0  30G  0 part /
vdb    253:16   0  20G  0 disk 
vdc    253:32   0  20G  0 disk 
  • 配置ceph yum源
# 在node1-3节点上配置yum
[root@node1 ~]# cat /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.99.240/dvd
enabled=1
gpgcheck=0

[root@node1 ~]# vim /etc/yum.repos.d/ceph.repo
[osd]
name=ceph osd
baseurl=ftp://192.168.99.240/ceph/OSD
enabled=1
gpgcheck=0

[mon]
name=ceph mon
baseurl=ftp://192.168.99.240/ceph/MON
enabled=1
gpgcheck=0

[tools]
name=ceph tools
baseurl=ftp://192.168.99.240/ceph/Tools
enabled=1
gpgcheck=0

[root@node1 ~]# yum repolist
... ...
repolist: 10,174

[root@node1 ~]# scp /etc/yum.repos.d/ceph.repo 192.168.99.42:/etc/yum.repos.d/
[root@node1 ~]# ^42^43
  • 各节点务必关闭selinux和防火墙
  • 集群安装前的准备工作
# ceph为我们提供了一个ceph-deploy工具,可以在某一节点上统一操作全部节点
# 将Node1作为部署节点,将来的操作都在node1上进行。这样,需要node1能够免密操作其他主机
[root@node1 ~]# ssh-keygen    # 生成密钥对
[root@node1 ~]# for i in {41..43}
> do
> ssh-copy-id 192.168.99.$i
> done

# 在所有的主机上配置名称解析。注意,解析的名字必须是该机器的主机名
[root@node1 ~]# for i in {1..3}
> do
> echo -e "192.168.99.4$i\tnode$i" >> /etc/hosts
> done
[root@node1 ~]# cat /etc/hosts
... ...
192.168.99.41	node1
192.168.99.42	node2
192.168.99.43	node3

[root@node2 ~]# for i in {1..3}; do echo -e "192.168.99.4$i\tnode$i" >> /etc/hosts; done
[root@node3 ~]# for i in {1..3}; do echo -e "192.168.99.4$i\tnode$i" >> /etc/hosts; done
  • 安装集群
# 在3个节点上安装软件包
[root@node1 ~]# for i in node{1..3}
> do
> ssh $i yum install -y ceph-mon ceph-osd ceph-mds ceph-radosgw
> done


# 配置pubserver为ntp服务器
[root@pubserver ~]# yum install -y chrony
[root@pubserver ~]# vim /etc/chrony.conf 
allow 192.168.99.0/24    # 授权192.168.99.0/24可以时钟同步
local stratum 10   # 即使没有从一个源同步时钟,也为其他主机提供时间
[root@pubserver ~]# systemctl restart chronyd

# 配置node1-3成为pubserver的NTP客户端
[root@node1 ~]# for i in node{1..3}
> do
> ssh $i yum install -y chrony
> done
[root@node1 ~]# vim /etc/chrony.conf
# 将所有的server注释加上以下内容
server 192.168.99.240 iburst
[root@node1 ~]# scp /etc/chrony.conf node2:/etc/
[root@node1 ~]# scp /etc/chrony.conf node3:/etc/
[root@node1 ~]# for i in node{1..3}
> do
> ssh $i systemctl restart chronyd
> done

# 验证时间是否同步  node1前面有^*表示同步成功
[root@node1 ~]# chronyc sources -v
... ...
^* pubserver                      10   6    17    40  -4385ns[-1241us] +/-  162us

# 在node1上安装ceph-deploy部署工具
[root@node1 ~]# yum install -y ceph-deploy
# 查看使用帮助
[root@node1 ~]# ceph-deploy --help
[root@node1 ~]# ceph-deploy mon --help   # 查看mon子命令的帮助

# 创建ceph-deploy工作目录
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster

# 创建一个新的集群。
[root@node1 ceph-cluster]# ceph-deploy new node{1..3}
[root@node1 ceph-cluster]# ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring
[root@node1 ceph-cluster]# tree .
.
├── ceph.conf               # 集群配置文件
├── ceph-deploy-ceph.log    # 日志文件
└── ceph.mon.keyring        # 共享密钥

# 开启分层快照功能。
[root@node1 ceph-cluster]# vim ceph.conf   # 尾部追加一行如下
rbd_default_features = 1

# 初始化monitor
[root@node1 ceph-cluster]# ceph-deploy mon create-initial
[root@node1 ceph-cluster]# systemctl status ceph-mon*
● ceph-mon@node1.service .. ..
[root@node2 ~]# systemctl status ceph-mon*
● ceph-mon@node2.service ... ...
[root@node3 ~]# systemctl status ceph-mon*
● ceph-mon@node3.service ... ...
# 注意:这些服务在30分钟之内只能启动3次,超过报错。

# 查看集群状态
[root@node1 ceph-cluster]# ceph -s
     health HEALTH_ERR   # 因为还没有硬盘,所以状态是HEALTH_ERR


# 创建OSD
[root@node1 ceph-cluster]# ceph-deploy disk --help
# 初始化各主机的硬盘。vmware应该是sdb和sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap node1:vdb node1:vdc 
[root@node1 ceph-cluster]# ceph-deploy disk zap node2:vdb node2:vdc 
[root@node1 ceph-cluster]# ceph-deploy disk zap node3:vdb node3:vdc 

# 创建存储空间。ceph会硬盘分为两个分区,一个分区大小为5GB,用于保存ceph的内部资源;另一个分区是剩余全部空间
[root@node1 ceph-cluster]# ceph-deploy osd --help
[root@node1 ceph-cluster]# ceph-deploy osd create node1:vd{b,c}
[root@node1 ceph-cluster]# lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  30G  0 disk 
└─vda1 253:1    0  30G  0 part /
vdb    253:16   0  20G  0 disk 
├─vdb1 253:17   0  15G  0 part /var/lib/ceph/osd/ceph-0
└─vdb2 253:18   0   5G  0 part 
vdc    253:32   0  20G  0 disk 
├─vdc1 253:33   0  15G  0 part /var/lib/ceph/osd/ceph-1
└─vdc2 253:34   0   5G  0 part 
# 将会出现2个osd进程,因为有两块硬盘用于ceph
[root@node1 ceph-cluster]# systemctl status ceph-osd*

# 继续初始化其他节点的OSD
[root@node1 ceph-cluster]# ceph-deploy osd create node2:vd{b,c}
[root@node1 ceph-cluster]# ceph-deploy osd create node3:vd{b,c}

# 查看集群状态
[root@node1 ceph-cluster]# ceph -s
     health HEALTH_OK     # 状态是HEALTH_OK表示一切正常

配置ceph fs

  • 安装并启用mds
# 在node1配置MDS
[root@node1 ~]# cd ceph-cluster/
[root@node1 ceph-cluster]# ceph-deploy mds create node3
[root@node3 ~]# systemctl status ceph-mds*

# 1. 新建一个名为data1的存储池,目的是存储数据,有100个PG
[root@node1 ceph-cluster]# ceph osd pool create data1 100

# 2. 新建一个名为metadata1的存储池,目的是存储元数据
[root@node1 ceph-cluster]# ceph osd pool create metadata1 100

# 3. 创建名为myfs1的cephfs,数据保存到data1中,元数据保存到metadata1中
[root@node1 ceph-cluster]# ceph fs new myfs1 metadata1 data1

# 查看存储池
[root@node1 ceph-cluster]# ceph osd lspools 
0 rbd,1 data1,2 metadata1,
[root@node1 ceph-cluster]# ceph df
GLOBAL:
    SIZE       AVAIL      RAW USED     %RAW USED 
    92093M     91574M         519M          0.56 
POOLS:
    NAME          ID     USED       %USED     MAX AVAIL     OBJECTS 
    rbd           0      86469k      0.28        30488M        2606 
    data1         1           0         0        30488M           0 
    metadata1     2        2068         0        30488M          20
    
# 查看创建文件系统
[root@node1 ceph-cluster]# ceph fs ls
name: myfs1, metadata pool: metadata1, data pools: [data1 ]

数据从NFS迁移到ceph fs

  • 停止使用NFS共享
# 停止nginx服务
[root@web1 ~]# systemctl stop nginx
[root@web2 ~]# systemctl stop nginx
[root@web3 ~]# systemctl stop nginx

# 卸载NFS目录
[root@web1 ~]# umount /usr/local/nginx/html/
[root@web2 ~]# umount /usr/local/nginx/html/
[root@web3 ~]# umount /usr/local/nginx/html/

# 删除nfs自动挂载
[root@web1 ~]# sed -i '$d' /etc/fstab 
[root@web2 ~]# sed -i '$d' /etc/fstab 
[root@web3 ~]# sed -i '$d' /etc/fstab 
  • 配置web服务器使用ceph fs
# 1. 配置各web服务器的yum,安装ceph客户端软件
[root@node1 ~]# scp /etc/yum.repos.d/ceph.repo 192.168.99.11:/etc/yum.repos.d/
[root@node1 ~]# ^11^12
[root@node1 ~]# ^12^13

[root@web1 ~]# yum install -y ceph-common libcephfs1
[root@web2 ~]# yum install -y ceph-common libcephfs1
[root@web3 ~]# yum install -y ceph-common libcephfs1

# 2. 查看连接ceph的用户名和密码
[root@node1 ~]# cat /etc/ceph/ceph.client.admin.keyring 
[client.admin]
	key = AQAah95hfWQFOhAAg3hcQ2FtFuCYB1lRKJMCLQ==

# 3. 挂载ceph fs
[root@web1 ~]# vim /etc/fstab   # 注意以下是一行
192.168.99.41:6789,192.168.99.42:6789,192.168.99.43:6789:/ /usr/local/nginx/html  ceph   _netdev,name=admin,secret=AQAah95hfWQFOhAAg3hcQ2FtFuCYB1lRKJMCLQ==  0  0
[root@web1 ~]# mount -a
[root@web1 ~]# df -h

[root@web2 ~]# vim /etc/fstab   # 注意以下是一行
192.168.99.41:6789,192.168.99.42:6789,192.168.99.43:6789:/ /usr/local/nginx/html  ceph  _netdev,name=admin,secret=AQAah95hfWQFOhAAg3hcQ2FtFuCYB1lRKJMCLQ==  0  0
[root@web2 ~]# mount -a
[root@web2 ~]# df -h

[root@web3 ~]# vim /etc/fstab   # 注意以下是一行
192.168.99.41:6789,192.168.99.42:6789,192.168.99.43:6789:/ /usr/local/nginx/html  ceph  _netdev,name=admin,secret=AQAah95hfWQFOhAAg3hcQ2FtFuCYB1lRKJMCLQ==  0  0
[root@web3 ~]# mount -a
[root@web3 ~]# df -h
  • 将nfs的网站程序传到ceph
[root@nfs ~]# cd /web_share/html/
[root@nfs html]# tar czpf /root/web.tar.gz ./*
[root@nfs html]# scp /root/web.tar.gz 192.168.99.11:/root/

[root@web1 ~]# tar xf web.tar.gz -C /usr/local/nginx/html/
  • 启动所有的nginx服务
[root@web1 ~]# systemctl start nginx
[root@web2 ~]# systemctl start nginx
[root@web3 ~]# systemctl start nginx
  • 访问http://www.lab.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

root@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值