**

Linux基础服务

FTP服务

一、FTP简介

FTP是File Transfer Protocol(文件传输协议)的缩写,是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。
FTP是用来在两台计算机之间传输文件,是Internet中应用非常广泛的服务之一。它可根据实际需要设置各用户的使用权限,同时还具有跨平台的特性,即在UNIX、Linux和Windows等操作系统中都可实现FTP客户端和服务器,相互之间可跨平台进行文件的传输。因此,FTP服务是网络中经常采用的资源共享方式之一。
FTP服务属于C/S架构,是一种基于TCP的协议,且拥有两种传输模式,一种为ASCⅢ传输模式(假定正在传输的文件包含简单的ASCI码文本,当文件传输时FTP通常会自动地调整文件的内容,以便将文件存储为另外一台计算机上的ASCI码文本文件,这种文件传输模式速度慢,且会损坏数据),另一种为二进制传输模式(在二进制传输中,保存的是文件的二进制位序,以便源文件与目标文件逐位一一对应,从而保证二进制文件的正确传输,通常选用二进制。)
端口号为20和21,通常21端口是命令端口,20端口是数据端口。

二、FTP工作模式

FTP协议有PORT和PASV两种工作模式,即主动模式和被动模式。
主动模式(port)
在主动模式下,FTP客户端首先随机开启一个小于1024的端口来与FTP服务器的21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送Pot命令。Port命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过其TCP20端口连接到客户端的指定端口发送数据。FTP服务器必须与客户端建立一个新的连接用来传送数据。主动FTP连接过程如下:
命令连接:客户端>1024端口→服务器21端口;
数据连接:客户端>1024端口←服务器20端口。

被动模式(pasv)
为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。
FTP服务器收到Pas命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器上的这个端口,然后FTP服务器将通过这个端口传送数据。在这种情况下,FTP服务器不再需要与客户端建立一个新的连接,被动FTP连接过程如下:
命令连接:客户端>1024端口→服务器21端口;
数据连接:客户端>1024端口→服务器>1024端口。

三、FTP安装配置

[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
anon_root=/opt
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl enable vsftpd
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@localhost ~]# getenforce
Disabled
[root@localhost ~]# curl -L ftp://192.168.200.11
drwxr-xr-x 8 0 0 2048 May 03 2018 centos
[root@localhost ~]# yum -y install net-tools
[root@localhost ~]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN 928/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:
LISTEN 1124/master
tcp6 0 0 :::21 ::: LISTEN 2020/vsftpd
tcp6 0 0 :::22 :::
LISTEN 928/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1124/master

通过务ftp服器提供yum仓库,同时保证防火墙与SElinux关闭。
[centos]
name=centos
baseurl=ftp://192.168.200.11/centos
gpgcheck=0
enabled=1

DNS服务器的搭建与部署

一.DNS服务器简介

DNS(域名服务器)是进行域名和与它相对应的IP地址相互转换的服务器。DNS中保存了一张域名和与之相对应的IP地址的表格,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。

二.域名解析

必要因素:假设某一位用户在购买了相应的域名注册并且购买了主机,他需要将域名解析到所购买的主机上,才可看到对应网站上相关信息。在大部分的情况下,DNS域名服务器解析好域名之后,并不能马上看到网站上的信息,而是有很大的时效性。
解析过程:如果要去深究为什么在域名解析上要花那么长的时间,这就要了解域名解析过程和DNS服务器的作用。
我们现在所处的局域网中的每一台电脑都有一个独立的IP地址,数据在进行传输时实际上是依靠不同IP之间来进行的。包括家用的PC在链接网络时也会通过运营商的接入网络随机分配IP地址。
网站的服务器在本质上来说也是一台连上网的电脑,只不过配置上更适合作为服务器,并且放在数据中心,保持低温,低尘环境,同时有安全保卫。这些服务器使用固定IP地址连入互联网。
一个域名被解析到某一台服务器上,并且把网页文件放到这台服务器上,用户的电脑才知道去哪一台服务器获取这个域名的网页信息。这是通过域名服务器来实现的。每一个域名至少要有两个DNS,如果其中一个DNS出现问题,另外一个就可以返回关于这个域名的数据。当然DNS服务器也可以有两个以上,但所有这些DNS服务器上的DNS记录都是相同的。
当一个浏览者在浏览器地址框中打入某一个域名,或者从其他网站点击了链接来到了这个域名,浏览器向这个用户的上网接入商发出域名请求,接入商的DNS服务器要查询域名数据库,看这个域名的DNS服务器是什么。然后到DNS服务器中抓取DNS记录,也就是获取这个域名指向哪一个IP地址。在获得这个IP信息后,接入商的服务器就去这个IP地址所对应的服务器上抓取网页内容,然后传输给发出请求的浏览器。这个过程描述起来蛮复杂,但实际上不到一两秒钟就完成了。

三.域名的分类

域名拥有一定的级别,共分为三级,包括顶级域名、二级域名和三级域名。
顶级域名分为了两类,第一种是国际域名(international top-level domain-names,简称iTDs),也叫国际顶级域名。这也是使用最早也最广泛的域名。例如表示工商企业的 .com .top,表示网络提供商的.net,表示非盈利组织的.org等。第二种是国内域名,又称为国内顶级域名(national top-level domainnames,简称nTLDs),即按照国家的不同分配不同后缀,这些域名即为该国的国内顶级域名。200多个国家和地区都按照ISO3166国家代码分配了顶级域名,例如中国是cn,美国是us,日本是jp等。
二级域名是指顶级域名之下的域名,在国际顶级域名下,它是指域名注册人的网上名称,例如ibm,yahoo,microsoft等;在国家顶级域名下,它是表示注册企业类别的符号,例如com,top,edu,gov,net等。
我国在国际互联网络信息中心(Inter NIC) 正式注册并运行的顶级域名是CN,这也是我国的一级域名。在顶级域名之下,我国的二级域名又分为类别域名和行政区域名两类。类别域名共6个, 包括用于科研机构的ac;用于工商金融企业的com top;用于教育机构的edu;用于政府部门的 gov;用于互联网络信息中心和运行中心的net;用于非盈利组织的org。而行政区域名有34个,分别对应于我国各省、自治区和直辖市。
三级域名用字母(A~Z,a~z,大小写等)、数字(0~9)和连接符(-)组成, 各级域名之间用实点(.)连接,三级域名的长度不能超过20个字符。 如无特殊原因,建议采用申请人的英文名(或者缩写)或者汉语拼音名 (或者缩写) 作为三级域名,以保持域名的清晰性和简洁性。

四.域名的使用期限

期限状态
1. 国际域名过期30天内可以提交续费试试但不保证成功; 过期后30-60天为赎回期(redemptionPeriod)可以交赎回费用进行赎回,但是也不保证成功,过期后 60-75天为删除期(pendingDelete)这种状态只有等待删除后重新注册。
2. 如果国际域名过期后进入赎回期状态:(REDEMPTION PERIOD),您只能选择办理赎回或者等待域名释放后重新注册。
使用续费
根据中国互联网络信息中心CNNIC)的要求,从2007年12月20日起,CN英文域名的续费规则进行了相应的调整: CN英文域名到期未办理续费业务,域名会进入续费期,在此期间您的域名将可能暂停原来的解析,直到您成功续费后方可恢复。cn到期后30天可续费。续费期内如仍未完成续费,域名会进入高价赎回期,域名状态变为“pendingDelete”,无法进行信息修改、转移和解析等操作。如您仍想要该域名,则需要按规定另外缴纳赎回域名的费用;若赎回期内域名没有被赎回,赎回期结束后60-75天为删除期,该域名将被删除。
细分类型:
1.主域名服务器
负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。
2.辅助域名服务器
当主域名服务器出现故障、关闭或负载过重时,辅助域名服务器作为主域名服务器的备份提供域名解析服务。辅助域名服务器中的区域文件中的数据是从另外的一台主域名服务器中复制过来的,是不可以修改的。
3.缓存域名服务器
从某个远程服务器取得每次域名服务器的查询回答,一旦取得一个答案就将它放在高速缓存中,以后查询相同的信息就用高速缓存中的数据回答,缓存域名服务器不是权威的域名服务器,因为它提供的信息都是间接信息。
4.转发域名服务器
负责所有非本地域名的本地查询。转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果。

五.DNS服务搭建与配置

[root@localhost ~]# timedatectl set-timezone Asia/Shanghai //设置时区
[root@localhost ~]# timedatectl set-ntp yes //开启时间同步
[root@localhost ~]# hostnamectl set-hostname master //修改系统的主机名
[root@localhost ~]# bash //刷新
[root@master ~]# mv /etc/yum.repos.d/* /media/ //配置YUM源
[root@master ~]# mkdir /opt/centos //创建镜像挂载点
[root@master ~]# mount /dev/sr0 /opt/centos //挂载镜像
mount: /dev/sr0 is write-protected, mounting read-only
[root@master ~]# vi /etc/yum.repos.d/local.repo //编辑本地源文件
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[root@localhost ~]# yum install bind-chroot bind-utils -y //安装DNS相关服务
[root@master ~]# vi /etc/named.conf //修改配置文件
将第十三行以及第十九行中的大括号内容修改成any;
listen-on port 53 { any; }; //允许服务器上的所有IP均可提供DNS域名解析服务
allow-query { any; }; //允许所有用户对本服务器发送DNS查询请求
[root@master ~]# vi /etc/named.rfc1912.zones //编辑区域配置文件
找到入下内容并修改
zone “test.com” IN {
type master; //主DNS服务器
file “test.com.zone”; //该域的配置文件名称
allow-update { 192.168.200.12; }; //从服务器的地址
};
[root@master ~]# cd /var/named
[root@master named]# ls -al named.localhost //查看正向解析模板文件属性
-rw-r——- 1 root named 152 Jun 21 2007 named.localhost
[root@master named]# cp -a named.localhost test.com.zone //拷贝一份文件,并命名
[root@master named]# vi test.com.zone
$TTL 1D
$ORIGIN test.com.
@ IN SOA test.com. admin.test.com. (
//授权信息开始,DNS区域的地址,在域后面还可以加管理员邮箱,不允许加@,要用.代替
2019001; serial //更新序列号
1D ; refresh //更新时间
1H ; retry //重试时间
1W ; expire //失效时间
3H ; minimum //无效解析记录的缓存时间
)
IN NS ns1.test.com. //DNS区域的地址

ns1 IN A 192.168.200.11 //地址记录
www IN A 192.168.200.11 //站点记录
[root@master named]# systemctl restart named //重启服务

测试DNS解析:
[root@master named]# vi /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.200.11

[root@master named]# nslookup //使用DNS主机测试
> www.test.com
Server: 192.168.200.11
Address: 192.168.200.11#53

Name: www.test.com
Address: 192.168.200.11

[root@master named]# ping www.test.com //使用Ping测试域名
PING www.test.com (192.168.200.11) 56(84) bytes of data.
64 bytes from master (192.168.200.11): icmp_seq=1 ttl=64 time=0.010 ms

NFS服务

一、NFS服务简介

NFS是Network File System的缩写,即网络文件系统。客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。主要功能指的是共享文件。
为什么需要安装NFS服务?当服务器访问流量过大时,需要多台服务器进行分流,而这多台服务器可以使用NFS服务进行共享。(NFS服务是最基础的共享服务)
NFS应用场景,常用于高可用文件共享,多台服务器共享同样的数据,可扩展性比较差,本身高可用方案不完善,取而代之的数据量比较大的可以采用MFS、TFS、HDFS等等分布式文件系统。

二、NFS服务安装

[root@localhost ~]# yum -y install nfs-utils rpcbind //两台节点同时执行
[root@localhost ~]# mkdir /mnt/test //第一台节点创建
[root@localhost ~]# vi /etc/exports //第一台编辑共享参数
/mnt/test 192.168.200.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)
参数详解:
/mnt/test:共享目录 rw 读写权限
no_root_squash:nfs服务连接客户端时,使用root用户登录,对于服务来说存在隐患
no_all_squash:无论NFS客户端连接服务端用什么用户,对服务端来说都有匿名用户的权限
Sync:存入硬盘的同时,同时写入内存
Anonuid:匿名用户UID
Anongid:匿名用户GID

[root@localhost ~]# exportfs -r //第一台生效配置文件
[root@localhost ~]# systemctl start rpcbind //第一台启动服务
[root@localhost ~]# systemctl start nfs //第一台启动服务
[root@localhost ~]# showmount -e 192.168.200.11 //第一台列出可挂载参数
Export list for 192.168.200.11:
/mnt/test 192.168.200.0/24
[root@localhost ~]# mount -t nfs 192.168.200.11:/mnt/test /mnt/ //第二台挂载
[root@localhost ~]# df -h //查看挂载
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 150G 1.1G 149G 1% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 142M 873M 14% /boot
tmpfs 378M 0 378M 0% /run/user/0
192.168.200.11:/mnt/test 150G 1.1G 149G 1% /mnt

测试
[root@localhost ~]# cd /mnt/test/ //第一台
[root@localhost test]# touch 123.txt //第一台
[root@localhost ~]# cd /mnt/ //第二台
[root@localhost mnt]# ll //第二台
total 0
-rw-r—r— 1 root root 0 Oct 15 03:43 123.txt

LNMP+Wordpress个人博客系统

一、lnmp项目简介

Nginx:是由俄罗斯人开发的一款开源的高性能的HTTP和反向代理的Web服务器同时也提供了IMAP(交互邮件访问协议)/POP3(邮局协议版本3)/SMTP(电子邮件传输协议)服务。它的特点是占有内存少,并发能力强,在同类型的网页服务器中表现得尤其出色,目前中国大陆使用Nginx网站的用户有:百度、新浪、京东等企业。C语言编写。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品。MySQL 是最流行的关系型数据库管理系统之一,MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。其特点是体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL 作为网站数据库。MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
PHP—“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳JavaPerl多个语言的特色发展出自己的特色语法。
这4种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

二、wordpress简介

WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。全球约34%的网站都在用WordPress、小到兴趣博客、大到新闻网站,国外的学校里甚至都有WordPress相关的课程。

三、构建lnmp+wordpress

hostnamectl set-hostname lnmp //修改主机名
# hostnamectl //查看主机名
Static hostname: lnmp
Icon name: computer-vm
Chassis: vm
Machine ID: 06c97bdf0e6c4a89898aa7d58c6be2cc
Boot ID: b05f421c261c4a26b5e5d5b67566c826
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-327.el7.x86_64
Architecture: x86-64
# cat /etc/yum.repos.d/local.repo //配置yum源
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[lnmp]
name=lnmp
baseurl=file:///root/project3/lnmp
gpgcheck=0
enabled=1
# yum -y install nginx mariadb-server mariadb php-fpm php-mysql
NGINX
# systemctl start nginx && systemctl enable nginx
# vi /etc/nginx/conf.d/default.conf
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
location ~ .php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# systemctl restart nginx //重启服务
MYSQL
# systemctl start mariadb && systemctl enable mariadb //启动数据库
# mysql_secure_installation //初始化数据库
# mysql -uroot -p123456 //登录数据库
> create database wordpress; //创建数据库服务
> grant all privileges on . to root@localhost identified by ‘123456’ with grant option; //授权所有用户拥有本地数据库的所有权限。
> grant all privileges on . to root@”%” identified by ‘123456’ with grant option; //授权用户可进行远程登录
PHP
# vi /etc/php-fpm.d/www.conf

systemctl start php-fpm && systemctl enable php-fpm

Wordpress
# unzip wordpress-4.7.3-zh_CN.zip
# cd /usr/share/nginx/html
# rm -rf
# cp -rvf /root/wordpress
./
# cp wp-config-sample.php wp-config.php
# chmod 777
# vi wp-config.php
// MySQL 设置 - 具体信息来自您正在使用的主机 //
/** WordPress数据库的名称
/
define(‘DB_NAME’, ‘wordpress’);

使用Curl命令,返回前端页面

/* MySQL数据库用户名 /
define(‘DB_USER’, ‘root’);

/* MySQL数据库密码 /
define(‘DB_PASSWORD’, ‘123456’);

/* MySQL主机 /
define(‘DB_HOST’, ‘127.0.0.1’);

/* 创建数据表时默认的文字编码 /
define(‘DB_CHARSET’, ‘utf8’);

/* 数据库整理类型。如不确定请勿更改 /
define(‘DB_COLLATE’, ‘’);

CIFS(Samba)服务

一、服务介绍

Samba是在LinuxUNIX系统上实现SMB协议的一个自由软件服务,属于C/S架构。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

二、服务的发展

在早期的网络中,数据的传输一般都是在FTP服务器上进行的传输,虽然FTP服务子啊传输数据时比较方便,但是却有一个缺点,那就是用户无法直接修改主机上的数据,也就是说我们如果想去对一个数据做修改那么只能通过在服务端上将源数据下载到客户端之后才可以进行修改,因此数据需要在服务端和客户端上都有存在,这样的话就会有一个问题,如果说某一次修改了数据之后但是没有及时的上传会服务端,过了一阵后就无法确定哪个数据是最新的数据。
那么这个时候就需要有一种文件系统,直接满足在客户端就可以修改存储数据,那么只要保证我们的服务端拥有这套数据就可以,后来就引用了NFS文件系统,那么在Windows下也有这种文件系统那就是CIFS,但是这种服务仅可以让Windows之间来进行共享,不可以错系统的进行数据共享,这就是一个问题。
1991 年一个名叫安德鲁的大学生就有这样的困扰,他手上有三部机器,分别是跑DOS个人计算机、DEC公司的 Digital Unix 系统以及Sun的 Unix 系统。在当时,DEC 公司有发展出一套称为 PATHWORKS 的软件,这套软件可以用来分享 DEC 的Unix 与个人计算机的DOS这两个操作系统的档案数据,可惜让他觉得较困扰的是,Sun的 Unix 无法藉由这个软件来达到数据分享的目的。这个时候哥们就想说既然这两部系统可以相互沟通,没道理Sun 就必需这么苦命吧?可不可以将这两部系统的运作原理找出来,然后让 Sun这部机器也能够分享档案数据呢?,为了解决这样的的问题,这老兄就自行写了个程序去侦测当 DOS 与 DEC 的 Unix 系统在进行数据分享传送时所使用到的通讯协议信息,然后将这些重要的信息撷取下来,并且基于上述所找到的通讯协议而开发出ServerMessage Block (SMB) 这个档案系统,而就是这套SMB软件能够让Unix与DOS互相的分享数据!
因此哥们就去申请了SMBServer ( Server Message Block 的简写 )这个名字来做为他撰写的这个软件的商标,可惜的是,因为SMB 是没有意义的文字,因此没有办法达成注册。既然如此的话,那么能不能在字典里面找到相关的字词可以做为商标来注册呢?翻了老半天,呵呵!这个SAMBA刚好含有 SMB ,又是热情有劲的拉丁舞蹈的名称。
Samba有两个守护进程:smb和nmb(139、445端口)

三、实现Linux与Windows之间共享

[root@localhost ~]# yum -y install samba //安装服务
[root@localhost ~]# vi /etc/samba/smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run ‘testparm’ to verify the config is correct after
# you modified it.

[global]
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run ‘testparm’ to verify the config is correct after
# you modified it.

[global]
workgroup = SAMBA
security = user

passdb backend = tdbsam

printing = cups
printcap name = /dev/null
printcap name = lpstat
load printers = no
cups options = raw
disable spoolss = yes
[share]
path = /opt/share
browseable = yes
public = yes
writable = yes

参数详解:
[global] samba服务器的全局设置,对整个服务器有效
load printers = no //是否启用打印机。
cups options = raw //打印系统,建立文件时所给的权限
printcap name = /dev/null //设置获取打印机描述信息的文件位置
printcap name = lpstat
printing = bsd
//定义打印机的系统类型,可选项有:bsd、sysv、plp、lprng、aix、hpux、qnx、cups
disable spoolss = yes //新增,禁用打印机共享

[root@localhost ~]# mkdir /opt/share //创建共享目录
[root@localhost ~]# chmod 777 /opt/share 赋与 共享目录所有权限
[root@localhost ~]# systemctl start smb
[root@localhost ~]# systemctl start nmb //启动samba守护进程
[root@localhost ~]# netstat -ntpl //查找139、445端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:445 0.0.0.0: LISTEN 2362/smbd
tcp 0 0 0.0.0.0:139 0.0.0.0:
LISTEN 2362/smbd
tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN 917/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:
LISTEN 1119/master
tcp6 0 0 :::445 ::: LISTEN 2362/smbd
tcp6 0 0 :::139 :::
LISTEN 2362/smbd
tcp6 0 0 :::22 ::: LISTEN 917/sshd
tcp6 0 0 ::1:25 :::
LISTEN 1119/master
[root@localhost ~]# smbapasswd -a root //创建samba用户密码

完成之后Windows下访问验证

四、实现Linux之间共享

[root@localhost ~]# yum install samba-client cifs-utils -y //客户端安装
[root@localhost ~]# smbclient -L 192.168.200.12 -U root
Enter SAMBA\root’s password:

Sharename Type Comment
————- —— ———-
print$ Disk Printer Drivers
share Disk
IPC$ IPC IPC Service (Samba 4.7.1)
root Disk Home Directories
Reconnecting with SMB1 for workgroup listing.

Server Comment
————- ———-

Workgroup Master
————- ———-
SAMBA LOCALHOST
[root@localhost ~]# mount -t cifs //192.168.200.12/share /mnt/
Password for root@//192.168.200.12/share: **
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 150G 1.1G 149G 1% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 142M 873M 14% /boot
tmpfs 378M 0 378M 0% /run/user/0
//192.168.200.12/share 150G 1.1G 149G 1% /mnt

GPMALL商城系统应用构建

一、项目介绍

本实验是利用Zookeeper分布式协调应用程序、Kafka分布式日志文件系统、Nginx服务器以及后端jar包部署商城应用服务。

二、组件介绍

Kafka
Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
消息系统
一个消息系统负责将数据从一个应用传递到另外一个应用,应用只需关注于数据,无需关注数据在两个或多个应用间是如何传递的。分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。有两种主要的消息传递模式:点对点传递模式、发布-订阅模式。大部分的消息系统选用发布-订阅模式。Kafka就是一种发布-订阅模式。
点对点消息传播
在点对点消息系统中,消息持久化到一个队列中。此时,将有一个或多个消费者消费队列中的数据。但是一条消息只能被消费一次。当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除。该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序。

与发布-订阅消息传递模式
在发布-订阅消息系统中,消息被持久化到一个topic中。与点对点消息系统不同的是,消费者可以订阅一个或多个topic,消费者可以消费该topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除。在发布-订阅消息系统中,消息的生产者称为发布者,消费者称为订阅者。

Zookeeper介绍
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。ZooKeeper包含一个简单的原语集,提供Java和C的接口。
ZooKeeper的基本运转流程:
1、选举Leader。
2、同步数据。
3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。
4、Leader要具有最高的执行ID,类似root权限
5、集群中大多数的机器得到响应并接受选出的Leader。
Redis服务介绍
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Elasticsearch介绍
Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

三、案例部署

1、修改主机名
[root@xnode1 ~]# hostnamectl set-hostname mall //修改主机名,修改完成使用ctrl+d退出登录

2、添加主机名映射文件

[root@mall ~]# vi /etc/hosts //编辑主机名映射文件
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.11 mall
192.168.200.11 redis.mall
192.168.200.11 kafka.mall
192.168.200.11 zookeeper.mall
192.168.200.11 mysql.mall

3、配置Yum源

[root@mall ~]# vi /etc/yum.repos.d/local.repo //编辑yum源文件
[centos] //源ID
name=centos //源名称
baseurl=file:///opt/centos //源路径
gpgcheck=0 //校验为0
enabled=1 //自启
[mall]
name=mall
baseurl=file:///root/gpmall-repo
gpgcheck=0
enabled=1

4、安装服务

[root@mall ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel redis nginx mariadb mariadb-server //安装jdk、数据库、缓存、nginx服务

5、关闭防火墙以及selinux

[root@mall ~]# systemctl stop firewalld && systemctl disable firewalld //关闭防火墙并设置开机不自启
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

[root@mall ~]# setenforce 0 //临时关闭selinux

6、查看jdk版本

[root@mall ~]# java -version //查看jdk版本号
openjdk version “1.8.0_222”
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

7、配置zookeeper服务

[root@mall ~]# tar -zxvf zookeeper-3.4.14.tar.gz //解压zookeeper压缩包

[root@mall ~]# cd zookeeper-3.4.14/conf/ //进入zookeeper/conf目录下

[root@mall conf]# mv zoo_sample.cfg zoo.cfg //给zoo_sample文件改名

[root@mall conf]# cd ../bin/ //进入到zookeeper/bin目录下

[root@mall bin]# ./zkServer.sh start //启动zookeeper服务
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper … STARTED

[root@mall bin]# ./zkServer.sh status //查看zookeeper服务状态
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: standalone

8、配置kafka

root@mall bin]# cd //进入root目录

[root@mall ~]# tar -zxvf kafka_2.11-1.1.1.tgz //解压kafka压缩包

[root@mall ~]# cd kafka_2.11-1.1.1/bin/ //进入bin目录

[root@mall bin]# ./kafka-server-start.sh -daemon ../config/server.properties //启动kafka服务

[root@mall bin]# cd //进入root目录

[root@mall ~]# jps //使用命令查看进程,有kafka服务证明启动无误
3456 QuorumPeerMain
3771 Kafka
3836 Jps

[root@mall ~]# yum -y install net-tools //安装net-tools(此工具用来查看端口号)

[root@mall ~]# netstat -ntpl //查询到端口9092,对应的服务为kafka
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN 1467/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:
LISTEN 1970/master
tcp6 0 0 :::36141 ::: LISTEN 3456/java
tcp6 0 0 :::22 :::
LISTEN 1467/sshd
tcp6 0 0 ::1:25 ::: LISTEN 1970/master
tcp6 0 0 :::47043 :::
LISTEN 3771/java
tcp6 0 0 :::9092 ::: LISTEN 3771/java
tcp6 0 0 :::2181 :::
LISTEN 3456/java

9、配置数据库

[root@mall ~]# vi /etc/my.cnf //编辑数据库配置文件
#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]


# include all files from the config directory
#
!includedir /etc/my.cnf.d
[mysqld] //从此行开始插入

init_connect=’SET collation_connection = utf8_unicode_ci’
init_connect=’SET NAMES utf8’
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

[root@mall ~]# systemctl restart mariadb //重启数据库服务

[root@mall ~]# systemctl enable mariadb //设置数据库开机自启

[root@mall ~]# mysql_secure_installation //初始化数据库服务,使用此命令必须保证数据库已经启动否则无效

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we’ll need the current
password for the root user. If you’ve just installed MariaDB, and
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on…

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password: //设置密码为123456,必须设置为123456,否则后面对接jar包不成功,造成商城页面不可弹出
Re-enter new password: //再输入一遍
Password updated successfully!
Reloading privilege tables..
… Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y //询问是否移除匿名用户—y
… Success!

Normally, root should only be allowed to connect from ‘localhost’. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n //询问是否禁止远程登陆—n
… skipping.

By default, MariaDB comes with a database named ‘test’ that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y //询问是否移除匿名用户—y
- Dropping test database…
… Success!
- Removing privileges on test database…
… Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y //询问是否刷新权限—y
… Success!

Cleaning up…

All done! If you’ve completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

[root@mall ~]# mysql -uroot -p123456 //登录数据库,用户为root,密码为123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 15
Server version: 10.3.18-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]> grant all privileges on . to root@localhost identified by ‘123456’ with grant option; //授权所有用户拥有本地数据库的所有权限
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> grant all privileges on . to root@”%” identified by ‘123456’ with grant option; //赋予任何远程主机用root用户连接到mysql 所有库的权限,密码为123456
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> create database gpmall; //创建数据库,名为gpmall

Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> use gpmall; //进入数据库
Database changed

MariaDB [gpmall]> source /root/gpmall-single/gpmall.sql //将本地数据导入到数据库中

10、配置redis服务

[root@mall ~]# vi /etc/redis.conf //编辑redis配置文件
进入文件后,不要做任何操作,直接输入:set nu显示行号,然后将文本改为插入模式,将第61行前加#进行注释,再将第80行中的yes改为no,最后保存退出

[root@mall ~]# systemctl restart redis //更改文件后,重启redis服务

[root@mall ~]# systemctl enable redis //设置redis服务开机自启

[root@mall ~]# netstat -ntpl //查看端口号,找到6379端口,对应的服务为redis

11、配置nginx服务

[root@mall ~]# rm -rf /usr/share/nginx/html/* //删除Nginx服务站点目录下所有内容

[root@mall ~]# cp -rvf gpmall-single/dist/* /usr/share/nginx/html/ //将本地web包拷贝到站点目录下

[root@mall ~]# vi /etc/nginx/conf.d/default.conf //编辑nginx的配置文件
进入配置文件后找到第一个location,将下面内容添加进去
location /user {
proxy_pass http://127.0.0.1:8082;
}

location /shopping {
proxy_pass http://127.0.0.1:8081;
}

location /cashier {
proxy_pass http://127.0.0.1:8083;
}

[root@mall ~]# systemctl restart nginx //添加完成后重启nginx服务,如果遇到服务报错,则检查Nginx配置文件是否正确

[root@mall ~]# netstat -ntpl //查看端口号,有无80端口暴露,对应服务为nginx

12、部署后端jar包

[root@mall ~]# cd gpmall-single/ //进入存放后端jar包文件目录

[root@mall ~]# gpmall-single]# nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar & //分别在后台,启动下面四个jar包

[root@mall ~]# gpmall-single]# nohup java -jar user-provider-0.0.1-SNAPSHOT.jar &

[root@mall ~]# gpmall-single]# nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar &

[root@mall ~]# gpmall-single]# nohup java -jar gpmall-user-0.0.1-SNAPSHOT.jar &

[root@mall gpmall-single]# jobs
[1] Running nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar &
[2] Running nohup java -jar user-provider-0.0.1-SNAPSHOT.jar &
[3]- Running nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar &
[4]+ Running nohup java -jar gpmall-user-0.0.1-SNAPSHOT.jar &

注意:如果在命令启动过程中遇到EXIT字样,则为jar包出现闪退,检查前面所部署的服务是否运行正常,以及主机名映射文件是否书写正确

13、浏览器登录验证

如果前面每个服务都运行正常,且jar包没有出现闪退,那么使用浏览器输入192.168.200.11进行验证,如果发现有图片并且有文字出现,则gpmall商城部署正常。

14、将gpmall前端页面使用命令获取

[root@mall ~]# curl http://192.168.200.11/#/home

<!DOCTYPE html>