一:学习使用docker,并完成以下任务
完成这个任务前现在自己机器上创建一个http服务,感受下这个服务的含义。
- 利用docker在单机上创建两个httpd服务,能够提供web服务。分别是8081端口和8082端口。在8081服务的根目录上放置readme.html文件。在8082服务的根目录上放置readme.html文件,这两个html文件要有区别。 里面内容可以随便写(比如8081这个写abc,8082这个写123)。
gauss@gauss-XPS-15-9570:~$ docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
Image docker.io/library/httpd:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
c499e6d256d6: Downloading
76155f771be0: Downloading
48b718b71719: Downloading
d65ae7a4c211: Downloading
8d17dee838ad: Downloading
latest: Pulling from library/httpd
c499e6d256d6: Pull complete
76155f771be0: Pull complete
48b718b71719: Pull complete
d65ae7a4c211: Pull complete
8d17dee838ad: Pull complete
Digest: sha256:13aa010584cb3d79d66adf52444494ae5db67faa28d65a1a25e6ddc57f7c0e2a
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest
gauss@gauss-XPS-15-9570:~$ docker run -it -d -p 8081:80 --name http1 -v /data1:/usr/local/apache2/htdocs/ httpd
549b8abefc55a3d78453a40764e162a8571edf6c93cff01f5127b1911bf1656d
gauss@gauss-XPS-15-9570:~$ docker run -it -d -p 8082:80 --name http2 -v /data2:/usr/local/apache2/htdocs/ httpd
4d4467094dc3835213a2ca89cf8d9f3cb1283523976d1a22f84721b7ad613044
gauss@gauss-XPS-15-9570:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d4467094dc3 httpd "httpd-foreground" 2 seconds ago Up 2 seconds 0.0.0.0:8082->80/tcp http2
549b8abefc55 httpd "httpd-foreground" 3 minutes ago Up 3 minutes 0.0.0.0:8081->80/tcp http1
gauss@gauss-XPS-15-9570:~$ curl localhost:8081/readme.html
abc-1
gauss@gauss-XPS-15-9570:~$ curl localhost:8082/readme.html
123-2
并在http://127.0.0.1:8081/readme.html 和http://127.0.0.1:8081/readme.html能够看到之前创建和写入一些内容的html文件。
iptables封掉8081端口。使得http://127.0.0.1:8081/readme.html 无法访问而http://127.0.0.1:8082/readme.html 可以访问。
gauss@gauss-XPS-15-9570:~$ sudo iptables -A INPUT -p tcp --dport 8081 -j DROP gauss@gauss-XPS-15-9570:~$ curl localhost:8082/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl localhost:8081/readme.html # 无返回,说明端口被禁止访问
iptables 做流量均衡(nat),将所有80端口导入的流量50%分配给8081端口,50%的流量分配给8082端口。配置后,刷10次http://127.0.0.1:80/readme.html 次。如果4~5次结果是abc,另外的显示123。说明配置正确。
```shell-A OUTPUT 是针对本地访问的,如果是外部访问,应使用 -A PREROUTING
gauss@gauss-XPS-15-9570:~$ sudo iptables -A OUTPUT -t nat -p tcp -d 127.0.0.1 —dport 80 -j REDIRECT -m statistic —mode random —probability 0.5 —to-ports 8081
这里可以省掉概率,因为规格是按照顺序执行的
gauss@gauss-XPS-15-9570:~$ sudo iptables -A OUTPUT -t nat -p tcp -d 127.0.0.1 —dport 80 -j REDIRECT —to-ports 8082
gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html 123-2 gauss@gauss-XPS-15-9570:~$ curl 127.0.0.1/readme.html abc-1
二:安装mysql数据库,并完成以下任务
1. 安装好后,创建自己的数据库test,然后创建一个表,字段是id(整形),name(255个字符长度的字符串型),ts(时间戳型,默认为当前时间戳),并手动写入三行记录,并删除其中的一条记录,查询是否正确删除,然后利用mysqldump
命令将剩余两条记录的数据库表dump出来,dump的文件叫test.sql,
然后vim test.sql
看看这个文件长什么样子。写出相应的命令。
```shell
gauss@gauss-XPS-15-9570:~$ mysql -h 127.0.0.1 -P 3306 -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.19 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.19 |
+-----------+
1 row in set (0.00 sec)
mysql> create database test;
Query OK, 1 row affected (0.01 sec)
mysql> use test;
Database changed
mysql> create table t(id int, name varchar(255), ts timestamp DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.09 sec)
mysql> desc t;
+-------+--------------+------+-----+-------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+-------------------+-------------------+
| id | int | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
| ts | timestamp | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+-------+--------------+------+-----+-------------------+-------------------+
3 rows in set (0.01 sec)
mysql> insert into t (id, name) values (1,"aa"),(2,"bb"),(3,"cc");
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select id, name, ts from t;
+------+------+---------------------+
| id | name | ts |
+------+------+---------------------+
| 1 | aa | 2020-04-10 09:56:44 |
| 2 | bb | 2020-04-10 09:56:44 |
| 3 | cc | 2020-04-10 09:56:44 |
+------+------+---------------------+
3 rows in set (0.00 sec)
mysql> delete from t where id=2;
Query OK, 1 row affected (0.02 sec)
mysql> select id, name, ts from t;
+------+------+---------------------+
| id | name | ts |
+------+------+---------------------+
| 1 | aa | 2020-04-10 09:56:44 |
| 3 | cc | 2020-04-10 09:56:44 |
+------+------+---------------------+
2 rows in set (0.01 sec)
gauss@gauss-XPS-15-9570:~$ mysqldump -uroot -proot --databases test > test.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
gauss@gauss-XPS-15-9570:~$ vim test.sql
- 将下面mysqldump出来的数据库表weibo.sql还原到数据库中,http://117.50.100.6:12345/linux/weibo.sql。并写出语句查询这个表的记录数。写出相应的过程。
```shell导入数据 mysql -uroot -proot test < weibo.sql 或者在mysql命令里 source weibo.sql
mysql> show tables; +————————+ | Tables_in_test | +————————+ | fresh_data | | t | +————————+ 2 rows in set (0.00 sec)
mysql> select count() from fresh_data; +—————+ | count() | +—————+ | 500 | +—————+ 1 row in set (0.04 sec)
3. 这个数据库表中有一个字段叫user_type表明微博用户的类型,找到其中是黄V的用户,并用mysqldump语句将记录中的user_type是黄V的记录导出来。(带条件的mysqldump),导出后vim
这个dump文件看看是否正确。<br />
```shell
mysql> select distinct user_type from fresh_data;
+--------------+
| user_type |
+--------------+
| 普通用户 |
| 达人 |
| 黄V |
| 微博女郎 |
| 金V |
| 蓝V |
+--------------+
6 rows in set (0.00 sec)
# 按照条件导出数据
gauss@gauss-XPS-15-9570:~/workspace/eightFriends$ mysqldump -uroot -proot test fresh_data --where="user_type='黄V'" > 黄V.sql
# vim 黄V.sql
三:NFS实现mount一块远程机器上的硬盘到本地,测试本地硬盘和远程硬盘的速度差异。远程硬盘可以用虚拟机上的硬盘(比如做两台虚拟机,将一台虚拟机的硬盘mount到另一台虚拟机上),也可以找助教申请一台云主机供大家用(这个作业选作,感兴趣的同学做)
# 在云主机上运行
jll@VM-0-5-ubuntu:~$ sudo apt install nfs-kernel-server
jll@VM-0-5-ubuntu:~$ sudo mkdir -p /var/nfs/sharedir
jll@VM-0-5-ubuntu:~$ sudo chown nobody:nogroup /var/nfs/sharedir
jll@VM-0-5-ubuntu:~$ sudo vim /etc/exports
jll@VM-0-5-ubuntu:~$ sudo cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/var/nfs/sharedir *(rw,sync,no_subtree_check)
jll@VM-0-5-ubuntu:~$ sudo systemctl restart nfs-kernel-server
jll@VM-0-5-ubuntu:~$ showmount -e
Export list for VM-0-5-ubuntu:
/var/nfs/sharedir *
# 在本地机器上运行
gauss@gauss-XPS-15-9570:~$ sudo apt install nfs-common
gauss@gauss-XPS-15-9570:~$ sudo mkdir -p /nfs/sharedir
# 腾讯云主机IP,但是貌似云主机不允许被挂载为nfs,设置了防火墙和主机端口放开也不行,故放弃。
gauss@gauss-XPS-15-9570:~$ sudo mount 94.xxx.xxx.248:/var/nfs/sharedir /nfs/sharedir