Linux运维-陈雷雷


阿里云服务器搭建项目

admin 2019-10-08 188浏览 0条评论
首页/正文
分享到: / / / /

[TOC]

阿里云全服务器搭建项目

搭建web集群,并做到全网服务器配置与web文件备份,校验,发送通知邮件.

涉及服务器:

服务器名 服务器IP 备注
mm01 192.168.0.158 出口网关 管理控制台 yum仓库
web01 192.168.0.163 配置nginx 配置备份同步,
web02 192.168.0.160 配置nginx 配置备份同步
web03 192.168.0.161 配置nginx 配置备份同步
NFS 192.168.0.155 配置nginx web站点文件统一挂载,数据同步到rsync
rsync 192.168.0.164 配置数据检查,验证数据完整性邮件推送
lb负载均衡 购买阿里云 配置阿里云负载均衡高可用

涉及服务配置:

  • nginx配置
    • wordpress安装
    • 伪静态配置
  • 邮件发送配置
    • 邮箱发信配置
  • 备份脚本编写
    • 脚本功能实现
    • 测试脚本
  • nfs配置
    • 服务端安装
    • 客户端测试
    • 多端同步
  • 负载均衡配置
    • 权重配置
    • 健康检查
  • 高可用配置
  • 数据唯一性验证配置
    • 一致性hash验证
  • mysql配置
    • mysql安装
    • 数据库创建
    • 数据库授权
  • php配置
    • 安装
    • 配置
  • Open VPN配置
    • 搭建vpn
    • 配置用户
    • 配置虚拟网络
  • ssh免密配置
    • 实现多服务器免密交互
  • 内网私有仓库配置
  • rsync配置
  • inotify配置
  • sersync配置

实现目标:

实现服务器高可用

实现多站点,多实例集群

实现自主健康监控检查

实现数据备份与通知

web数据按日期进行打包,保留30天前数据作为备份.

1. 全网备份项目拓扑图 10 台

本次搭建架构共计10台服务器,请购买阿里云按量付费服务器与弹性IP

2. 购买云主机_网络配置

2.1 阿里云交换机网络配置

配置好网络,然后在网络所属区域

2.2 网段配置:

2.3 创建专有网络

在创建了私有网络的 华北3区 选购主机 以便于使用刚才创建的私有网络

3. 购买云主机_选购主机配置

选择私有网络 huabei3 的 先买10台玩玩

选便宜的下一步就好

3.1 购买云主机_网络和安全组

注意 这里公网IP 先不买

3.2 购买云主机_系统配置

配置自定义密码: 其他方式可以视情况而定

配置预览

3.3 设置自动释放时间

避免忘记释放不断收费

3.4 创建成功

创建完成后可以在实例列表中查看已购买的服务器

4.内网私有仓库搭建和使用

4.1 搭建yum仓库 [mm01 192.168.0.158 搭建仓库提供给内网服务器使用]

用于在内网无法联网的情况下,内部服务器无法通过yum安装软件,此时我们需要自己搭建一个而本地的yum仓库来提供服务.

1. 安装
yum install createrepo yum-utils -y

2. 创建和设置仓库目录
mkdir  /servertools/yum -p

3. 下载安装包
cd /servertools/yum 
yumdownloader  nginx-*

4. 重建软件索引 
createrepo -pdo  /servertools/yum  /servertools/yum

5. 更新软件索引 
createrepo --update /servertools/yum

6. 提供web服务
cd /servertools/yum
python -m SimpleHTTPServer 80 1>/dev/null 2>&1 &

注意: 为了让下次启动,yum仓库生效,可以将语句放入 /etc/rc.local 文件中.
vim /etc/rc.local 末尾添加以下两行:

python -m SimpleHTTPServer 80 1>/dev/null 2>&1 &
createrepo -pdo  /servertools/yum  /servertools/yum


注意:
每次通过  yumdownloader 下载了软件 都需要重新建立索引.
可以在每次下载软件 都要进入 /servertools/yum 目录进行下载,然后重建索引 提供web服务

可选:
将阿里云yum源包同步到当前服务器:
rsync -av rsync://mirrors.ustc.edu.cn/centos/7/os ./
createrepo --update /servertools/yum

检查web是否正常服务:

4.2 客户端使用yum仓库

1. 创建yum源
cd /etc/yum.repos.d
vim Centos-mirrors.repo
[mirrors]
name=mirrors
baseurl=http://192.168.0.158/mirrors
enable=1  #1表示启用,没有此参数也表示启用
gpgcheck=0

2. #重建缓存
yum clean all

3. 安装软件测试
yum install openssl-*

4. 测试无误,将Centos-mirrors.repo 源在其他服务配置上

5. NFS 存储服务 [192.168.0.155]

5.1 什么是NFS

网络文件系统,英文Network File System(NFS)。是由SUN公司研制的UNIX表示层协议(pressentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。

5.2 NFS的特性

提供透明文件访问以及文件传输; 容易扩充新的资源或软件,不需要改变现有的工作环境; 高性能,可灵活配置。 节省服务器硬盘资源 保证数据的统一一致

5.3 NFS应用场景

NFS网络文件系统,一般被用来存储视频,图片,附件等静态资源文件.网站上传的文件一般都会在NFS中保存 NFS是互联网系统架构中最常用的存储服务,在中小型公司用的极为广泛,大型公司会用到fastDFS.

5.4 NFS工作原理

NFS通过远程调用RPC协议来发布自己的存储角色,在用户通过RPC协议发起存储请求,服务器会检查该客户端 的合法性,检验通过会将其注册到服务中,NFS服务必须依赖于RPC服务来发布管理nfs

1)服务器端启动NFS服务,RPC服务会启动并开启111监听端口
2)随后服务器并向RPC注册端口信息,发布NFS可用信息
3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

原理图:

5.5 NFS服务端搭建

5.5.1 NFS安装

# 正常直接这样安装就好,但因为目前我是内网环境,没有这些安装包,只能在yum服务器上下载这些包然后更新后在可以继续做这个步骤
[root@nfs ~]# rpm -qa nfs-utils rpcbind  


## yum服务器下载安装包提供给内网服务器使用:
cd /servertools/yum
#下载nfs软件
yumdownloader nfs-utils rpcbind

#更新软件仓库
createrepo --update /servertools/yum 


NFS安装: 
yum clean all      #这是因为内网yum源刚更新,需要清一下缓存,重新读取yum源,这样才可以安装nfs服务
yum install -y nfs-utils rpcbind  

## 安装结果:    成功!
Installed:
  nfs-utils.x86_64 1:1.3.0-0.65.el7                                        rpcbind.x86_64 0:0.2.0-48.el7                               

Dependency Installed:
  gssproxy.x86_64 0:0.7.0-26.el7               keyutils.x86_64 0:1.5.8-3.el7                   libbasicobjects.x86_64 0:0.1.1-32.el7   
  libcollection.x86_64 0:0.7.0-32.el7          libevent.x86_64 0:2.0.21-4.el7                  libini_config.x86_64 0:1.3.1-32.el7     
  libnfsidmap.x86_64 0:0.25-19.el7             libpath_utils.x86_64 0:0.2.1-32.el7             libref_array.x86_64 0:0.1.5-32.el7      
  libtirpc.x86_64 0:0.2.4-0.16.el7             libverto-libevent.x86_64 0:0.2.5-4.el7          quota.x86_64 1:4.01-19.el7              
  quota-nls.noarch 1:4.01-19.el7               tcp_wrappers.x86_64 0:7.6-77.el7               

Complete!


#配置rpcbind开机自动启动
systemctl enable rpcbind.service

#配置nfs开机自动启动
systemctl enable nfs-server.service

5.5.2 NFS配置文件

/usr/sbin/showmount    -----查看挂载


启动rpcbind 
systemctl daemon-reload
systemctl start rpcbind.service

#注意: 先启动rpcbind服务,然后启动nfs,因为rpcbind服务首先需要发布共享目录,nfs才能读取
#先启动nfs会导致错误,无法读取到nfs

启动nfs:
systemctl start nfs.service


配置文件:
/etc/exports     #nfs的默认配置文件,用于发布共享目录的配置文件

用法: 
/共享目录/ 允许的IP段(权限信息)

5.5.3 NFS配置实例

配置nfs 允许让nginx服务使用存储服务,需要指定nginx的用户id

#创建用户指定 uid gid的用户 www
useradd www

#修改gid uid  这个gid和uid 会和nginx用户一样,所以在安装nginx的时候需要加指定用户 nginx
usermod www  -u 1888
groupmod www  -g 1888
 
#检查当前 www 用户 id 是否为指定的 1888
[root@web01 ~]# id www
uid=1888(www) gid=1888(www) groups=1888(www)


#配置挂载目录
1.  新建目录 www 授权目录
mkdir -p /www
chown -R www.www /www

2. 配置/etc/exports 文件
[root@nfs ~]# cat /etc/exports
/www 192.168.0.0/24(rw,sync,all_squash,anonuid=1888,anongid=1888)

解释:
(rw,sync,all_squash,anonuid=1888,anongid=1888): 可读可写,同步,映射,映射组id1888,映射用户id1888

3. 重启服务
systemctl daemon-reload
systemctl restart nfs.service
systemctl restart rpcbind.service

4. 检查nfs发布的挂载情况:
[root@nfs ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/www 192.168.0.0/24

解释:
/www              # 是挂载目录
192.168.0.0/24    # 允许的网段


提示:
如果需要修改配置文件,请使用命令让其发布的共享目录重新生效

[root@nfs www]#  exportfs -rv
exporting 192.168.0.0/24:/www

5. web客户端挂载:
mount -t nfs 192.168.0.155:/www /application/nginx/html

注意: 挂载用户必须指定uid是1888,否则无法挂载

6. rsync 备份服务 [192.168.0.164]

6.1 配置rsync server端守护进程模式

6.1.1 安装rsync

关于rsync相关知识,可参考:

https://chenleilei.net/article/69.html

#检查是否安装: 
[root@rsync ~]# rpm -qa rsync
rsync-3.1.2-6.el7_6.1.x86_64

#安装rsync server端
yum install rsync -y

6.1.2 rsync 服务端配置文件配置

创建备份目录

mkdir -p /backup
chown -R rsync.rsync /backup

配置rsync配置

vim /etc/rsyncd.conf

解释:
/# ---------------------------------#
uid = rsync                         #  rsync用户
gid = rsync                         #  rsync组
use chroot = no                     #  安全配置
max connections = 200               #  最大连接数
timeout = 300                       #  连接超时时间 (单位: s)
pid file = /var/run/rsyncd.pid      #  pid文件
lock file = /var/run/rsync.lock     #  锁文件
log file = /var/log/rsyncd.log      #  日志文件
#hosts deny = 0.0.0.0/32            #  拒绝的IP段
auth users = chenleilei             #  允许连接rsync服务的账号(非系统账号)
secrets file = /etc/rsync.password  #  密码验证文件
                                    #
[backup]                            #  模块名 可以随意修改
comment = "backup dir by oldboy"    #  连接的 欢迎语 没什么用
path = /backup                      #  备份的目录
ignore errors                       #  忽略个别传输失败的文件,不影响传输任务
hosts allow = 192.168.0.0/24        #  允许的IP段
list = false                        #  true:禁止写入 flase=允许写入
read only = false                   #  true:禁止写入 flase=允许写入
fake super = yes                    #  !!!重要!!! 在cento7 中需要加上此行,centos6可以忽略
/# ---------------------------------#


配置:
uid = rsync
gid = rsync
use chroot = no
max connections = 200 
timeout = 300 
pid file = /var/run/rsyncd.pid 
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
#hosts deny = 0.0.0.0/32
auth users = chenleilei
secrets file = /etc/rsync.password

[backup]
comment = "backup dir by chenleilei.net"
path = /backup
ignore errors
hosts allow = 192.168.0.0/24
list = false
read only = false
fake super = yes

6.1.3 客户端 测试rsync配置是否有效

nfs服务器[192.168.0.155] 推送一个文件给rsync 服务器[192.168.0.164]

nfs服务器添加验证密钥和权限测试推送

1. 添加密钥
echo "123" >>/etc/rsync.pass

2. 设置权限
chmod 600  /etc/rsync.pass

3. 推送测试[推送并创建党前IP的文件夹]
[root@iZ8vb2567465ubejdyjpbtZ ~]# rsync -avz /etc/hosts chenleilei@192.168.0.164::backup/$(hostname -i)/ --password-file=/etc/rsync.pass
sending incremental file list
created directory 192.168.0.155    ##提示没有这个文件夹,自动创建了192.168.0.155 文件夹
hosts

sent 181 bytes  received 43 bytes  448.00 bytes/sec
total size is 212  speedup is 0.95   
推送成功

4. 去rsync服务器检查文件推送是否成功
[root@rsync backup]# ll
total 12
drwxr-xr-x 2 rsync rsync 4096 Oct  4 14:37 192.168.0.155    ## 文件夹被推送过来了,成功!

至此,rsync服务器配置完毕.其他服务器可按照此办法进行配置,将多个重要文件备份到rsync服务器中

如: 服务配置文件,host文件,crontab计划任务文件.

7. inotify+rsync 或sersync+rsync实现文件实时同步

NFS实时同步到rsync服务器:

web上的重要文件在NFS中,因为web服务的文件都是挂载NFS服务器的文件 此时的NFS服务器显得非常重要,一旦他挂了,所有依赖于nfs的web都会无法访问.数据也会丢失 所以我们需要将nfs数据都备份一份到rsync服务器中. 这里我们需要监控到每一个变化的文件 并将其推送给rsync服务器,到这里我们就引出了 inotify+rsync 或 sersync+rsync inotify 与sersync 都是用于监控文件变化的软件

inotify优点: 监控文件系统事件变化,可以监控文件系统中 增删改移动等事件

iontify缺点: 并发如果+ 大于200个文件(10-100K),同步会有延迟 监控到事件后,调用rsync同步是单线程的(加&并发),sersync多进程同步

sersync优点: 支持配置文件管理 真正的守护进程socket 可以对失败文件定时重传(定时任务功能) 默认多线程rsync同步

rsync特点: 可以实现同步备份普通文件和特殊文件(设备文件或者链接文件) 可以实现数据增量备份 可以实现无差异数据同步 可以实现目录的排除功能 可以实现数据加密传输,利用ssh rsh隧道协议进行加密 可以实现守护进程(服务端和客户端)方式传输和接收数据

7.1 实时同步方法1: inotify + rsync 配置

7.1.1 inotify 安装和使用

重要事件监控汇总表:

#因为内网无法安装,所以需要在yum服务器中下载好安装包然后更新后,内网才可以用,或者直接下载安装包传上去

[root@mm01 yum]# cd /servertools/yum
[root@mm01 yum]# yumdownloader inotify-tools*
[root@mm01 yum]# createrepo --update /servertools/yum

## 安装inotify
第一步:
[root@nfs ~]# yum clean all      # 服务器中下载好了inotify-tools安装包,客户端需要清理一下yum缓存
Loaded plugins: fastestmirror
Cleaning repos: mirrors
Cleaning up list of fastest mirrors

第二步:
[root@nfs ~]# yum install inotify-tools -y  # 清理缓存后,重新安装这样就可以安装了,这个包需要epel源

安装完成后有两个可用命令:
inotifywait     # 监控数据变化统计
inotifywatch    # 监控数量变化统计


第三步: 部署rsync守护进程服务 (这个之前已经完成.)


==========================
inotify参数:
-m         #保持监控状态
-r         #递归监控(多级目录监控)
-q         #屏蔽无用信息

--timefmt    #显示时间格式
--format     #输出内容的格式信息
-e           #指定监控的事件信息 不指定表示监控所有事件

inotify事件:
close
	close_write 
	close_nowrite   这两个事件是 文件或目录关闭,无论读写模式下出现的

close_write
	create	 包含文件创建事件,不包含目录创建事件
	
move
	moved_to
	moved_from   文件或目录 不管移动到或是移出监控目录,都会触发事件.
==========================

第四步:   ↓↓↓↓

↓↓↓↓↓

7.1.2 inotify 监控脚本编写实现实时同步

第四步 监控脚本编写

vim inotify.sh:

web目录: /www rsync用户: chenleilei 密码: /etc/rsync.pass

cat inotify.sh:

#!/bin/bash
dir=/www
user=chenleilei
server=192.168.0.164

/usr/bin/inotifywait -mrq  --format '%w%f' -e create,delete,close_write,moved_to $dir | while read line
do
if [ -f $line ];then
   rsync -az  --delete /www/ $user@$server::backup/$(hostname -i)/ --password-file=/etc/rsync.pass
else
cd $dir &&\
rsync -az ./ --delete $user@$server::backup/$(hostname -i)/ --password-file=/etc/rsync.pass
fi
done

7.1.3 inotify内核优化

[root@nfs ~]# ls -l  /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Oct  4 20:08 max_queued_events  #每个inotify实例列队可容纳的实例事件数
-rw-r--r-- 1 root root 0 Oct  4 20:08 max_user_instances #每个用户可运行的inotifywait进程数,默认128
-rw-r--r-- 1 root root 0 Oct  4 20:08 max_user_watches  #单进程监控文件数量 默认256

修改方式:
echo "8192" >/proc/sys/fs/inotify/max_user_watches    文件数
echo "256" >/proc/sys/fs/inotify/max_user_instances    进程数
echo "16384" >/proc/sys/fs/inotify/max_queued_events   列队事件数

注意,以上优化配置重启后会失效,可以写入到 /etc/rc.local 文件中,让其开机设置
echo "echo "8192" >/proc/sys/fs/inotify/max_user_watches" >>/etc/rc.local
echo "echo "256" >/proc/sys/fs/inotify/max_user_instances " >>/etc/rc.local
echo "echo "16384" >/proc/sys/fs/inotify/max_queued_events " >>/etc/rc.local

7.2 实时同步方法2: sersync + rsync 配置

7.2.1 sersync介绍

sersync主要用于服务器同步,web镜像等功能。基于boost1.43.0,inotify api,rsync command.开发。 优点: sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤在结合rsync 同步的时候,节省了运行时耗和网络资源。因此更快。

7.2.2 sersync安装配置

下载sersync:

wget https://www.chenleilei/soft/sersync.tar.gz

配置sersync

cd /server/tools/
rz   sersync.tar.gz    #上传安装包
mkdir  /usr/local/sersync -p
tar xf  /server/tools/sersync.tar.gz -C  /usr/local/sersync    # 解压到目录
cp -a /server/tools/sersync/conf/confxml.xml{,.bak}  #备份初始配置文件.

配置:
vim /server/tools/sersync/conf/confxml.xml   #配置sersync
需要修改的地方:
--------------------------------------------------------------------
找到:
 23	    <sersync>
 24		<localpath watch="/opt/tongbu">     ## 需要实时同步的目录
 25		    <remote ip="127.0.0.1" name="tongbu1"/>  ## IP地址
 26		    <!--<remote ip="192.168.8.39" name="tongbu"/>-->   
 27		    <!--<remote ip="192.168.8.40" name="tongbu"/>-->
 28		</localpath>
 29		<rsync>

修改为:
 23	    <sersync>
 24		<localpath watch="/www">        ##主目录
 25		    <remote ip="192.168.0.164" name="backup"/>  ##这是nfs到rsync服务器的ip和模块名
 26		    <!--<remote ip="192.168.8.39" name="tongbu"/>-->  ## 注释
 27		    <!--<remote ip="192.168.8.40" name="tongbu"/>-->  ## 注释
 28		</localpath>
 29		<rsync>
---------------------------------------------------------------------

---------------------------------------------------------------------
找到:
 <rsync>
     <commonParams params="-artuz"/>    ## 同步参数
     <auth start="true" users="rsync" passwordfile="/etc/rsync.password"/> #用户与密钥
     <userDefinedPort start="false" port="874"/><!-- port=874 -->   #端口
     <timeout start="false" time="100"/><!-- timeout=100 -->        #是否超时
     <ssh start="false"/>
 </rsync>

修改为:

<rsync>
    <commonParams params="-artuz"/>
    <auth start="true" users="chenleilei" passwordfile="/etc/rsync.pass"/>
    <userDefinedPort start="false" port="874"/><!-- port=874 -->
    <timeout start="false" time="100"/><!-- timeout=100 -->
    <ssh start="false"/>
</rsync>

--------------------------------------------------------------------
chmod +x /usr/local/sersync/bin/sersync
/usr/local/sersync/bin/sersync -h  [帮助]
./bin/sersync -dro /usr/local/sersync/conf/confxml.xml
/server/tools/sersync/bin/sersync -dro /server/tools/sersync/conf/confxml.xml  启动sersync

ps aux | grep sersync  ###检查进程是否启动

上图的意思就是 在/data中的文件都会被传送到远端 172.16.1.41服务器中 模块名是backup的目录中。
下面还有定义 传输使用的账号是 rsync_backup  密码文件 /etc/rsync.password  这些文件都需要在服务器中真实存在,否则传输不会生效。

启动命令:
/usr/local/sersync/bin/sersync -dro /usr/local/sersync/conf/confxml.xml


启动信息:
[root@nfs sersync]# /usr/local/sersync/bin/sersync -dro /usr/local/sersync/conf/confxml.xml
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d 	run as a daemon
option: -r 	rsync all the local files to the remote servers before the sersync work
option: -o 	config xml name:  /usr/local/sersync/conf/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost	host port: 8008
daemon start,sersync run behind the console 
use rsync password-file :
user is	chenleilei
passwordfile is 	/etc/rsync.password
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads) 
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /www && rsync -artuz -R --delete ./ chenleilei@192.168.0.158::backup --password-file=/etc/rsync.password >/dev/null 2>&1 
run the sersync: 
watch path is: /www     ##备份目录 www

7.2.3 sersync实现实时同步

NFS服务器配置完成seync后测试是否能够传送到 rsync这台备份服务器上 :

配置完成后 启动:
/usr/local/sersync/bin/sersync -dro /usr/local/sersync/conf/confxml.xml

NFS服务器查看/www 的目录文件内容:
[root@nfs www]# ll
total 0
-rw-r--r-- 1 root root 0 Oct  7 02:09 110
-rw-r--r-- 1 root root 0 Oct  7 00:25 32.txt
-rw-r--r-- 1 root root 0 Oct  7 01:53 leilei.net


rsync备份服务器查看文件和目录信息:
[root@rsync backup]# ll
total 0
-rw-r--r-- 1 rsync rsync 0 Oct  7 02:09 110
-rw-r--r-- 1 rsync rsync 0 Oct  7 00:25 32.txt
-rw-r--r-- 1 rsync rsync 0 Oct  7 01:53 leilei.net

============================================================
在配置了sersync服务的 NFS 服务器中创建测试文件,检查是否同步到 rsync服务器

至此,通过sersync的方式同步已经完成. 使用sersync服务的优点是,它可以作为守护进程模式运行在后台 传送文件效率更高更快,并发量极高.

8. 前端nginx服务配置 web01/web02/web03

nginx 3台作为集群服务,用户访问我们的web服务 负载均衡优选3台服务器任意一台调取资源返回给用户

配置须知:

我们已经配置完成了后端服务器,现在需要搭建discuz,或者 wordpress,完成最终搭建操作.

8.1 nginx配置 [web01 192.168.0.163 ]

注意: 上面NFS中配置的www用户会作为我们当前nginx的启动用户,所以在这里我们创建用户的时候需要 与nfs服务器配置的相同用户ID 1888,如果id错误,nfs将无法为nginx提供服务

8.1.1 nginx 编译安装

#更新yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo

============内网yum源需要自己修改==============
yum源服务器下载nginx包:
cd /servertools/yum/
yumdownloader  pcre pcre-devel openssl openssl-devel gd-devel  zlib-devel gcc
createrepo --update /servertools/yum
pkill  python
python -m SimpleHTTPServer 80 1>/dev/null 2>&1 &
netstat -lntup 检查服务是否起来了
=======================================

==========客户端修改yum源=====================
vim leilei.repo
内容为:
[mirrors]
name=mirrors
baseurl=http://192.168.0.158
enable=1 
gpgcheck=0

保存后,更新源缓存
yum clean all
============内网yum源需要自己修改==============
到这里的步骤都是本地源为基础,非本地源 从下面开始继续看




============nginx安装======================

#将原有源移走,使用统一的nginx1.6
cd /etc/yum.repos.d/
mv * ~

#创建 nginx安装包存放路径
mkdir /server/tools

# 将nginx包上传到 /server/tools

#第一步: 下载nginx:
#http://nginx.org/en/download.html 

##注意 nginx版本最好选择 半年到一年之前的版本,不要选用最新版。
##我这里选择的稳定版 这里直接上传了包


#创建一个目录存放nginx安装包 
mkdir -p /server/tools


#安装包下载:
cd /server/tools
wget http://nginx.org/download/nginx-1.16.0.tar.gz
tar xf nginx-1.16.0.tar.gz
cd nginx-1.16.0

#第二步: 解决软件依赖关系
# openssl-devel -- SSL证书相关依赖包
# pcre-devel  -- 正则相关依赖包
# gd-devel  -- 图片处理相关依赖包

yum install -y pcre pcre-devel openssl openssl-devel gd-devel  zlib-devel gcc

#第三步: 创建nginx进程相关用户
useradd -s /sbin/nologin -M www -u 1888

#第四步:执行预编译
cd /server/tools/nginx-1.16.0/
./configure --prefix=/application/nginx-1.16.0 --user=www --group=www --with-http_image_filter_module  --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module  


# 第五步:make 编译
make 
echo $?        #这一步可做可不做,返回值为0代表正常 为其他数值为异常

#第六步: 编译安装
make install


#创建软连接,作用在升级新版本时只需要替换软连接,而不需要停止服务更换版本
ln -s /application/nginx-1.16.0 /application/nginx

#优化nginx启动命令
#添加环境变量:
export PATH="$PATH:/application/nginx/sbin"
echo "export PATH="$PATH:/application/nginx/sbin"">>/etc/profile
source /etc/profile
pkill nginx

# 关闭 与 启动
nginx -s stop
kill `cat /application/nginx-1.16/logs/nginx.pid`
nginx
pkill nginx

8.1.2 启动与关闭nginx

上面的环境变量添加完成后,可以直接命令行输入: nginx 启动nginx服务 nginx -s 发送信号 stop 停止 nginx -t 检查配置文件语法

8.1.3 挂载NFS磁盘到nginx

搭建好的nfs服务器地址为:  192.168.0.155

因此挂载命令为:
mount -t nfs 192.168.0.155:/www /application/nginx/html


配置开机自动挂载 
vim /etc/fstab

192.168.0.155:/www /application/nginx/html nfs defaults 0 0

重启后查看挂载情况(先启动NFS 不然无法挂载)

Last login: Mon Oct  7 06:06:05 2019 from 192.168.0.158

Welcome to Alibaba Cloud Elastic Compute Service !

[root@web01 ~]# df -h
Filesystem          Size  Used Avail Use% Mounted on
/dev/vda1            40G  1.8G   36G   5% /
devtmpfs            234M     0  234M   0% /dev
tmpfs               244M     0  244M   0% /dev/shm
tmpfs               244M  444K  244M   1% /run
tmpfs               244M     0  244M   0% /sys/fs/cgroup
192.168.0.155:/www   40G  1.7G   36G   5% /application/nginx-1.16/html     ---#挂载成功
tmpfs                49M     0   49M   0% /run/user/0

按照这样的配置将 web02 web03 都配置成功

8.2 nginx配置 [web02 192.168.0.160]

8.2.1 安装nginx

#更新yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo

============内网yum源需要自己修改==============
yum源服务器下载nginx包:
cd /servertools/yum/
yumdownloader  pcre pcre-devel openssl openssl-devel gd-devel  zlib-devel gcc
createrepo --update /servertools/yum
pkill  python
python -m SimpleHTTPServer 80 1>/dev/null 2>&1 &
netstat -lntup 检查服务是否起来了
=======================================

==========客户端修改yum源=====================
vim leilei.repo
内容为:
[mirrors]
name=mirrors
baseurl=http://192.168.0.158
enable=1 
gpgcheck=0

保存后,更新源缓存
yum clean all
============内网yum源需要自己修改==============
到这里的步骤都是本地源为基础,非本地源 从下面开始继续看




============nginx安装======================

#将原有源移走,使用统一的nginx1.6
cd /etc/yum.repos.d/
mv * ~

#创建 nginx安装包存放路径
mkdir /server/tools

# 将nginx包上传到 /server/tools

#第一步: 下载nginx:
#http://nginx.org/en/download.html 

##注意 nginx版本最好选择 半年到一年之前的版本,不要选用最新版。
##我这里选择的稳定版 这里直接上传了包


#创建一个目录存放nginx安装包 
mkdir -p /server/tools


#安装包下载:
cd /server/tools
wget http://nginx.org/download/nginx-1.16.0.tar.gz
tar xf nginx-1.16.0.tar.gz
cd nginx-1.16.0

#第二步: 解决软件依赖关系
# openssl-devel -- SSL证书相关依赖包
# pcre-devel  -- 正则相关依赖包
# gd-devel  -- 图片处理相关依赖包

yum install -y pcre pcre-devel openssl openssl-devel gd-devel  zlib-devel gcc

#第三步: 创建nginx进程相关用户
useradd -s /sbin/nologin -M www -u 1888

#第四步:执行预编译
cd /server/tools/nginx-1.16.0/
./configure --prefix=/application/nginx-1.16.0 --user=www --group=www --with-http_image_filter_module  --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module  


# 第五步:make 编译
make 
echo $?        #这一步可做可不做,返回值为0代表正常 为其他数值为异常

#第六步: 编译安装
make install


#创建软连接,作用在升级新版本时只需要替换软连接,而不需要停止服务更换版本
ln -s /application/nginx-1.16.0 /application/nginx

#优化nginx启动命令
#添加环境变量:
export PATH="$PATH:/application/nginx/sbin"
echo "export PATH="$PATH:/application/nginx/sbin"">>/etc/profile
source /etc/profile
pkill nginx

# 关闭 与 启动
nginx -s stop
kill `cat /application/nginx-1.16/logs/nginx.pid`
nginx
pkill nginx

8.2.1 配置NFS

配置开机自动挂载:

vim /etc/fstab
加入如下内容: 
192.168.0.155:/www /application/nginx/html nfs defaults 0 0

配置完成后下次启动会自动挂载
本次直接挂载可以用mount直接挂
直接挂载命令:  mount -t nfs 192.168.0.155:/www /application/nginx/html

检查:
[root@web02 html]# df -h
Filesystem          Size  Used Avail Use% Mounted on
/dev/vda1            40G  1.9G   36G   5% /
devtmpfs            234M     0  234M   0% /dev
tmpfs               244M     0  244M   0% /dev/shm
tmpfs               244M  440K  244M   1% /run
tmpfs               244M     0  244M   0% /sys/fs/cgroup
tmpfs                49M     0   49M   0% /run/user/0
192.168.0.155:/www   40G  1.7G   36G   5% /application/nginx-1.16/html   #---成功

8.3 nginx配置 [web03 192.168.0.161]

8.3.1 安装nginx

#更新yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo

============内网yum源需要自己修改==============
yum源服务器下载nginx包:
cd /servertools/yum/
yumdownloader  pcre pcre-devel openssl openssl-devel gd-devel  zlib-devel gcc
createrepo --update /servertools/yum
pkill  python
python -m SimpleHTTPServer 80 1>/dev/null 2>&1 &
netstat -lntup 检查服务是否起来了
=======================================

==========客户端修改yum源=====================
vim leilei.repo
内容为:
[mirrors]
name=mirrors
baseurl=http://192.168.0.158
enable=1 
gpgcheck=0

保存后,更新源缓存
yum clean all
============内网yum源需要自己修改==============
到这里的步骤都是本地源为基础,非本地源 从下面开始继续看




============nginx安装======================

#将原有源移走,使用统一的nginx1.6
cd /etc/yum.repos.d/
mv * ~

#创建 nginx安装包存放路径
mkdir /server/tools

# 将nginx包上传到 /server/tools

#第一步: 下载nginx:
#http://nginx.org/en/download.html 

##注意 nginx版本最好选择 半年到一年之前的版本,不要选用最新版。
##我这里选择的稳定版 这里直接上传了包


#创建一个目录存放nginx安装包 
mkdir -p /server/tools


#安装包下载:
cd /server/tools
wget http://nginx.org/download/nginx-1.16.0.tar.gz
tar xf nginx-1.16.0.tar.gz
cd nginx-1.16.0

#第二步: 解决软件依赖关系
# openssl-devel -- SSL证书相关依赖包
# pcre-devel  -- 正则相关依赖包
# gd-devel  -- 图片处理相关依赖包

yum install -y pcre pcre-devel openssl openssl-devel gd-devel  zlib-devel gcc

#第三步: 创建nginx进程相关用户
useradd -s /sbin/nologin -M www -u 1888

#第四步:执行预编译
cd /server/tools/nginx-1.16.0/
./configure --prefix=/application/nginx-1.16.0 --user=www --group=www --with-http_image_filter_module  --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module  


# 第五步:make 编译
make 
echo $?        #这一步可做可不做,返回值为0代表正常 为其他数值为异常

#第六步: 编译安装
make install


#创建软连接,作用在升级新版本时只需要替换软连接,而不需要停止服务更换版本
ln -s /application/nginx-1.16.0 /application/nginx

#优化nginx启动命令
#添加环境变量:
export PATH="$PATH:/application/nginx/sbin"
echo "export PATH="$PATH:/application/nginx/sbin"">>/etc/profile
source /etc/profile
pkill nginx

# 关闭 与 启动
nginx -s stop
kill `cat /application/nginx-1.16/logs/nginx.pid`
nginx
pkill nginx

8.3.2 配置NFS

配置开机自动挂载:

vim /etc/fstab
加入如下内容: 
192.168.0.155:/www /application/nginx/html nfs defaults 0 0

配置完成后下次启动会自动挂载
本次直接挂载可以用mount直接挂
直接挂载命令:  mount -t nfs 192.168.0.155:/www /application/nginx/html

检查:
[root@web02 html]# df -h
Filesystem          Size  Used Avail Use% Mounted on
/dev/vda1            40G  1.9G   36G   5% /
devtmpfs            234M     0  234M   0% /dev
tmpfs               244M     0  244M   0% /dev/shm
tmpfs               244M  440K  244M   1% /run
tmpfs               244M     0  244M   0% /sys/fs/cgroup
tmpfs                49M     0   49M   0% /run/user/0
192.168.0.155:/www   40G  1.7G   36G   5% /application/nginx-1.16/html   #---成功

8.3.3 将nginx添加到系统管理中

1. 创建管理脚本
vim /usr/lib/systemd/system/nginx.service

======================脚本内容======================
[Unit]

Description=nginx - high performance web server

Documentation=http://nginx.org/en/docs/

After=network.target remote-fs.target nss-lookup.target



[Service]

Type=forking

WorkingDirectory=/application/nginx/         ##这里改为nginx的安装目录

ExecStart=/application/nginx/sbin/nginx      ## 这里改为nginx启动程序的绝对路径

ExecReload=/bin/kill -s HUP $MAINPID

ExecStop=/bin/kill -s QUIT $MAINPID

PrivateTmp=true


[Install]

WantedBy=multi-user.target
======================脚本内容======================


2. 设置开机启动 
systemctl enable nginx


3. 通过系统管理启动nginx
systemctl start nginx

4. 检查状态:
[root@web02 ~]# systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-10-07 14:00:44 CST; 14min ago 
     Docs: http://nginx.org/en/docs/
 Main PID: 893 (nginx)
   CGroup: /system.slice/nginx.service
           ├─893 nginx: master process /application/nginx/sbin/nginx
           └─900 nginx: worker process

Oct 07 14:00:44 web02 systemd[1]: Starting nginx - high performance web server...
Oct 07 14:00:44 web02 systemd[1]: Started nginx - high performance web server.

8.3.3 精简化nginx配置文件

web03 :
egrep -v "#|^$" /application/nginx/conf/nginx.conf.default >/application/nginx/conf/nginx.conf


8.4 测试验证3台机器是否正确

在管理服务器中使用curl命令来确认配置是否正确,如果有网络也可以通过浏览器验证

[root@mm01 yum]# curl -I web01			##web01 正常   
HTTP/1.1 200 OK           ------------->##状态码200 说明正确
Server: nginx/1.16.0
Date: Mon, 07 Oct 2019 06:17:42 GMT
Content-Type: text/html
Content-Length: 11
Last-Modified: Mon, 07 Oct 2019 05:24:51 GMT
Connection: keep-alive
ETag: "5d9acc23-b"
Accept-Ranges: bytes

[root@mm01 yum]# curl -I web02			##web02 正常
HTTP/1.1 200 OK
Server: nginx/1.16.0
Date: Mon, 07 Oct 2019 06:17:45 GMT
Content-Type: text/html
Content-Length: 11
Last-Modified: Mon, 07 Oct 2019 05:24:51 GMT
Connection: keep-alive
ETag: "5d9acc23-b"
Accept-Ranges: bytes

[root@mm01 yum]# curl -I web03			##web03 正常
HTTP/1.1 200 OK
Server: nginx/1.16.0
Date: Mon, 07 Oct 2019 06:17:47 GMT
Content-Type: text/html
Content-Length: 11
Last-Modified: Mon, 07 Oct 2019 05:24:51 GMT
Connection: keep-alive
ETag: "5d9acc23-b"
Accept-Ranges: bytes

9. mysql数据库配置 [192.168.0.156]

为了简单快速 ,这里直接使用mariadb来搭建了

9.1 安装mariadb

1. 在yum服务器上下载mariadb

yumdownloader mariadb mariadb-server

yumdownloader php-mysql mariadb-server redis php-pecl-redis  php-pecl-igbinary


#如果你有网络你可以不依赖内网yum源 直接 yum install mariadb mariadb-server -y


2. 客户端安装mariadb,使用 192.168.0.156 作为mysql 为3台服务器提供服务

2.1 修改yum源为本地源[有网络可以不用这一步]
vim  /etc/yum.repos.d/leilei.repo
#-----------------------------
[mirrors]
name=mirrors
baseurl=http://192.168.0.158
enable=1 
gpgcheck=0
#-----------------------------

3. 配置好yum源 安装mariadb
yum install -y mariadb mariadb-server

4. 启动mariadb
systemctl status mariadb


5. 初始化配置mariadb

 mysql_secure_installation      

[root@mariadb yum.repos.d]# 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):      ## 回车,不配置密码,如果要配置直接输入

Set root password? [Y/n] n    ## 不设置root密码

Remove anonymous users? [Y/n] y  ## 是否删除匿名用户

Disallow root login remotely? [Y/n] y ## 不允许源程登录

Remove test database and access to it? [Y/n]  y ## 是否删除测试数据库

Reload privilege tables now? [Y/n] y ## 是否重新加载权限.

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

Thanks for using MariaDB!     ### 出现这个代表配置完成



如果这一步出现:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)  就删除/var/lib/mysql/
还可能是你没有启动数据库,安装完成后启动数据库在配置上面的权限.

9.2 配置mariadb

直接输入 mysql 登录数据库

#1. 创建 discuz 数据库
create database discuz charset utf8;
grant all on discuz.* to discuz@'192.168.0.%' identified by '123456';
flush privileges;

#2. 测试可否登录
mysql -h127.0.0.1 -udiscuz -p123456


[root@mariadb yum.repos.d]# mysql -h127.0.0.1 -udiscuz -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.64-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)]> exit    ## 正常登录后 退出.
Bye

redis安装

yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install --enablerepo=remi install redis


内网yum仓库安装需要下载依赖包:
yumdownloader php-pecl-redis redis-3.2.12-2.el7.x86_64 jemalloc.x86_64 mariadb

10. php环境配置 [web01,web02,web03都需要安装]

10.1. 安装源

rpm -Uvh https://mirrors.cloud.tencent.com/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

10.2 安装php7.2

1. 安装:
yum search php72w
yum -y install mod_php72w.x86_64 php72w-cli.x86_64 php72w-common.x86_64 php72w-mysqlnd php72w-fpm.x86_64


2. 配置php
2.1 修改运行用户
[root@web03 ~]# egrep "user = |group =" /etc/php-fpm.d/www.conf
user = apache
group = apache
;listen.group = nobody

2.2 修改为 www 用户
sed -i  "s#user = apache#user = www#g" /etc/php-fpm.d/www.conf
sed -i  "s#group = apache#group = www#g" /etc/php-fpm.d/www.conf

检查:
[root@web03 ~]# egrep "user = |group =" /etc/php-fpm.d/www.conf
user = www
group = www
;listen.group = nobody


3.添加到开机自动
systemctl enable php-fpm

4. 启动php
systemctl start php-fpm

10.3 php与nginx整合

vim /application/nginx/conf/extra/www.conf

    server {
        listen       80;
        server_name  192.168.0.161;

        location / {
            root   html;
            index  index.html index.htm;
        }

location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /application/nginx/html/$fastcgi_script_name;
    include        fastcgi_params;
}

        error_page   500 502 503 504  /50x.html;
    }

10.4检查页面

看到该页面,证明PHP已经完成配置.

11.0 阿里云负载均衡高可用配置

控制台:https://slb.console.aliyun.com/slb/overview

11.1 nginx配置为后端节点

192.168.0.163 web01

192.168.0.160 web02

192.168.0.161 web03

192.168.0.163 web01 nginx配置文件:

[root@web01 conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    include /application/nginx/conf/extra/www.conf;
}

======================================================

[root@web03 nginx]# cat conf/extra/www.conf 
    server {
        listen       80;
        server_name  192.168.0.161;

        location / {
            root   html;
            index  index.php index.html index.htm;
        }

location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /application/nginx/html/$fastcgi_script_name;
    include        fastcgi_params;
}

        error_page   500 502 503 504  /50x.html;
    }

192.168.0.160 web02 nginx配置文件:

[root@web02 ~]# cat /application/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    include /application/nginx/conf/extra/www.conf;
}

======================================================
[root@web02 ~]# cat /application/nginx/conf/extra/www.conf 
    server {
        listen       80;
        server_name  192.168.0.160;

        location / {
            root   html;
            index  index.php index.html index.htm;
        }

location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /application/nginx/html/$fastcgi_script_name;
    include        fastcgi_params;
}

        error_page   500 502 503 504  /50x.html;
    }

192.168.0.161 web03 nginx配置文件

[root@web03 ~]# vim /application/nginx/conf/nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    include /application/nginx/conf/extra/www.conf;
}

======================================================
[root@web03 ~]# vim /application/nginx/conf/extra/www.conf 

    server {
        listen       80;
        server_name  192.168.0.161;

        location / {
            root   html;
            index  index.php index.html index.htm;
        }

location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /application/nginx/html/$fastcgi_script_name;
    include        fastcgi_params;
}

        error_page   500 502 503 504  /50x.html;
    }

测试访问:

通过域名访问需要将域名解析到负载均衡:

]

到这里就配置完毕了集群,可以搭建论坛测试一下

我已经将域名解析到了 负载均衡提供的公网IP中了,网站如果需要配置证书可以在证书管理处上传证书,或这直接用阿里云证书

12.0 安装discuz

下载discuz

git colone  https://gitee.com/ComsenzDiscuz/DiscuzX

安装discuz

\cp -r  DiscuzX/upload/* /application/nginx/html/  从upload中把文件拷贝到根

配置完成!

最后修改:2019-10-08 00:25:14 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

评论列表

还没有人评论哦~赶快抢占沙发吧~

博客信息

  • 文章数目 82
  • 标签数目 240
  • 运行天数
  • 最后活动

广告



文章目录