2019-8-24 [Linux] 15.搭建两台虚拟机实现互联组成一个小型网络 详细版

文章目录

    • 15.1 需求说明
      • 1.2 分技术介绍
        • 1.2.1 JDK
        • 1.2.2 Tomcat
      • 1.2.3 MySQL
      • 1.2.4 Nginx
        • 1.2.4.1 序言
        • 1.2.4.2 Nginx常用功能
    • 15.3 linux初始化配置
      • 15.3.1 安装linux
      • 15.3.1.1 创建虚拟机
        • 15.3.1.2 安装linux
      • 15.3.2 配置静态网卡
    • 15.4 linux的常用软件安装
    • 15.5 linux的JDK安装
    • 15.6 linux的Tomcat安装
    • 1.7 linux克隆与SSH配置
    • 15.8 linux的MySQL安装
    • 15.8 linux的Nginx安装
      • 一、安装编译工具及库文件
      • 二、首先要安装 PCRE
      • 三、安装 Nginx
      • 四、nginx 文件结构
    • 15.9 批量操作脚本编写
      • 15.9.1 实现一个机器操作多台机器做同样工作的脚本
        • 如何获取当前执行脚本的路径
        • 拼接 SSH 命令
        • 如何动态执行拼接的SSH 命令
        • 实现将一个机器内的文件拷贝到其他机器上的脚本
        • 完整操作脚本

15.1 需求说明

使用两台linux,一台主linux,一台从linux.主linux主要工作是后台 从linux主要工作是前台
主linux命名为 : master
从linux命名为 : slave1
master 安装 JDK Tomcat MySQL Nginx
slave1 安装 JDK Tomcat

1.2 分技术介绍

1.2.1 JDK

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

1.2.2 Tomcat

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为9.0。

1.2.3 MySQL

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

1.2.4 Nginx

1.2.4.1 序言

Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。

Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。

Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

牛逼吹的差不多啦,如果你还不过瘾,你可以百度百科或者一些书上找到这样的夸耀,比比皆是。

1.2.4.2 Nginx常用功能

1、Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。
2019-8-24 [Linux] 15.搭建两台虚拟机实现互联组成一个小型网络 详细版_第1张图片
这里我给来2张图,对正向代理与反响代理做个诠释,具体细节,大家可以翻阅下资料。

Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。

  1. 负载均衡
    Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。

上3个图,理解这三种负载均衡算法的实现
2019-8-24 [Linux] 15.搭建两台虚拟机实现互联组成一个小型网络 详细版_第2张图片
Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
2019-8-24 [Linux] 15.搭建两台虚拟机实现互联组成一个小型网络 详细版_第3张图片
3. web缓存
Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。

15.3 linux初始化配置

安装linux,版本Centos7,初始化配置包括静态网卡配置,关闭防火墙,关闭SELinux;

15.3.1 安装linux

15.3.1.1 创建虚拟机

  1. 新建虚拟机

  2. 选择虚拟机版本

  3. 选择centos7的镜像文件

  4. 修改虚拟机的名称与文件位置

  5. 调整虚拟CPU的核心数

  6. 设置虚拟内存

  7. 选择虚拟网络类型,此处选择NET模式

  8. 选择虚拟硬盘类型 默认即可

  9. 设置虚拟硬盘大小,此处选择单一文件

  10. 完成配置开启虚拟机

15.3.1.2 安装linux

鼠标移入 点击回车

下面页面继续点击回车

检查磁盘,需要稍等一会儿

选择 语言 中文 --> 简体中文

整体配置页面 需要配置 网络 日期和时间 硬盘格式化

网络选择

此处需要记住 主机的IP信息 因为使用的是NET模式,所以谁和谁的都不一样,要注意这个问题
配置完成之后别忘记点击上方的完成回到主页面配置其他信息
回到主页面选择时间和日期,验证网络配置是否正确,此处我们主要通过添加NTP服务器的方式进行验证

是绿色的对号 说明是可以连接阿里云的,那也就是变相的说明我们的服务器现在是可以连接网络的
接下来调整磁盘

所有配置工作结束 开始完成安装

下一个页面设置root的密码是 000000

因为我们的密码过于简单,所以此处第一次点完成会停顿一下 然后再点一次完成就可以了

等待安装成功之后点击重启按钮 等待进入系统即可

到此系统安装成功

15.3.2 配置静态网卡

登录虚拟机,查看本机IP

根据此处返回的ip地址 进行客户端连接的配置,配置过程略

编辑网卡配置文件

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

添加如下内容

BOOTPROTO="static"
IPADDR="192.168.92.10"
NETMASK="255.255.255.0"
GATEWAY="192.168.92.2"
DNS="192.168.92.2"
NM_CONTROLLED="no"

讲解

BOOTPROTO="static" <-- 替换之间的dhcp设置
IPADDR="192.168.92.10" <-- IP地址
NETMASK="255.255.255.0" <-- 子网掩码
GATEWAY="192.168.92.2" <-- 默认网关
DNS="192.168.92.2" <-- DNS
NM_CONTROLLED="no" <-- NetManager设置

修改好之后进行网络服务配置

  1. 关掉NetManager
[root@localhost ~]# systemctl stop NetworkManager.service       <-- 停止服务
[root@localhost ~]# systemctl disable NetworkManager.service    <-- 移除自启动
Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service.
Removed symlink /etc/systemd/system/dbus-org.freedesktop.NetworkManager.service.
Removed symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service.
  1. 重启网卡

    [root@localhost ~]# systemctl restart network.service

重启网卡之后需要用新IP再重新连接,并且要验证是否可以上网

1.3.3 关闭防火墙

[root@localhost ~]# systemctl stop firewalld.service <-- 关闭防火墙
[root@localhost ~]# systemctl disable firewalld.service <-- 移除防火墙开机自动启动
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

1.3.4 关闭SELinux

[root@localhost ~]# vi /etc/selinux/config

2019-8-24 [Linux] 15.搭建两台虚拟机实现互联组成一个小型网络 详细版_第4张图片
重启服务器

[root@localhost ~]# reboot

15.4 linux的常用软件安装

配置阿里云的yum源

  1. 安装wget

    [root@localhost ~]# yum -y install wget

  2. 下载yum源的配置文件

    [root@localhost ~]# wget http://mirrors.aliyun.com/repo/Centos-7.repo

  3. 替换原有的yum源

[root@localhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo ~/     <-- 备份原有的到root的家目录
[root@localhost ~]# mv ~/Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo <-- 将下载的yum配置文件放在系统的指定目录
  1. 更新现有yum
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
[root@localhost ~]# yum -y update
  1. 安装常用软件
[root@localhost ~]# yum -y install openssh-server vim gcc gcc-c++ glibc-headers bzip2-devel lzo-devel curl lrzsz openssh-clients zlib zlib-devel make  autoconf automake cmake libtool openssl openssl-devel fuse-devel snappy-devel telnet unzip zip net-tools.x86_64 firewalld systemd ntp

15.5 linux的JDK安装

此处我们选用 jdk1.8_144这个版本作为我们的基础JDK,此处要切记一点的是1.8的不同版本JDK在配置上会有很大的出入,所以请不要随便更换基础的JDK版本,否则你会很尴尬!
使用 rz 上传jdk到root的家目录

[root@localhost ~]# rz

使用rpm命令安装jdk

[root@localhost ~]# rpm -ivh jdk-8u144-linux-x64.rpm

配置jdk的环境变量

[root@localhost ~]# vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_144
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

刷新环境变量

[root@localhost ~]# source /etc/profile
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/java/jdk1.8.0_144/bin
[root@localhost ~]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

到此 JDK安装完成

15.6 linux的Tomcat安装

使用 rz 命令上传tomcat的压缩包

[root@localhost ~]# rz

注意我们上传的gzip压缩的tomcat压缩包,所以解压的时候需要使用 tar -zxvf 命令操作

[root@localhost ~]# tar -zxvf apache-tomcat-8.0.53.tar.gz -C /usr/local

重新修改tomcat的文件目录名称

[root@localhost ~]# cd /usr/local/
[root@localhost local]# mv apache-tomcat-8.0.53 tomcat

1.7 linux克隆与SSH配置

  1. 修改计算机名称
[root@localhost ~]# hostnamectl set-hostname master.javaee <-- 修改计算机名称为 master.javaee
[root@localhost ~]# hostname <-- 查看现在的计算机名称
master.javaee
  1. 配置host

    [root@localhost ~]# vi /etc/hosts

添加内容

192.168.92.10 master.javaee
192.168.92.11 slave.javaee

测试

[root@localhost ~]# ping master.javaee
PING master.javaee (192.168.92.10) 56(84) bytes of data.
64 bytes from master.javaee (192.168.92.10): icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from master.javaee (192.168.92.10): icmp_seq=2 ttl=64 time=0.024 ms
  1. 关机克隆
    关机

    [root@localhost ~]# shutdown -h now

开始克隆
2019-8-24 [Linux] 15.搭建两台虚拟机实现互联组成一个小型网络 详细版_第5张图片
2019-8-24 [Linux] 15.搭建两台虚拟机实现互联组成一个小型网络 详细版_第6张图片
2019-8-24 [Linux] 15.搭建两台虚拟机实现互联组成一个小型网络 详细版_第7张图片
2019-8-24 [Linux] 15.搭建两台虚拟机实现互联组成一个小型网络 详细版_第8张图片
4. 修改从机的计算机名和IP地址
修改计算机名称

[root@master ~]# hostnamectl set-hostname slave.javaee
[root@master ~]# hostname
slave.javaee

修改主机IP

[root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改前 :
2019-8-24 [Linux] 15.搭建两台虚拟机实现互联组成一个小型网络 详细版_第9张图片
修改后 :
2019-8-24 [Linux] 15.搭建两台虚拟机实现互联组成一个小型网络 详细版_第10张图片
5. 重启从机 启动主机 master ping两个主机的主机名看是否有问题

[root@master ~]# ping master.javaee
PING master.javaee (192.168.92.10) 56(84) bytes of data.
64 bytes from master.javaee (192.168.92.10): icmp_seq=1 ttl=64 time=0.016 ms <-- 有响应说明可以正常操作
64 bytes from master.javaee (192.168.92.10): icmp_seq=2 ttl=64 time=0.026 ms
^C
--- master.javaee ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.016/0.021/0.026/0.005 ms

[root@master ~]# ping slave.javaee
PING slave.javaee (192.168.92.11) 56(84) bytes of data.
64 bytes from slave.javaee (192.168.92.11): icmp_seq=1 ttl=64 time=0.361 ms <-- 有响应说明可以正常操作
64 bytes from slave.javaee (192.168.92.11): icmp_seq=2 ttl=64 time=0.220 ms
64 bytes from slave.javaee (192.168.92.11): icmp_seq=3 ttl=64 time=0.160 ms

6.配置两台SSH的免密登录
以下操作均在master主机上进行
在root的家目录创建 .ssh 目录 设置权限为 700 权限

[root@master ~]# mkdir .ssh
[root@master ~]# chmod 700 .ssh

进入 .ssh 目录生成root用户在 master 主机上的公钥 与 私钥

[root@master .ssh]# ssh-keygen -t rsa <-- rsa 算法指定密码
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:IykYRc/4XvDvECgy8tdPolLknqBQamW+0t6jBgTYtnU root@master.javaee
The key's randomart image is:
+---[RSA 2048]----+
|.. .o            |
|o o..+E          |
|...o..+          |
| .o=.. =         |
|ooBoo = S        |
|o=.+o= o +       |
|o.++o.+ o .      |
|...=+o + o       |
|  ++o.. . .      |
+----[SHA256]-----+


将秘钥拷贝到 authorized_keys 文件中 , 设置权限为 600 , 将这个文件远程拷贝给salve.javaee

[root@master .ssh]# ll
总用量 8
-rw------- 1 root root 1675 527 19:45 id_rsa
-rw-r--r-- 1 root root  400 527 19:45 id_rsa.pub
[root@master .ssh]# touch authorized_keys   <-- 创建ssh公钥文件
[root@master .ssh]# chmod 600 authorized_keys <-- 赋予600权限 这个很重要 其他权限可能直接导致SSH失败
[root@master .ssh]# cat id_rsa.pub >> authorized_keys <-- 追加内容
[root@master .ssh]# scp authorized_keys root@slave.javaee:~/  <-- 将文件远程拷贝到slave.javaee的家目录
The authenticity of host 'slave.javaee (192.168.92.11)' can't be established.
ECDSA key fingerprint is SHA256:gmAFupTcAEXJJ+C+OOgxjIw+O2VHa1es+nRv6bUOGfU.
ECDSA key fingerprint is MD5:9a:97:ac:6d:6e:4c:4b:25:85:df:dd:9c:09:9e:57:5f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'slave.javaee,192.168.92.11' (ECDSA) to the list of known hosts.
root@slave.javaee's password: 
authorized_keys

远程登录 salve.javaee 配置SSH 公钥与私钥 然后将 root 在slave.javaee的公钥拷贝到authorized_keys文件中 然后再远程回传到 master.javaee的.ssh目录中

[root@master .ssh]# ssh slave.javaee
root@slave.javaee's password: 
Last login: Mon May 27 19:28:27 2019 from 192.168.92.1
[root@slave ~]# mkdir .ssh
[root@slave ~]# chmod 700 .ssh
[root@slave ~]# cd .ssh
[root@slave .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:EzpBSmpTyXPTb7eu31Rj+Ln37h1ruKC2oQvpwmwBOwk root@slave.javaee
The key's randomart image is:
+---[RSA 2048]----+
|   .o...         |
|   ++oo .        |
|  + .o....       |
|Eo .   o .o . .  |
|. +   o S. . o o.|
| + .  .. .  . o.o|
|  + .o   . o  o+ |
|   =. . ..o o+ .*|
|  . .. ooooo..+=B|
+----[SHA256]-----+
[root@slave .ssh]# ll
总用量 8
-rw------- 1 root root 1679 527 19:52 id_rsa
-rw-r--r-- 1 root root  399 527 19:52 id_rsa.pub
[root@slave .ssh]# ll ~/
总用量 175240
-rw-------. 1 root root      1359 524 12:23 anaconda-ks.cfg
-rw-r--r--  1 root root   9455895 115 2018 apache-tomcat-8.0.53.tar.gz
-rw-r--r--  1 root root       399 527 19:52 aut
-rw-------  1 root root       400 527 19:49 authorized_keys
-rw-r--r--. 1 root root      1664 429 2018 CentOS-Base.repo
-rw-r--r--  1 root root 169971490 312 19:28 jdk-8u144-linux-x64.rpm
[root@slave .ssh]# mv ~/authorized_keys ./
[root@slave .ssh]# ll
总用量 12
-rw------- 1 root root  400 527 19:49 authorized_keys
-rw------- 1 root root 1679 527 19:52 id_rsa
-rw-r--r-- 1 root root  399 527 19:52 id_rsa.pub
[root@slave .ssh]# cat id_rsa.pub >> authorized_keys 
[root@slave .ssh]# cat authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUei1S8evjtiryqWd80AteA9CI81AcigFXwJT/hY42Ey/6Dja1acpmxzKc5Sk1+DY6PvmNxx3d7XzM64tdcEH4BSciNn71i48rLHR+I755QFgmlOy6tBogaBfVCF5o1gdP+KBou1y60QD+f89ok7hUpATgUb4GGkS99gDExEyea1D5y5H4Co1pFL1bdlhsOHbFSYvL/oVxjx966d3epf9Q7pmCGKTyM3+Tlw6c29URgJZc/PTUGEwz0PMNxkeY7rYtfyTHLpeOQuHAavc3xrrc3hXen5+Hpbe1MQuHf77gVYtaxAh3CIRi1KIUsR19Q+r8wJmwYTjIvCwPzHSf6TCj root@master.javaee
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMsGOn9nZasrZIr1BIAHE1ko7pfhd8yjx9u75rizbGh0xG5Hu7Bv42llXKn58tlK8MidD8MBrYonaVQczXpioNZPa4GRQvFhk80RA4hQ14NFVh37j2GVH9W/zNFdSfClyPkcqmtL/6V5053tGSesnXd0Ah0wVA5sH8ZerJGQsAsdHamPDqc1v4Xk1u0xOE+ujHBc84hyMyxQ8Aw12ij+HnEzpPCdIH5B9vCjufxskE+Y1MXxUjoUOm3kWq2Zn6HJe95WPti5uowxPzzRJjShdVaoXn7jAa5Ske53SgLXVBTyV5u3XwJUsyNHL00SWhCLrCqm6Cxhujnocie8Y2pnft root@slave.javaee
[root@slave .ssh]# scp authorized_keys root@master.javaee:~/.ssh/
The authenticity of host 'master.javaee (192.168.92.10)' can't be established.
ECDSA key fingerprint is SHA256:gmAFupTcAEXJJ+C+OOgxjIw+O2VHa1es+nRv6bUOGfU.
ECDSA key fingerprint is MD5:9a:97:ac:6d:6e:4c:4b:25:85:df:dd:9c:09:9e:57:5f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'master.javaee,192.168.92.10' (ECDSA) to the list of known hosts.
root@master.javaee's password: 
authorized_keys

验证互相的SSH效果

[root@slave .ssh]# ssh master.javaee
Last login: Mon May 27 19:40:54 2019 from 192.168.92.1
[root@master ~]# ssh slave.javaee
Last login: Mon May 27 19:52:02 2019 from master.javaee

15.8 linux的MySQL安装

此操作需要在master.javaee中进行!
CentOS7的yum源中默认好像是没有mysql的。为了解决这个问题,我们要先下载mysql的repo源。
1.下载mysql的repo源

[root@linux1 ~]# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

注意,有的时候会下载失败,多下几次就好了;
2. 安装mysql-community-release-el7-5.noarch.rpm包

[root@linux1 ~]# rpm -ivh mysql-community-release-el7-5.noarch.rpm

3.安装这个包后,会获得两个mysql的yum repo源:

/etc/yum.repos.d/mysql-community.repo
/etc/yum.repos.d/mysql-community-source.repo

4.安装mysql

[root@linux1 ~]# yum -y install mysql-server

注意 : 这个安装过程根据你的网速可能会很慢,所以要耐心的等待一会儿;

安装成功!
5. 重置密码
重置密码前,首先要登录

[root@linux1 ~]# mysql -uroot

执行以上命令会出现以下错误 :

[root@linux1 ~]# mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

这个错误说明mysql的文件夹不是root用户 而是默认的mysql用户,所以我们要把这个目录的归属改成root用户

[root@linux1 lib]# chown root:root /var/lib/mysql*

将 /var/lib/mysql开头的目录的所有者改成root;然后,重启服务:

[root@linux1 ~]# service mysqld restart

接下来登录重置密码:

[root@linux1 ~]# mysql -uroot

开始修改密码 :

mysql> show databases; <-- 第一个命令查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
​
mysql> use mysql; <-- 第二个命令 使用 mysql数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
​
Database changed
mysql> update user set password=password('root') where user='root'; <-- 第三个命令,修改root的密码为root 因为需要MD5加密,所以此处使用mysql的password()函数加密密码
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0


6. 设置MySQL数据库的远程访问权限

mysql> Grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option; <-- 这句话的含义是 当你用任意IP 使用 用户名 root 密码root登录的时候可以对任何数据库表进行任何操作
Query OK, 0 rows affected (0.00 sec)
​
mysql> flush privileges;    <-- 这句话的含义是 因为你修改了全选需要重新刷新才可以生效
Query OK, 0 rows affected (0.00 sec)


7. 设置MySQL数据库的开机自动启动

[root@linux1 ~]# vim /etc/rc.local
​
 添加service mysqld start

重启检查是否是自动启动

[root@linux1 ~]# systemctl list-unit-files | grep mysql
mysql.service                                 enabled 
mysqld.service                                enabled 

到此已经安装完成mysql服务器

8.设置MySQL数据库的编码
查看编码

mysql> show variables like 'character%'; <-- 查看编码
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

此处需要将 latin1 的编码修改为utf8 否则操作中文数据会有问题
9. 修改mysql的配置文件

[root@linux1 ~]# vi /etc/my.cnf

加入如下内容

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
​
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
[client]
default-character-set=utf8 <-- 这里是后添加的
​
​
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8 <-- 这里是后添加的
​
​
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
​
init_connect='SET NAMES utf8' <-- 这里是后添加的
​
​
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


重启服务器 :

[root@linux1 ~]# service mysql restart

再次验证 :

mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

编码也设置成功了!

15.8 linux的Nginx安装

此操作也是在master.javaee 主机上完成

一、安装编译工具及库文件

[root@master ~]# yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
软件包 1:make-3.82-23.el7.x86_64 已安装并且是最新版本
软件包 zlib-1.2.7-18.el7.x86_64 已安装并且是最新版本
软件包 zlib-devel-1.2.7-18.el7.x86_64 已安装并且是最新版本
软件包 gcc-c++-4.8.5-36.el7_6.2.x86_64 已安装并且是最新版本
软件包 libtool-2.4.2-22.el7_3.x86_64 已安装并且是最新版本
软件包 1:openssl-1.0.2k-16.el7_6.1.x86_64 已安装并且是最新版本
软件包 1:openssl-devel-1.0.2k-16.el7_6.1.x86_64 已安装并且是最新版本
无须任何处理

二、首先要安装 PCRE

PCRE 作用是让 Nginx 支持 Rewrite 功能。

[root@master ~]# rz
[root@master ~]# ll
总用量 177192
-rw-------. 1 root root      1359 524 12:23 anaconda-ks.cfg
-rw-r--r--  1 root root   9455895 115 2018 apache-tomcat-8.0.53.tar.gz
-rw-r--r--. 1 root root      1664 429 2018 CentOS-Base.repo
-rw-r--r--  1 root root 169971490 312 19:28 jdk-8u144-linux-x64.rpm
-rw-r--r--  1 root root      6140 1112 2015 mysql-community-release-el7-5.noarch.rpm
-rw-r--r--  1 root root   1996552 527 20:16 pcre-8.35.tar.gz

  1. 解压安装包
[root@master ~]# tar -zxvf pcre-8.35.tar.gz -C /usr/local/src/
 
[root@master ~]# cd /usr/local/src/
[root@master src]# ll
总用量 12
drwxr-xr-x 7 1169 1169 8192 44 2014 pcre-8.35
  1. 进入安装目录 编译 并安装软件
[root@master src]# cd pcre-8.35/
[root@master pcre-8.35]# ./configure
......提示信息略
[root@master pcre-8.35]# make && make install
.....安装提示信息略
  1. 验证是否安装成功
[root@master pcre-8.35]# pcre-config --version
8.35 <-- 返回版本号 说明已经安装成功了

三、安装 Nginx

1, 上传nginx安装包
或 wget http://nginx.org/download/nginx-1.6.2.tar.gz

[root@master pcre-8.35]# cd ~
[root@master ~]# rz
​
[root@master ~]# ll
总用量 177980
-rw-------. 1 root root      1359 524 12:23 anaconda-ks.cfg
-rw-r--r--  1 root root   9455895 115 2018 apache-tomcat-8.0.53.tar.gz
-rw-r--r--. 1 root root      1664 429 2018 CentOS-Base.repo
-rw-r--r--  1 root root 169971490 312 19:28 jdk-8u144-linux-x64.rpm
-rw-r--r--  1 root root      6140 1112 2015 mysql-community-release-el7-5.noarch.rpm
-rw-r--r--  1 root root    804164 527 20:21 nginx-1.6.2.tar.gz <-- 刚上传的nginx安装包
-rw-r--r--  1 root root   1996552 527 20:16 pcre-8.35.tar.gz
  1. 解压nginx

    [root@master ~]# tar -zxvf nginx-1.6.2.tar.gz -C /usr/local/src/

  2. 进入安装目录 将nginx安装在 /usr/local/webserver/ 中

[root@master ~]# cd /usr/local/src/nginx-1.6.2/
[root@master nginx-1.6.2]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
.......信息提示部分()
[root@master nginx-1.6.2]# make
.......信息提示部分()
[root@master nginx-1.6.2]# make install
.......信息提示部分()
  1. 验证是否安装成功
[root@master nginx-1.6.2]# /usr/local/webserver/nginx/sbin/nginx -v
nginx version: nginx/1.6.2  <-- 此处可以返回版本 nginx 配置成功

Nginx配置文件结构
如果你下载好啦,你的安装文件,不妨打开conf文件夹的nginx.conf文件,Nginx服务器的基础配置,默认的配置也存放在此。

在 nginx.conf 的注释符号为: #

默认的 nginx 配置文件 nginx.conf 内容如下:

#user  nobody;
worker_processes  1;
​
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
​
#pid        logs/nginx.pid;
​
​
events {
    worker_connections  1024;
}
​
​
http {
    include       mime.types;
    default_type  application/octet-stream;
​
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
​
    #access_log  logs/access.log  main;
​
    sendfile        on;
    #tcp_nopush     on;
​
    #keepalive_timeout  0;
    keepalive_timeout  65;
​
    #gzip  on;
​
    server {
        listen       80;
        server_name  localhost;
​
        #charset koi8-r;
​
        #access_log  logs/host.access.log  main;
​
        location / {
            root   html;
            index  index.html index.htm;
        }
​
        #error_page  404              /404.html;
​
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
​
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
​
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
​
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
​
​
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
​
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
​
​
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
​
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
​
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
​
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
​
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}}

四、nginx 文件结构

...              #全局块
​
events {         #events块
   ...
}
​
http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:配置请求的路由,以及各种页面的处理情况。
下面开始做nginx的负载均衡的配置,实现思路为一个nginx配置两个tomcat,然后根据权重来分配哪台应该承载更高的访问量

#运行用户,默认即是nginx,可不设置 因为我们是root用户安装的所以此处设置为root
user  root root;
​
#nginx进程,一般设置为和cpu核数一样
worker_processes 1;
​
#错误日志存放目录
error_log  /usr/local/webserver/nginx/logs/nginx_error.log  crit;
​
#进程pid存放位置
pid        /usr/local/webserver/nginx/logs/nginx.pid;
​
#最大文件打开数(连接)可设置为系统优化后的ulimit -HSn的结果 此处使用lnmp环境的默认配置
worker_rlimit_nofile 51200;
​
#工作模式及连接数上限 采用lnmp的默认设置
events
    {
        #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
        use epoll; 
        #单个后台worker process进程的最大并发链接数
        worker_connections 51200;
    }
​
# http协议设置  
http {
    #文件扩展名与类型映射表
    include       mime.types;
    #默认文件类型
    default_type  application/octet-stream;
    
    #负责压缩数据流
    gzip              on;  
    gzip_min_length   1000;  
    gzip_types        text/plain text/css application/x-javascript;
​
    #log format
    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" $http_x_forwarded_for';
    # tomcat服务器配置
    upstream tomcat_server{
        server master.javaee:8080 weight=1;
        server slave.javaee:8080 weight=4;
    }
​
    # 访问规则设置
    server {
        #侦听的80端口
        listen       80;
        #设置自己的域名 此处是唯一一个需要调整的地方
        server_name  www.hnjava.com;
        #设定查看Nginx状态的地址
        location /nginxstatus{
             stub_status on;
             access_log on;
             auth_basic "nginxstatus";
             auth_basic_user_file htpasswd;
        }
        #匹配以jsp结尾的,tomcat的网页文件是以jsp结尾
        location / {
            index index.jsp;
            proxy_pass   http://tomcat_server;    #在这里设置一个代理,和upstream的名字一样
            
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header           Host $host; 
            proxy_set_header           X-Real-IP $remote_addr; 
            proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for; 
            client_max_body_size       10m; #允许客户端请求的最大单文件字节数
            client_body_buffer_size    128k; #缓冲区代理缓冲用户端请求的最大字节数
            proxy_connect_timeout      300; #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout         300; #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout         300; #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_buffer_size          4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffers              4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            proxy_busy_buffers_size    64k; #高负荷下缓冲大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
        }
        #设置nginx的访问正确的日志位置
        access_log  /usr/local/webserver/nginx/logs/access.log  access;
    }
}


上传然后覆盖之前的nginx配置文件

[root@master ~]# mv nginx.conf /usr/local/webserver/nginx/conf/
mv:是否覆盖"/usr/local/webserver/nginx/conf/nginx.conf"? yes
​
测试配置文件是否有问题
[root@master ~]# /usr/local/webserver/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/webserver/nginx/conf/nginx.conf test is successful <-- 检查配置文件没有问题
启动nginx
[root@master ~]# /usr/local/webserver/nginx/sbin/nginx

查看nginx是否正常启动
[root@master ~]# /usr/local/webserver/nginx/sbin/nginx 
[root@master ~]# ps aux | grep nginx
root      36251  0.0  0.1  45828  1128 ?        Ss   21:09   0:00 nginx: master process /usr/local/webserver/nginx/sbin/nginx
root      36252  0.0  2.2  67040 22484 ?        S    21:09   0:00 nginx: worker process
root      36285  0.0  0.0 112724   984 pts/2    S+   21:10   0:00 grep --color=auto nginx
关闭nginx
[root@master ~]# pkill nginx
主从服务器启动tomcat ,客户端设置host访问服务器nginx
配置C:\Windows\System32\drivers\etc\hosts
192.168.92.10 www.hnjava.com
[root@master ~]# sh /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_144/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@master ~]# ssh slave.javaee
Last login: Mon May 27 19:55:10 2019 from master.javaee
[root@slave ~]# sh /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_144/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

浏览器访问:

2019-8-24 [Linux] 15.搭建两台虚拟机实现互联组成一个小型网络 详细版_第11张图片

15.9 批量操作脚本编写

编写脚本完成 master 和 slave 服务器的 nginx 和 tomcat的批量打开与关闭

15.9.1 实现一个机器操作多台机器做同样工作的脚本

如何获取当前执行脚本的路径

用`dirname $0`。

这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,这样就可以知道一些和脚本一起部署的文件的位置了,只要知道相对位置就可以根据这个目录来定位,而可以不用关心绝对位置。这样脚本的可移植性就提高了,扔到任何一台服务器,(如果是部署脚本)都可以执行。

#! /bin/bash
#获取脚本的当前位置
cd `dirname $0`
#输出脚本位置
echo `pwd`

拼接 SSH 命令

拼出 ssh 登录用户名@IP或主机名 “要执行的命令字符串”

如何动态执行拼接的SSH 命令

通过 eval 命令
eval命令会计算(evalue)它的参数,这些参数作为表达式计算后重新组合为一个字符串,然后作为一个命令被执行。
eval最常见的用法是将动态生成的命令行计算并执行。
示例:

name=woodie
cmd="echo Helllo $name\! "
eval $cmd
Hello woodie!

实现将一个机器内的文件拷贝到其他机器上的脚本

原理与3.1 相同,唯独不同的地方就是拼接 scp 命令。
拼出 scp 文件名 登录用户名@目标机器IP或主机名:目标目录

完整操作脚本

#!/bin/bash
cd `dirname $0`/yghn/
echo `pwd`
cmd="scp f1 [email protected]:~/"
eval ${cmd}
echo "复制成功!"

效果:

[luser@localhost ~]$ ./sh1.sh  
/home/luser/yghn
f1                                            100%   39    46.4KB/s   00:00    
复制成功!

你可能感兴趣的:(Linux,Linux)