使用两台linux,一台主linux,一台从linux.主linux主要工作是后台 从linux主要工作是前台
主linux命名为 : master
从linux命名为 : slave1
master 安装 JDK Tomcat MySQL Nginx
slave1 安装 JDK Tomcat
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
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。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。
Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。
Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。
牛逼吹的差不多啦,如果你还不过瘾,你可以百度百科或者一些书上找到这样的夸耀,比比皆是。
1、Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。
这里我给来2张图,对正向代理与反响代理做个诠释,具体细节,大家可以翻阅下资料。
Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。
上3个图,理解这三种负载均衡算法的实现
Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
3. web缓存
Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。
安装linux,版本Centos7,初始化配置包括静态网卡配置,关闭防火墙,关闭SELinux;
新建虚拟机
选择虚拟机版本
选择centos7的镜像文件
修改虚拟机的名称与文件位置
调整虚拟CPU的核心数
设置虚拟内存
选择虚拟网络类型,此处选择NET模式
选择虚拟硬盘类型 默认即可
设置虚拟硬盘大小,此处选择单一文件
完成配置开启虚拟机
鼠标移入 点击回车
下面页面继续点击回车
检查磁盘,需要稍等一会儿
选择 语言 中文 --> 简体中文
整体配置页面 需要配置 网络 日期和时间 硬盘格式化
网络选择
此处需要记住 主机的IP信息 因为使用的是NET模式,所以谁和谁的都不一样,要注意这个问题
配置完成之后别忘记点击上方的完成回到主页面配置其他信息
回到主页面选择时间和日期,验证网络配置是否正确,此处我们主要通过添加NTP服务器的方式进行验证
是绿色的对号 说明是可以连接阿里云的,那也就是变相的说明我们的服务器现在是可以连接网络的
接下来调整磁盘
所有配置工作结束 开始完成安装
下一个页面设置root的密码是 000000
因为我们的密码过于简单,所以此处第一次点完成会停顿一下 然后再点一次完成就可以了
等待安装成功之后点击重启按钮 等待进入系统即可
到此系统安装成功
登录虚拟机,查看本机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设置
修改好之后进行网络服务配置
[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.
重启网卡
[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
[root@localhost ~]# reboot
配置阿里云的yum源
安装wget
[root@localhost ~]# yum -y install wget
下载yum源的配置文件
[root@localhost ~]# wget http://mirrors.aliyun.com/repo/Centos-7.repo
替换原有的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配置文件放在系统的指定目录
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
[root@localhost ~]# yum -y update
[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
此处我们选用 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安装完成
使用 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
[root@localhost ~]# hostnamectl set-hostname master.javaee <-- 修改计算机名称为 master.javaee
[root@localhost ~]# hostname <-- 查看现在的计算机名称
master.javaee
配置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
关机克隆
关机
[root@localhost ~]# shutdown -h now
开始克隆
4. 修改从机的计算机名和IP地址
修改计算机名称
[root@master ~]# hostnamectl set-hostname slave.javaee
[root@master ~]# hostname
slave.javaee
修改主机IP
[root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改前 :
修改后 :
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 5月 27 19:45 id_rsa
-rw-r--r-- 1 root root 400 5月 27 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 5月 27 19:52 id_rsa
-rw-r--r-- 1 root root 399 5月 27 19:52 id_rsa.pub
[root@slave .ssh]# ll ~/
总用量 175240
-rw-------. 1 root root 1359 5月 24 12:23 anaconda-ks.cfg
-rw-r--r-- 1 root root 9455895 11月 5 2018 apache-tomcat-8.0.53.tar.gz
-rw-r--r-- 1 root root 399 5月 27 19:52 aut
-rw------- 1 root root 400 5月 27 19:49 authorized_keys
-rw-r--r--. 1 root root 1664 4月 29 2018 CentOS-Base.repo
-rw-r--r-- 1 root root 169971490 3月 12 19:28 jdk-8u144-linux-x64.rpm
[root@slave .ssh]# mv ~/authorized_keys ./
[root@slave .ssh]# ll
总用量 12
-rw------- 1 root root 400 5月 27 19:49 authorized_keys
-rw------- 1 root root 1679 5月 27 19:52 id_rsa
-rw-r--r-- 1 root root 399 5月 27 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
此操作需要在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)
编码也设置成功了!
此操作也是在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 作用是让 Nginx 支持 Rewrite 功能。
[root@master ~]# rz
[root@master ~]# ll
总用量 177192
-rw-------. 1 root root 1359 5月 24 12:23 anaconda-ks.cfg
-rw-r--r-- 1 root root 9455895 11月 5 2018 apache-tomcat-8.0.53.tar.gz
-rw-r--r--. 1 root root 1664 4月 29 2018 CentOS-Base.repo
-rw-r--r-- 1 root root 169971490 3月 12 19:28 jdk-8u144-linux-x64.rpm
-rw-r--r-- 1 root root 6140 11月 12 2015 mysql-community-release-el7-5.noarch.rpm
-rw-r--r-- 1 root root 1996552 5月 27 20:16 pcre-8.35.tar.gz
[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 4月 4 2014 pcre-8.35
[root@master src]# cd pcre-8.35/
[root@master pcre-8.35]# ./configure
......提示信息略
[root@master pcre-8.35]# make && make install
.....安装提示信息略
[root@master pcre-8.35]# pcre-config --version
8.35 <-- 返回版本号 说明已经安装成功了
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 5月 24 12:23 anaconda-ks.cfg
-rw-r--r-- 1 root root 9455895 11月 5 2018 apache-tomcat-8.0.53.tar.gz
-rw-r--r--. 1 root root 1664 4月 29 2018 CentOS-Base.repo
-rw-r--r-- 1 root root 169971490 3月 12 19:28 jdk-8u144-linux-x64.rpm
-rw-r--r-- 1 root root 6140 11月 12 2015 mysql-community-release-el7-5.noarch.rpm
-rw-r--r-- 1 root root 804164 5月 27 20:21 nginx-1.6.2.tar.gz <-- 刚上传的nginx安装包
-rw-r--r-- 1 root root 1996552 5月 27 20:16 pcre-8.35.tar.gz
解压nginx
[root@master ~]# tar -zxvf nginx-1.6.2.tar.gz -C /usr/local/src/
进入安装目录 将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
.......信息提示部分(略)
[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;
# }
#}
}
... #全局块
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.
浏览器访问:
编写脚本完成 master 和 slave 服务器的 nginx 和 tomcat的批量打开与关闭
用`dirname $0`。
这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,这样就可以知道一些和脚本一起部署的文件的位置了,只要知道相对位置就可以根据这个目录来定位,而可以不用关心绝对位置。这样脚本的可移植性就提高了,扔到任何一台服务器,(如果是部署脚本)都可以执行。
#! /bin/bash
#获取脚本的当前位置
cd `dirname $0`
#输出脚本位置
echo `pwd`
拼出 ssh 登录用户名@IP或主机名 “要执行的命令字符串”
通过 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
复制成功!