Linux云计算 |【第四阶段】PROJECT2-DAY1

综合项目内容:

部署数据库服务MySQL、部署共享存储NFS、配置网站服务、测试配置

 

一、项目拓扑结构

PROJECT1回顾:

PROJECT2-DAY1拓扑:

服务器IP及角色规划:

主机名

IP地址

角色

mysql11

192.168.4.11

MySQL数据库服务器

mysql22

192.168.4.22

MySQL数据库服务器

maxcale77

192.168.4.77

读写分离服务器

nfs30

192.168.4.30

共享存储服务器

web33

192.168.4.33

网站服务器

涉及技术点:

① 逻辑卷

② 数据库服务

③ MySQL主从同步

④ 数据读写分离

⑤ NFS共享存储

 

案例1:配置逻辑卷

因数据库服务器在未来数据量不断增大,需要为2台数据库服务器分别添加2块5G磁盘,且配置逻辑卷支持扩容;

具体配置如下:

  • ① 添加磁盘
  • ② 磁盘分区
  • ③ 创建PV、VG、LV
  • ④ 格式化LV(文件系统类型:xfs)

步骤1:磁盘分区

mysql11为例操作

① 给2台数据库服务器添加2块5G的磁盘

[root@mysql11 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    5G  0 disk
sdc               8:32   0    5G  0 disk

② 磁盘分区,每块磁盘分1个区即可

[root@mysql11 ~]# fdisk -l /dev/sdb     //检查磁盘分区大小
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
 
[root@mysql11 ~]# fdisk -l /dev/sdc     //检查磁盘分区大小
磁盘 /dev/sdc:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

[root@mysql11 ~]# fdisk /dev/sdb     //进行磁盘分区
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x8fa4682c 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-10485759,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):
将使用默认值 10485759
分区 1 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
 
[root@mysql11 ~]# fdisk /dev/sdc     //进行磁盘分区
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x04a10884 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-10485759,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):
将使用默认值 10485759
分区 1 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。

 ③ 查看分区情况

[root@mysql11 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    5G  0 disk
└─sdb1            8:17   0    5G  0 part
sdc               8:32   0    5G  0 disk
└─sdc1            8:33   0    5G  0 part
…

步骤2:创建LV逻辑卷

① 安装提供命令的软件(lvm2)

[root@mysql11 ~]# rpm -q lvm2 || yum -y install lvm2
lvm2-2.02.177-4.el7.x86_64

② 创建PV

[root@mysql11 ~]# pvcreate /dev/sdb1 /dev/sdc1
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.
  
[root@mysql11 ~]# pvscan
  PV /dev/sda2   VG centos          lvm2 [<19.00 GiB / 0    free]
  PV /dev/sdb1                      lvm2 [<5.00 GiB]
  PV /dev/sdc1                      lvm2 [<5.00 GiB]
  Total: 3 [28.99 GiB] / in use: 1 [<19.00 GiB] / in no VG: 2 [<10.00 GiB]

③ 创建VG

[root@mysql11 ~]# vgcreate vg0 /dev/sdb1 /dev/sdc1    //创建vg(名称vg0)
  Volume group "vg0" successfully created
  
[root@mysql11 ~]# vgdisplay vg0
  --- Volume group ---
  VG Name               vg0
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               9.99 GiB      //总大小
  PE Size               4.00 MiB      //PE总个数
  Total PE              2558
  Alloc PE / Size       0 / 0
  Free  PE / Size       2558 / 9.99 GiB
  VG UUID               WAR13a-umgc-C5tX-yLXa-M3o2-N35N-FGq7b1

④ 创建LV

[root@mysql11 ~]# lvcreate -L 9.99G -n lv0 vg0    //创建LV名称为lv0大小9.99G
  Rounding up size to full physical extent 9.99 GiB
  Logical volume "lv0" created.
  
[root@mysql11 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    5G  0 disk
└─sdb1            8:17   0    5G  0 part
  └─vg0-lv0     253:2    0   10G  0 lvm
sdc               8:32   0    5G  0 disk
└─sdc1            8:33   0    5G  0 part
  └─vg0-lv0     253:2    0   10G  0 lvm
...

[root@mysql11 ~]# lvdisplay /dev/vg0/lv0   //查看lv0信息
  --- Logical volume ---
  LV Path                /dev/vg0/lv0
  LV Name                lv0
  VG Name                vg0
  LV UUID                R4q7uX-K96d-9Nw2-9HPV-u0lb-FeDs-Qs8N0i
  LV Write Access        read/write
  LV Creation host, time mysql11, 2021-06-22 10:32:19 +0800
  LV Status              available
  # open                 0
  LV Size                9.99 GiB    //总大小
  Current LE             2558
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

⑤ 格式化逻辑卷

[root@mysql11 ~]# mkfs.xfs /dev/vg0/lv0     //格式化为xfs文件系统
meta-data=/dev/vg0/lv0           isize=512    agcount=4, agsize=654848 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2619392, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@mysql11 ~]# blkid /dev/vg0/lv0    //查看文件系统类型
/dev/vg0/lv0: UUID="7974e828-747a-4945-8bf7-89c0c8a7416d" TYPE="xfs"

 

案例2:配置数据库服务器

具体操作如下:

① 安装MySQL软件

② 挂载LV分区

③ 启动服务

④ 初始化管理员密码并登录


步骤1:安装MySQL

mysql11为例

① 解压软件包(参考:/linux-soft/4/mysql-5.7.17.tar)

[root@mysql11 ~]# tar -xvf mysql-5.7.17.tar
./mysql-community-client-5.7.17-1.el7.x86_64.rpm
./mysql-community-common-5.7.17-1.el7.x86_64.rpm
./mysql-community-devel-5.7.17-1.el7.x86_64.rpm
./mysql-community-embedded-5.7.17-1.el7.x86_64.rpm
./mysql-community-embedded-compat-5.7.17-1.el7.x86_64.rpm
./mysql-community-embedded-devel-5.7.17-1.el7.x86_64.rpm
./mysql-community-libs-5.7.17-1.el7.x86_64.rpm
./mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm
./mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64.rpm
./mysql-community-server-5.7.17-1.el7.x86_64.rpm
./mysql-community-test-5.7.17-1.el7.x86_64.rpm

② 安装MySQL软件

[root@mysql11 ~]# yum -y install mysql-community-*
[root@mysql11 ~]# id mysql
uid=27(mysql) gid=27(mysql) 组=27(mysql)

步骤2:挂载LV设备,设置开机自动挂载

[root@mysql11 ~]# vim /etc/fstab
/dev/vg0/lv0 /var/lib/mysql xfs defaults 0 0    //将格式化后的逻辑卷给数据库目录
[root@mysql11 ~]# mount -a
[root@mysql11 ~]# mount | grep "/var/lib/mysql"
/dev/mapper/vg0-lv0 on /var/lib/mysql type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

步骤3:启动MySQL服务,并设置开机自启

[root@mysql11 ~]# systemctl start mysqld
[root@mysql11 ~]# ls /var/lib/mysql

[root@mysql11 ~]# systemctl enable mysqld
[root@mysql11 ~]# ss -nlptu | grep :3306
tcp    LISTEN     0      80       :::3306                 :::*                   users:(("mysqld",pid=1948,fd=22))
[root@mysql11 ~]# df -h | grep "var/lib/mysql"
/dev/mapper/vg0-lv0       10G  166M  9.9G    2% /var/lib/mysql

步骤4:初始化数据库

① 获取随机密码并修改登录密码

[root@mysql11 ~]# grep 'password' /var/log/mysqld.log
2021-06-22T03:06:32.295716Z 1 [Note] A temporary password is generated for root@localhost: lfMRDGwDP5_E
[root@mysql11 ~]# mysqladmin -uroot -p'lfMRDGwDP5_E' password '123qqq...A'

② 新密码登录

[root@mysql11 ~]# mysql -uroot -p123qqq...A
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
mysql> exit
Bye

 

案例3:配置主从同步

配置步骤如下:

1)配置主服务器

启用binlog日志、重启服务、repluser用户授权、查看binlog日志信息

2)配置从服务器

指定server_id、重启服务、指定主服务器信息、启动Slave进程、查看Slave状态信息


步骤1:配置主服务器

mysql11操作

① 修改配置文件,启用binlog日志

[root@mysql11 ~]# vim /etc/my.cnf
[mysqld]
server_id=11
log_bin=master11
…
[root@mysql11 ~]# systemctl restart mysqld
[root@mysql11 ~]# ls /var/lib/mysql/master11.*
/var/lib/mysql/master11.000001  /var/lib/mysql/master11.index

② 授予从服务器同步复制用户(repluser

mysql> grant replication slave on *.* to repluser@'%' identified by '123qqq...A';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master11.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

步骤2:配置从服务器

mysql22操作

① 修改配置文件,指定本服务器的server_id

[root@mysql22 ~]# vim /etc/my.cnf
[mysqld]
server_id=22
[root@mysql22 ~]# systemctl restart mysqld

② 指定主服务器信息

[root@mysql22 ~]# mysql -uroot -p123qqq...A
mysql> change master to
    -> master_host='192.168.4.11',
    -> master_user='repluser',
    -> master_password='123qqq...A',
    -> master_log_file='master11.000001',
    -> master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

③ 启动Slave进程

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

④ 查看状态信息

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.4.11
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master11.000001
          Read_Master_Log_Pos: 441
               Relay_Log_File: mysql22-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master11.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

扩展:查看状态信息

[root@mysql22 ~]# mysql -uroot -p123qqq...A -e "show slave status\G" | grep -i yes
mysql: [Warning] Using a password on the command line interface can be insecure.
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
 
[root@mysql22 ~]# mysql -uroot -p123qqq...A -e "show slave status\G" | grep -i Master_host
mysql: [Warning] Using a password on the command line interface can be insecure.
                  Master_Host: 192.168.4.11

案例4:配置读写分离服务

maxscale77操作

配置步骤如下:

① 安装maxscale软件

② 修改配置文件

③ 配置数据库服务器,授权相关maxscale用户(监控用户、路由用户)

④ 启动服务

⑤ 查看服务状态

⑥ 查看监控信息

步骤1:配置读写分离服务

① 安装maxscale软件(参考:/linux-soft/4/ maxscale-2.1.2-1.rhel.7.x86_64.rpm)

[root@maxscale77 ~]# rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm
警告:maxscale-2.1.2-1.rhel.7.x86_64.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID 8167ee24: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:maxscale-2.1.2-1                 ################################# [100%]
[root@maxscale77 ~]# id maxscale
uid=997(maxscale) gid=995(maxscale) 组=995(maxscale)
[root@maxscale77 ~]# ls /etc/maxscale.cnf     //主配置文件
/etc/maxscale.cnf
[root@maxscale77 ~]# ls /var/log/maxscale/    //日志目录

② 修改配置文件

[root@maxscale77 ~]# vim /etc/maxscale.cnf
 
[maxscale]    //服务线程数量
threads=auto
 
[server1]     //第1台数据库服务器
type=server
address=192.168.4.11
port=3306
protocol=MySQLBackend
 
[server2]     //第2台数据库服务器
type=server
address=192.168.4.22
port=3306
protocol=MySQLBackend
 
[MySQL Monitor]   //指定监控数据库服务器server1和server2
type=monitor
module=mysqlmon
servers=server1,server2
user=mysqlmon      //监控用户
passwd=123qqq...A   //密码
monitor_interval=10000
 
[Read-Write Service]    //定义读写分离服务
type=service
router=readwritesplit
servers=server1,server2
user=mysqlrouter     //路由用户
passwd=123qqq...A   //密码
max_slave_connections=100%
 
[MaxAdmin Service]    //定义管理服务
type=service
router=cli
 
[Read-Write Listener]    //定义读写分离服务端口
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006     //端口号
 
[MaxAdmin Listener]    //定义管理服务端口
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4016     //端口号

步骤2:配置主数据库服务器,授权maxscale相关用户

mysql11操作

[root@mysql11 ~]# mysql -uroot -p123qqq...A

① 创建监控用户(授予权限:replication slave、replication client,所有库所有表)

mysql> grant replication slave,replication client on *.* to maxscalemon@'%' identified by '123qqq...A';
Query OK, 0 rows affected, 1 warning (0.00 sec)

② 创建路由用户(授予权限:select,Mysql库的所有表)

mysql> grant select on mysql.* to maxscalerouter@'%' identified by '123qqq...A';
Query OK, 0 rows affected, 1 warning (0.00 sec)

③ 从服务器查看授权用户(mysql22操作)

[root@mysql22 ~]# mysql -uroot -p123qqq...A -e "select user,host from mysql.user where user like 'maxscale%'"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------+------+
| user           | host |
+----------------+------+
| maxscalemon    | %    |
| maxscalerouter | %    |
+----------------+------+

步骤3:启动maxscale服务

① 启动服务

[root@maxscale77 ~]# systemctl start maxscale.service   //或maxscale -f /etc/maxscale.cnf

② 查看服务信息(进程和端口)

[root@maxscale77 ~]# ps -C maxscale
   PID TTY          TIME CMD
 11376 ?        00:00:00 maxscale
[root@maxscale77 ~]# ss -nlptu | grep maxscale
tcp    LISTEN     0      128      :::4006                 :::*                   users:(("maxscale",pid=11376,fd=11))
tcp    LISTEN     0      128      :::4016                 :::*                   users:(("maxscale",pid=11376,fd=12))

③ 在maxscale服务本机访问管理服务,查看监控信息

[root@maxscale77 ~]# maxadmin -uadmin -pmariadb -P4016   //默认管理用户admin,密码mariadb
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.4.11    |  3306 |           0 | Master, Running
server2            | 192.168.4.22    |  3306 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
MaxScale> exit

验证读写分离测试

# 在mysql11主服务器上创建用于连接数据库的用户

mysql> grant all on *.* to tom@'%' identified by 'NSD2021@tedu.cn';
Query OK, 0 rows affected, 1 warning (0.00 sec)

# 使用客户端192.168.2.5访问Maxscale服务器对主从数据库进行读写操作测试(端口4006)

[root@localhost ~]# mysql -utom -pNSD2021@tedu.cn -h192.168.2.17 -P4006

mysql> select @@hostname;   //查询测试
+------------+
| @@hostname |
+------------+
| mysql22    |
+------------+
1 row in set (0.00 sec)

mysql> create database testdb default charset utf8mb4;    //写入测试
Query OK, 1 row affected (0.00 sec)
mysql> create table testdb.testtable(id int primary key,name varchar(20));
Query OK, 0 rows affected (0.00 sec)
mysql> desc testdb.testtable;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
 
mysql> insert into testdb.testtable values(1,"testuser");
Query OK, 1 row affected (0.00 sec)
mysql> select * from testdb.testtable;
+----+----------+
| id | name     |
+----+----------+
|  1 | testuser |
+----+----------+
1 row in set (0.00 sec)

 # 登录mysql22从服务器mysql22查看是否同步内容(mysql22操作)

mysql> select * from testdb.testtable;
+----+----------+
| id | name     |
+----+----------+
|  1 | testuser |
+----+----------+
1 row in set (0.00 sec)

案例5:准备NFS服务存储磁盘

nfs30操作

具体配置如下:

① 添加磁盘(大小3G)

② 磁盘分区

③ 格式化(xfs文件系统)

④ 创建挂载目录(mkdir /sitedir)

⑤ 配置开机挂载(挂载磁盘)

⑥ 查看挂载信息


步骤1:磁盘分区

① 给NFS服务器主机添加1块3G的磁盘

[root@nfs30 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    3G  0 disk
…

② 磁盘分区,分1个区即可

[root@nfs30 ~]# fdisk -l /dev/sdb     //查看磁盘信息
磁盘 /dev/sdb:3221 MB, 3221225472 字节,6291456 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

[root@nfs30 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x5b74a26b 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-6291455,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-6291455,默认为 6291455):
将使用默认值 6291455
分区 1 已设置为 Linux 类型,大小设为 3 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。

[root@nfs30 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    3G  0 disk
└─sdb1            8:17   0    3G  0 part

③ 格式化

[root@nfs30 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=196544 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=786176, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@nfs30 ~]# blkid /dev/sdb1
/dev/sdb1: UUID="1f05edf6-d5f7-4276-9b6e-3d8cd86b8d5f" TYPE="xfs"

步骤2:挂载磁盘

[root@nfs30 ~]# mkdir /sitedir    //创建挂载目录
[root@nfs30 ~]# vim /etc/fstab   //修改配置文件
/dev/sdb1 /sitedir xfs defaults 0 0
[root@nfs30 ~]# chmod o+w /sitedir/    //赋予写权限
[root@nfs30 ~]# mount -a     //加载文件中所有未加载的设备
[root@nfs30 ~]# mount | grep "/sitedir"   //查看加载信息
/dev/sdb1 on /sitedir type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

案例6:配置NFS服务

nfs30操作

具体配置如下:

① 安装软件(nfs-utils、rpcbind)

② 修改配置文件

③ 启动服务

④ 查看共享信息


步骤1:部署NFS服务

① 安装软件

[root@nfs30 ~]# yum -y install nfs-utils.x86_64 rpcbind
[root@nfs30 ~]# tail -3 /etc/passwd
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin②

② 修改配置文件

[root@nfs30 ~]# vim /etc/exports
/sitedir *(rw)
[root@nfs30 ~]# exportfs -r      //加载配置

步骤2:启动nfs、rpcbind服务

① 启动服务,并设置开机自启

[root@nfs30 ~]# systemctl start rpcbind
[root@nfs30 ~]# systemctl start nfs
[root@nfs30 ~]# 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@nfs30 ~]# systemctl enable rpcbind

② 查看共享信息

[root@nfs30 ~]# showmount -e localhost
Export list for localhost:
/sitedir *

案例7:配置Tomcat网站服务

web33操作

具体配置如下:

① 安装软件(apache-tomcat-8.0.30.tar.gz)

② 挂载NFS共享存储

③ 启动服务

④ 查看共享信息


步骤1:安装运行环境及Tomcat软件

① 运行的JAVA环境软件

[root@web33 ~]# yum -y install java-1.8.0-openjdk     //安装JDK
[root@web33 ~]# yum -y install java-1.8.0-openjdk-devel

② 安装软件(参考:lnmp_soft.tar.gz)

[root@web33 ~]# cd lnmp_soft/
[root@web33 lnmp_soft]# tar -xf apache-tomcat-8.0.30.tar.gz
[root@web33 lnmp_soft]# mv apache-tomcat-8.0.30 /usr/local/tomcat

③ 安装连接mysql服务软件

[root@web33 ~]# yum -y install mysql-connector-java.noarch
[root@web33 ~]# cp /usr/share/java/mysql-connector-java.jar /usr/local/tomcat/lib/

④ 删除默认的网页文件

[root@web33 ~]# rm -rf /usr/local/tomcat/webapps/ROOT/*

步骤2:挂载共享

① 安装提供showmount命令软件(nfs-utils)

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

② 查看共享目录

[root@web33 ~]# showmount -e 192.168.4.30
Export list for 192.168.4.30:
/sitedir *

③ 挂载共享目录

[root@web33 ~]# vim /etc/fstab
192.168.4.30:/sitedir /usr/local/tomcat/webapps/ROOT nfs defaults 0 0
[root@web33 ~]# mount -a

④ 查看挂载

[root@web33 ~]# mount | grep "sitedir"
192.168.4.30:/sitedir on /usr/local/tomcat/webapps/ROOT type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.4.33,local_lock=none,addr=192.168.4.30)
[root@web33 ~]# systemctl enable remote-fs.target  //设置远程加载服务开机运行

步骤3:启动Tomcat服务

① 启动服务,并设置服务开机运行

[root@web33 ~]# /usr/local/tomcat/bin/startup.sh
[root@web33 ~]# echo "usr/local/tomcat/bin/startup.sh" >> /etc/rc.local  
[root@web33 ~]# chmod +x /etc/rc.local

② 查看服务运行信息

[root@web33 ~]# ss -nlptu | grep java
tcp    LISTEN     0      1      ::ffff:127.0.0.1:8005                 :::*                   users:(("java",pid=11873,fd=67))
tcp    LISTEN     0      100      :::8009                 :::*                   users:(("java",pid=11873,fd=52))
tcp    LISTEN     0      100      :::8080                 :::*                   users:(("java",pid=11873,fd=47))

案例8:测试配置

- 具体配置如下:

① 测试NFS服务

② 测试MySQL服务

③ 测试Tomcat连接MySQL服务


步骤1:测试NFS服务

① 在nfs服务器创建网页test.html

[root@nfs30 ~]# echo "web test page" > /sitedir/test.html
[root@nfs30 ~]# cat /sitedir/test.html
web test page

② 在web服务器上查看是否同步test.html

[root@web33 ~]# cat /usr/local/tomcat/webapps/ROOT/test.html
web test page

③ 在客户端访问网站服务

[root@localhost ~]# curl http://192.168.4.33:8080/test.html
web test page

步骤2:测试MySQL服务

① 在主数据库服务器上添加库和表,及访问数据的连接用户

[root@mysql11 ~]# mysql -uroot -p123qqq...A
mysql> create database gamedb;   //建库
mysql> create table gamedb.user(name char(10));   //建表
mysql> grant select,insert,update,delete on gamedb.* to army@'%' identified by '123qqq...A';  //授权jerry用户

② 在从服务器查看是否同步数据

[root@mysql22 ~]# mysql -uroot -p123qqq...A
mysql> show grants for army@'%';    //查看授权用户
+------------------------------------------------------------------+
| Grants for army@%                                                |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'army'@'%'                                 |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `gamedb`.* TO 'army'@'%' |
+------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> desc gamedb.user;      //查看库表结构
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(10) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
1 row in set (0.01 sec)

③ 测试读写分离服务

在web33网站服务器上,连接maxscale77读写分离服务器

[root@web33 ~]# yum -y install mariadb    //安装提供连接命令软件

[root@web33 ~]# mysql -uarmy -p123qqq...A -h192.168.4.77 -P4006
MySQL [(none)]> select * from gamedb.user;    //查询数据
+------+
| name |
+------+
| jack |
+------+
1 row in set (0.00 sec)

MySQL [(none)]> insert into gamedb.user values("AnJ");   //存储数据
Query OK, 1 row affected (0.01 sec)
MySQL [(none)]> select * from gamedb.user;
+------+
| name |
+------+
| jack |
| AnJ  |
+------+
2 rows in set (0.00 sec)

④ 在主服务器本机登录查看数据

mysql> select * from gamedb.user;
+------+
| name |
+------+
| jack |
| AnJ  |
+------+
2 rows in set (0.00 sec)

步骤3:Tomcat连接MySQL服务

① 在nfs服务共享目录编写网页文件

[root@nfs30 ~]# vim /sitedir/linkdb.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ page import="java.naming.*" %>
<%@ page import="java.sql.*" %>
<html>
     <body>
          <%
          Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://192.168.4.11:3306/gamedb","army","123qqq...A");
Statement state=con.createStatement();
String sql="insert into user values('lucy')";    //插入语句
state.executeUpdate(sql);
           %>
           <h1>data save ok</h1>
     </body>
</html>

② 在浏览器地址栏里输入网站访问

③ 在主数据库服务器查看数据

[root@mysql11 ~]# mysql -uroot -p123qqq...A -e 'select * from gamedb.user'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+
| name |
+------+
| jack |
| AnJ  |
| lucy |
+------+

小结:

本篇章节为【第四阶段】PROJECT2-DAY1 的学习笔记,这篇笔记可以初步了解到 部署数据库服务MySQL、部署共享存储NFS、配置网站服务、测试配置。


Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。

来完成以上要求的代码如下: ``` package com.pet; public abstract class Food { public abstract int needMoney(); } public class Meat extends Food{ @Override public int needMoney() { return 30; } } public class Bone extends Food{ @Override public int needMoney() { return 15; } } package com.pet.animal; import com.pet.Food; public class Dog { private int money = 200; public int eat(Food food, int money){ int cost = food.needMoney(); this.money -= cost; return this.money; } } package com.pet; import com.pet.animal.Dog; import com.pet.food.Meat; import com.pet.food.Bone; public class MainApp { public static void main(String[] args){ Dog dog = new Dog(); Food[] menu = new Food[]{new Meat(), new Bone(), new Meat(), new Bone(), new Meat(), new Bone(), new Meat()}; int cost = 0; for (int i = 0; i < menu.length; i++){ System.out.println("Day "+ (i+1) + ": "); cost += menu[i].needMoney(); int leftMoney = dog.eat(menu[i], 200); System.out.println("We fed the dog with "+ menu[i].getClass().getSimpleName() +", which costs "+ menu[i].needMoney() + " yuan."); System.out.println("We have "+ leftMoney +" yuan left."); if (leftMoney < 0){ System.out.println("The dog will be starving!"); break; } } System.out.println("We spent "+ cost +" yuan in total for a week."); } } ``` 运行结果如下: ``` Day 1: We fed the dog with Meat, which costs 30 yuan. We have 170 yuan left. Day 2: We fed the dog with Bone, which costs 15 yuan. We have 155 yuan left. Day 3: We fed the dog with Meat, which costs 30 yuan. We have 125 yuan left. Day 4: We fed the dog with Bone, which costs 15 yuan. We have 110 yuan left. Day 5: We fed the dog with Meat, which costs 30 yuan. We have 80 yuan left. Day 6: We fed the dog with Bone, which costs 15 yuan. We have 65 yuan left. Day 7: We fed the dog with Meat, which costs 30 yuan. We have 35 yuan left. We spent 165 yuan in total for a week. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小安运维日记

Hey~ 感谢您的充电支持!!

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

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

打赏作者

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

抵扣说明:

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

余额充值