零、文件共享
链接:https://pan.baidu.com/s/1buhCri6L_US6LUup8QNyCg?pwd=1111
提取码:1111(自动填充)
一、Linux的基本使用
1.1 软件的介绍
- Vmware15破解版.rar
虚拟机软件,在本机上虚拟出一台空白电脑。 - CentOS-7-x86_64-DVD-1503-01.iso
Linux操作系统,CentOS是Linux发行版的一种。 - Xshell&Xftp.rar
远程连接工具,连接到远程的服务器,就如同在本地使用是一样的。 - jdk-8u172-linux-x64.tar.gz
Java8编译和运行环境。 - apache-maven-3.6.0-bin.tar.gz
Java项目的编译与打包环境。 - apache-tomcat-8.5.31.tar.gz
Javaweb项目的运行服务器。
1.2 软件的安装
VMware的安装
CentOS7的安装
CentOS是免费的、开源的、可以重新分发的开源操作系统,CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一。
-
创建新的虚拟机。
-
选择“典型”和“下一步”。
-
选择“安装光盘映像文件”,并浏览到CentOS7的iso文件位置,点击“下一步”。(VMware Workstation Pro会识别到系统版本并简易安装,可按照以下图片操作,忽略步骤3、4)
-
选择虚拟机安装位置并为虚拟机命名。
-
选择磁盘占用空间大小,默认最大占用为20G。
-
点击“完成”,进行操作系统的安装。
右键该系统 → \rightarrow →设置 → \rightarrow →使用ISO映像文件
-
开机后选择“install CentOS7”(光盘安装可能出现数据丢失,才需要点击第二个测试)
-
选择“英语”。
-
选择安装目标:选择安装在哪一个硬盘上。
-
设置root用户密码。
点击左上角“Done” → \rightarrow →finish configration -
“Reboot”,重启虚拟机。
1.3 Linux的文件系统
Linux文件系统是一个倒置的树状结构,有且仅一个根(/)。
绝对路径:以根目录(/)开头的路径叫绝对路径,例如:/usr/tmp
相对路径:以当前路径开头的路径叫相对路径,例如:…/…/tmp
绝对路径:进入没有共同祖先的节点方便些(直接写路径)
相对路径:进入兄弟节点方便些
Linux有且仅有一个根目录
如果有新的盘符,只能挂载到树某个目录下
Linux文件的权限
linux文件权限三位一组进行区分:
第1位:l-软链接,快捷方式,d-目录,-为普通文件
第234位:本人权限,r-读 w-写 x-可执行的
第567位:本组人的权限
第8910位:其他人权限。
lrwxrwxrwx: 此文件为一个软链接,本人、本组和其他人都能读、写、执行。权限为777。
-rwxr-xr-x:普通文件,本人可读可写可执行,本组及其他人可读可执行。权限为755。
-rw-r–r–:普通文件,本人可读可写,本组及其他人只读。权限为644。
Linux的基本使用
[目录]是可有可无的
目录 是必须有的
~:个人主目录
个人文件放到个人文件夹下,尽量不影响其他文件夹
命令 | 功能 |
---|---|
ls[目录] | |
ls[目录] -a | 同时显示隐藏文件(all) |
ls[目录] -l | 显示文件详情信息(long:长格式) |
ls[目录] -a -l | 多参数 |
ls[目录] -al | |
ll[目录] | 相当于ls[目录] -l |
cd[目录] | |
cd . . | 进入当前目录的父目录(返回上一级) |
pwd | 显示当前路径 |
cp 源文件 目标文件(如果是文件,即重命名;如果是文件夹,) | copy |
rm 文件 | 删除文件 |
rm -rf 目录 | 将目录下面的子目录及文件全部删除,不需要进行确认。-r:递归删除,-f:删除时不需要进行确认 |
rm -rf / | 删除整个文件系统(尽量不要试) |
mkdir 目录 | |
rmdir 目录 | 删除空目录,不空报错 |
mv 源文件 目标文件 | 移动,即剪切 |
- ls [目录]:查看目录当中的文件和文件夹,如果不输入目录,则是查看当前目录。
ls [目录] -a:显示目录当中包括隐藏文件在内的所有文件和文件夹。a(all):所有的。
ls [目录] -l:显示文件的详细信息,l(long):长格式。
ls [目录] -al:相当于ls [目录] -l -a。
ll [目录]:相当于ls [目录] -l。 - cd [目录]:进入目录中,如果不输入目录,则是进入用户的个人主目录。
cd …:进入当前目录的父目录。 - pwd:显示当前所在目录。
- cp 源文件 目标文件:拷贝源文件至目标文件中。
- rm 文件:删除文件。
rm -rf 目录:将目录下面的子目录及文件全部删除。-r:递归删除,-f:删除时不需要进行确认。
rm -rf /:删除整个文件系统(非常危险!) - mkdir 目录:新建目录。
- rmdir 目录:删除空目录,目录不为空则报错。
- mv 源文件 目标文件:将源文件移动至目标文件中。
如果源文件与目标文件都是文件,则是改名。
如果源文件是文件,目标文件是目录,则是将文件移动至目录中。
如果源文件和目标文件都是目录,目标文件不存在则是改名,若存在则是移动至目标目录中。
Linux编辑器vi的使用
点击i进入INSERT模式,可以插入文字
按ESC退出编辑
图
:+命令
CentOS系统的网络设置
ip addr
lo:localhost
远程桌面工具XShell、Xftp
根据上面打开的网卡ip地址,设置XShell:192.168.20.140
或者这样直接连接:
二、CentOS环境中的项目部署
即运行Java文件
2.1 JDK8的安装
用Xftp传输文件
用XShell解压
移动到usr/local(共享用)
2.2 配置环境变量
/etc/profile
- 备份配置文件
- 修改文件
$PATH:引用PATH的值
:加上
$JAVA_HOME/bin:引用值
- 刷新环境变量
source /etc/profile
- 验证
java -version
如果没有成功
echo $JAVA_HOME
echo $PATH
查看路径是否正确
2.3 Maven的安装
-
Xftp复制
-
解压
-
复制
-
配置环境变量
-
Maven配置本地仓库与中央仓库(设置一个保存文件的仓库)
新建repository
修改setting.xml
上面是注解
中央仓库地址
7. 使用Maven创建Java项目
mvn archetype:generate
会从中央仓库下载很多包
中途默认选7
组织机构名称:cn.kgc(用Maven进入Java时需要输入组织机构名称)
项目名称 mvn-app
版本 1.0
package 回车
回车接受
可在Xftp中查看项目结构
进入项目cd mvn-app
mvn clean package
(清除并打包)
每次修改都需要清除打包
我的笔记
yum install tree
使用maven创建web项目
回看
选择10回听
2.4 安装Tomcat(用Tomcat查看JavaWeb运行情况)
我的笔记
- 上传
- 解压
- 移动
删压缩包
不用环境变量 - 运行
- 开启端口/防火墙(Linux默认把所有端口关闭,如果想访问数据,需要开启)
仅TCP的8080端口开放 - 浏览器访问
运行web的war包
修改后打包并移动
- 将压缩包apache-tomcat-8.5.31.tar.gz上传至服务器。
- 解压缩包:
tar -xzvf apache-tomcat-8.5.31.tar.gz
- 将解压出的文件夹移动至/usr/local下:
mv apache-tomcat-8.5.31 /usr/local/tomcat
- 启动tomcat:
cd /usr/local/tomcat/bin/
./startup.sh
- 打开防火墙:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
- 通过浏览器访问:
http://ip:8080/
2.5 通过yum安装软件
我的笔记
手动复制可能导致依赖无法自动安装
查看所有已经打出的命令
yum在本地有默认的仓库
yum简介
基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且
一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
2.6 安装MySQL
我的笔记
把MySQL的(下载位置)安装地址告诉yum,MySQL是第三方,不会存在于CentOS中(就是安装到本地回听11:23)
约40包、依赖包
没有密码不能用代码连接数据库
yum的配置文件在etc里面
- 通过网络下载yum源:
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
- 安装yum源:
rpm -ivh mysql-community-release-el7-5.noarch.rpm
- 通过yum安装Mysql:
yum install mysql-community-server
- 启动mysql服务:
systemctl start mysqld
- 通过客户端连接mysql服务:
mysql -u root -p
- mysql设置密码:
use mysql;
update user set password=password('123456') where user='root'; #修改用户密码
flush privileges; #刷新用户权限
- 设置mysql字符集:
打开mysql配置文件:vi /etc/my.cnf
在[client]一节加入:
default-character-set=utf8
在[mysqld]一节加入:
character-set-server=utf8
collation-server=utf8_general_ci
重启服务:
systemctl restart mysqld
2.7 MySQL的基本使用
XShell字符编码换成UTF-8就可打中文
2.8 导入已有的数据库
数据存到db,打包成war,用tomcat查看,浏览器查看
2.9 部署到其他机器(MySQL-New)
我的笔记
用CentOS7连接MySQL-New
两个报错常见
开启MySQL-New的数据库权限打开
注意在216上设置的是谁的账号密码 区分
三、Docker的基本使用
解决运行文件时 不同版本的问题
3.1 什么是Docker
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
3.2 Docker与虚拟机
虚拟机(virtual machine)是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在Windows系统里面运行CentOS系统,这样就可以运行任意的CentOS应用了。而Docker仅仅是封装函数库,并没有模拟完整的操作系统。
3.3 Docker中的概念
- 镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
- 容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。
- 中央仓库:开源应用程序非常多,打包这些应用往往是重复的劳动。为了避免这些重复劳动,人们就会将自己打包的应用镜像,例如Redis、MySQL镜像放到网络上,共享使用,就像GitHub的代码共享一样。
- Docker是一个CS架构的程序,由两部分组成:
- 服务端(server):Docker守护进程,负责处理Docker指令,管理像、容器等。
- 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。
3.4 Docker的安装
- 安装依赖包:
yum install -y yum-utils device-mapper-persistent-data lvm2
- 安装本地yum源:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 查看Docker版本:
yum list docker-ce --showduplicates | sort -r
- 安装最新版:
yum install -y docker-ce
#yum install -y docker-ce-18.09.9-3.el7
- 启动docker服务:
systemctl start docker
- 查看版本号:
docker -v
- 查看详细信息:
docker info
- 配置镜像加速器:
参看:加速器使用:加快镜像下载速度/博客园@优雅转身
3.5 Docker的基本命令
项目不能随着容器删除而删除(容器内外共享文件夹)
不能经常手动修改IP地址(回看出发点:9:15)
- 镜像命令:
-
docker images
查看本地库中的镜像。 -
docker search 镜像名
在中央仓库中查找镜像。
示例:docker search tomcat -
docker pull 镜像名:版本号
从中央仓库拉取镜像至本地。
示例:docker pull tomcat:8 -
docker inspect 镜像名
查看镜像详情。
- 容器命令:
-
docker ps
查看运行中的容器。 -
docker ps -a
查看运行中和停止中的所有容器。 -
docker run 镜像:版本
创建并运行容器。
示例:docker run tomcat:8 -
docker run -d -p 宿主机端口:容器端口 -v 宿主机目录:容器内目录 镜像:版本
在后台以守护进程模式运行容器。
-d:以守护进程模式运行
-p:为端口映射
-v:将容器外目录挂载至容器内。
示例:
docker run -d -v /var/local/tomcat_webapps:/usr/local/tomcat/webapps -p 8081:8080 tomcat:8
-
docker rm 容器ID或容器名
删除容器。
示例:docker rm 3e -
docker exec -it 容器ID或容器名 /bin/bash
进入容器中,以交互模式运行容器。
-it:以交互模式运行
/bin/bash:进入容器后运行的程序。
示例:docker exec -it 2b /bin/bash -
docker stop 容器ID或容器名
停止容器。
示例:docker stop 2b -
docker start 容器ID或容器名
启动容器。
示例:docker start 2b -
docker inspect 容器ID或容器名
查看容器的详细信息。
示例:docker inspect mysql-1 -
docker cp 源文件 容器ID或容器名:容器内目标路径
将源文件拷贝至容器内的目标路径中,也可以将容器内的文件拷贝至容器外。
示例:
docker cp userdb.sql mysql-1:/root/
- docker logs 容器ID或容器名
查看容器启动的输出日志。
- 网络命令:
-
docker network ls
列出所有的网络。 -
docker network create --subnet 子网/掩码 网络名
创建网络,并指定子网及掩码。
示例:
docker network create --subnet 172.18.0.0/16 new-network
-
docker network inspect 网络名
查看网络详情。
示例:docker network inspect new-network -
运行示例:
docker run -d -v /var/local/tomcat_webapps:/usr/local/tomcat/webapps --network new-network --ip 172.18.0.11 --name=tomcat-1 -p 8081:8080 tomcat:8
docker run -d --name=mysql-1 -e MYSQL_ROOT_PASSWORD=123456 --network newnetwork --ip 172.18.0.12 centos/mysql-57-centos7
- Dockerfile简介:
Dockerfile就是用来构建docker镜像的构建文件,命令参数脚本。
- FROM:指明基础镜像,一切从这里开始构建。
- WORKDIR:镜像的工作目录,进入容器时的默认位置。
- COPY:将文件拷贝至镜像中。
- ENTRYPOINT:容器启动时运行的指令。
- EXPOSE:申明容器使用的端口。
- 镜像的构建:
docker build -t 镜像名称 .
示例:docker build -t user-project .
3.6 JavaWeb项目的部署
3.7 Docker下运行Springboot项目
通过Docker File制作镜像
四、MySQL数据库的分库、分表
4.1 MySQL的主从复制
- 数据库的读写压力不均衡
- 主机写、从机读
- 启动两个MySQL容器,作为主从复制的一主一从:
docker run -d --name=mysql-101 -e MYSQL_ROOT_PASSWORD=123456 --network new-network --ip 172.18.0.101 centos/mysql-57-centos7
docker run -d --name=mysql-102 -e MYSQL_ROOT_PASSWORD=123456 --network new-network --ip 172.18.0.102 centos/mysql-57-centos7
- 将配置文件my.cnf拷贝至两个容器中,然后重启两个容器。
docker cp my.cnf mysql-101:/etc/
docker cp my.cnf mysql-102:/etc/
docker restart mysql-101
docker restart mysql-102
- 登录容器,查看字符集是否为utf8:
docker exec -it mysql-101 /bin/bash #登录至容器内
mysql -u root -p #登录Mysql,容器内登录不需要密码
mysql> status; #执行命令status
- 修改两个容器内的my.cnf,在[mysqld]一节中加入以下内容:
log-bin=mysql-bin #开启二进制日志,二进制日志名为mysql-bin
server-id=101 #服务器的id,在一组主从服务器中唯一即可
- 在主机上创建复制账号:
将本机所有库所有表的从机复制权限赋给slave-user,slave-user可以在172.18.0.102上以密码123456登录
grant replication slave on *.* to 'slave-user'@'172.18.0.102' identified by
'123456';
flush privileges;
replication slave:从机的复制权限。
- 在从机上设置同步参数:
change master to master_host='172.18.0.101',master_user='slaveuser',master_password='123456',master_log_file='mysqlbin.000002',master_log_pos=606;
master_host:主机的ip地址,master_user:主机创建的从机复制使用的账号,
master_password:从机登录主机使用的密码,master_log_file和master_log_pos为主机二进制
日志的名称和当前位置,在主机使用命令show master status查看。
- 开启同步状态:
start slave;
- 查看同步状态:
show slave status\G;
查看Slave_IO_Running和Slave_SQL_Running两项是否都为yes。
- 若主从同步状态不为yes,则重新执行change master语句,更新同步状态。
4.2 Mycat的安装
原因:从机的表不好找,开发难
机制:将多个MySQL(数据库)合成一个数据库来用≈Oracle商用数据库性能
- 下载镜像:
docker pull longhronshens/mycat-docker
- 运行镜像:
docker run -d --name=mycat longhronshens/mycat-docker
- 拷贝出容器中的三个核心配置文件:
docker cp mycat:/usr/local/mycat/conf/server.xml /var/local/mycat_config/
docker cp mycat:/usr/local/mycat/conf/schema.xml /var/local/mycat_config/
docker cp mycat:/usr/local/mycat/conf/rule.xml /var/local/mycat_config/
4.3 Mycat分库的配置
-
在三个mysql容器中创建三个数据库,数据库名为newsdb。
-
修改配置文件server.xml,将两个用户管理的数据库都修改为news。
<user name="root">
<property name="password">123456</property>
<property name="schemas">news</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">news</property>
<property name="readOnly">true</property>
</user>
- 修改配置文件schema.xml,将四个表分别配置位于三个dataNode上。
<schema name="news" checkSQLschema="false" sqlMaxLimit="100">
<table name="article" dataNode="dn1" />
<table name="category" dataNode="dn1" />
<table name="author" dataNode="dn2" />
<table name="comment" dataNode="dn3" />
</schema>
<dataNode name="dn1" dataHost="host1" database="newsdb" />
<dataNode name="dn2" dataHost="host2" database="newsdb" />
<dataNode name="dn3" dataHost="host3" database="newsdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="172.18.0.51:3306" user="root"
password="123456"></writeHost>
</dataHost>
<dataHost name="host2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="172.18.0.52:3306" user="root"
password="123456"></writeHost>
</dataHost>
<dataHost name="host3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="172.18.0.53:3306" user="root"
password="123456"></writeHost>
</dataHost>
- 登录进入mycat,导入数据:
mysql -u root -p -P 8066 -h 127.0.0.1 #登录mycat
mysql> source /root/news.sql; #导入数据
4.4 分表
原因:表很大
五、
六、
七、
八、
九、项目作业
9.1 项目一部署步骤
系统部署图
实现步骤
-
运行【三个mysql容器】,分别作为mycat的三个物理节点。
-
将【数据库通过mycat导入】,【分库】规则如下:
doctor、office、title位于节点hospital-1上,patient位于hopital-2上,booking位于hospital-3上。 -
运行一个【单机版的redis】,不需要做主从和哨兵。
-
【编译并运行】应用系统。
- 修改系统配置文件,src/main/resources/application.properties。
spring.datasource.url:mycat地址。
spring.redis.host:redis地址。
spring.redis.port:redis端口。 - 通过maven命令mvn clean package打包。
- 通过Dockerfile构建镜像。
FROM openjdk:8 COPY *.jar /root/user.jar WORKDIR /root EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/root/user.jar"]
- 根据镜像运行容器。
- 修改系统配置文件,src/main/resources/application.properties。
【检验】
- 访问测试,看能否返回Json格式的数据:
- http://宿主机IP:8080/doctors
返回医生列表 - http://宿主机IP:8080/doctors/1
返回医生详情 - http://宿主机IP:8080/bookings?patientId=1
返回患者的预约 - http://宿主机IP:8080/patients?username=zhangsan
返回患者详情
- http://宿主机IP:8080/doctors
- 登录redis,查看其中是否有医生信息的缓存。
9.2 项目二部署步骤
系统部署图
实现步骤
-
运行三个mysql容器,在三个数据库中分别导入hospital-1.sql、hospital-2.sql、hospital-3.sql。
-
运行一个单机版的redis,不需要做主从和哨兵。
-
编译并运行应用系统。
-
修改三个子系统(doctor-module,patient-module,booking-module)配置文件,配置文件位于三个子系统的src/main/resources/application.properties。
spring.datasource.url:mycat地址。
spring.redis.host:redis地址。
spring.redis.port:redis端口。
-
在项目根目录下通过maven命令mvn clean package打包。
-
通过Dockerfile构建三个子项目的镜像。
FROM openjdk:8 COPY *.jar /root/user.jar WORKDIR /root EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/root/user.jar"]
-
根据镜像运行容器。
-
-
运行一个Nginx容器,并作反向代理配置:
/doctors:转发至doctor-module项目中。
/patients:转发至patient-module项目中。
/bookings:转发至booking-module项目中。
-
访问测试,看能否返回Json格式的数据:
-
http://宿主机IP/doctors
返回医生列表
-
http://宿主机IP/doctors/1
返回医生详情
-
http://宿主机IP/bookings?patientId=1
返回患者的预约
-
http://宿主机IP/patients?username=zhangsan
返回患者详情
-
-
-
登录redis,查看其中是否有医生信息的缓存。
十、相关资源
链接:https://pan.baidu.com/s/13xElgR5ttbdmK3KQfuElzA?pwd=1111
提取码:1111