Linux防护与集群

基础安全加固

1、文件锁定管理

1.chattr 命令用于改变文件属性(如锁定),lsattr 命令用于查看锁定状态
2.属性
	a:只能给文件添加内容,但是不能删除。
	i:不得任意更改文件或目录。
3.开启、关闭、指定相关属性
	+<属性> 开启文件或目录的该项属性。
	-<属性> 关闭文件或目录的该项属性。
	=<属性> 指定文件或目录的该项属性。
4.-R 递归处理,将指定目录下的所有文件及子目录一并处理

5.示例
chattr +i /etc/passwd				//锁定用户文件
chattr +i /etc/shadow				//锁定密码文件
chattr +a /var/log/messages	/		/设置不能清除日志文件
lsattr  /etc/shadow /etc/passwd		//查看锁定状态,权限中有i 表示已锁定
----i--------e- /etc/shadow
----i--------e- /etc/passwd

6.注意:在已锁定状态下创建用户将会报错

2、设置用户账户有效期

1.设置新添加用户的账户有效期
	vim /etc/login.defs 		//打开用户账户策略配置文件
	PASS_MAX_DAYS   30			//将此项参数修改为30天
	
	关于defs配置文件中其他选项的作用
	PASS_MAX_DAYS   99999		//密码最大有效期
	PASS_MIN_DAYS   0		//两次修改密码的最小间隔时间
	PASS_MIN_LEN    5		//密码最小长度,对于root无效
	PASS_WARN_AGE   7		//密码过期前多少天开始提示
	UID_MIN                   500	//创建用户开始的第一个UID
	UID_MAX                 60000	//最大的用户UID
	GID_MIN                   500	//创建组的第一个GID
	GID_MAX                 60000	//最大的组GID
	CREATE_HOME     yes		//是否创建用户的宿主目录
	
2.设置已添加用户的账户有效期
	chage -M 30 zhangsan		//设置已添加的用户zhangsan的有效期为30天,passwd和shadow文件必须为解锁状态才可执行此命令
	chage -d 0 zhangsan			//设置张三用户下次登录系统时需要修改密码

3、查看并清除命令历史记录

1.查看系统所执行的命令记录
	history
	
2.清空所有命令历史记录
	2.1. 使用 history -c ,也可将此命令添加至用户的 .bash_logout 文件中,用户注销后将会自动清除历史记录
	2.2. rm -rf ~/.bash_history

3.修改命令历史记录条目数
	vim /etc/profile
	HISTSIZE=1000			//默认为1000条,可修改为其他值

4、设置用户超时登出时间

1.经过以下设置后,在用户登录系统后十分钟未操作,将会退出登录
vim /etc/profile
export TMOUT=600		//加入此行,定义变量,600表示秒数

5、用户切换

1. su 命令	//用户切换

2.说明
	2.1.默认情况下所有用户均可使用su 进行切换,为了安全,可以设置个别用户才能使用su
	2.2.wheel组是一个特殊的用户组,必须修改配置文件才能使其生效。生效后,wheel组的成员才能使用su切换,而其他普通用户则不行

3.设置普通用户只有zhangsan能够使用su命令
gpasswd -a zhangsan wheel			//将用户zhangsan加入wheel组
vim /etc/pam.d/su
auth            required        pam_wheel.so use_uid			//去掉此行的开的注释符使此行生效

4.关于 susu - 的区别
	4.1.su只是切换了root身份,但Shell环境仍然是普通用户的Shell;而su -连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误,报command not found的错误。
	4.2.su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了

6、用户提权

1. sudo 命令	//用户提权

2. 普通用户提权的配置
	2.1.方法:命令行输入visudo进行修改,或在配置文件/etc/sudoers中配置
	2.2.具体配置内容
		# visudo
		第一列为用户账号,第二列的ALL意思是登录来源,如localhost,第二列等号右边小括号中的ALL是代表可以切换的身份,第三列ALL是可执行的命令。
		zhangsan ALL=(ALL)	/sbin/ifconfig							//添加此行,需要命令的绝对路径
		%wheel  ALL=(ALL)       NOPASSWD: ALL						//设置 NOPASSWD: ALL 即执行命令时不再需要进行密码验证
		
		关于wheel组需要注意,一旦将用户加入了wheel组,则默认表示该用户拥有执行所有命令的权限,因为在visudo中默认有以下配置:
		%wheel  ALL=(ALL)       ALL
		
		# visudo
		zhangsan	ALL=(ALL)	/sbin/ifconfig,/sbin/route		//表示张三除了sbin下的ifconfig、route能执行以外,其他所用命令均不可执行
		
		# visudo
		Defaults logfile = "/var/log/secure"						//添加此项,表示记录sudo使用日志,默认该功能已生效。
		
		当使用相同授权的用户过多,或者授权的命令较多可使用别名方式进行定义:
		# visudo
		User_Alias	USER=zhangsan,lisi								//定义用户张三李四给别名 USER
		Host_Alias	HOST=localhost									//定义主机给HOST
		Cmnd_Alias	CMND=/bin/cat,/bin/cp							//定义命令给CMND
		USER HOST=CMND												//代表用户zhangsan lisi能够在 本地主机上执行 cat cp命令
	2.3.对于已授权用户进行执行命令的方法
		sudo ifconfig ens33 1.1.1.1/24				//回车后需要输入当前用户密码进行验证,验证通过即可执行命令
		sudo -l										//查看当前用户的授权信息
		cat /var/log/secure							//root用查看sudo执行记录

7、禁用重启热键Ctrl+Alt+Del

1.避免因用户误操作导致重启(CentOS 7mv /usr/lib/systemd/system/ctrl-alt-del.target{,.back}			//删除指定文件即可

8、设置单用户模式需要密码

1.CentOS7 实现用户从单用户模式进入系统时需密码验证,分为以密文方式实现(推荐)、以明文方式实现(不安全)

2.以密文方式实现
	grub2-mkpasswd-pbkdf2				//是一个用来生成密文密码的命令,会让输入密码,然后生成密文
	
	vim /etc/grub.d/00_header 			//末尾新增行增加以下内容,cat << EOF 也必须增加
	cat << EOF
	set superusers='root'
	password_pbkdf2 root 	grub.pbkdf2.sha512.10000.15699E16E86D79C3084AA969626337FB3A8000B84FC03D9DAB9FDBA6F95DB69A14EB85F100A221D6C396AD465820FF5FD8726E4CC8D5151433D7CC437B5440C5.797A64272FE6F595D07496730DEA2C304670322FA7473DC3BA18DD4C55533B9166E7023B619E8114C04B93590405DBFCD82774B7334D8CF450270B8E497C628E
	EOF
	// 上面password_pbkdf2 root后面跟空格,然后直接粘贴密码
	
	grub2-mkconfig -o /boot/grub2/grub.cfg			//让新的配置生效
	
3.以明文方式实现
	vim /etc/grub.d/00_header 			//末尾新增行增加以下内容,cat << EOF 也必须增加
	
	cat <<EOF
	set superusers='root'
	password root 123456
	EOF
	
	grub2-mkconfig -o /boot/grub2/grub.cfg			//让新的配置生效

9、调整BIOS引导设置

1.将第一引导设备设为当前系统所在硬盘,Bios调整第一启动项为硬盘
2.禁止从其他设备(光盘、U盘、网络)引导系统
3.将安全级别设为setup,并设置管理员密码

10、禁止root用户从本地登录

vim /etc/securetty		//只对root生效
#tty1					//注释登录终端
#tty2
......

11、禁止root用户通过sshd登录

vim /etc/ssh/sshd_config 
PermitRootLogin no			//将此项的注释符去掉,并修改参数为no

systemctl restart sshd		//重启sshd服务,让配置生效

12、禁止普通用户以本地及sshd登录

1.禁止普通用户登录:
touch /etc/nologin

2.允许普通用户登录:
rm -rf /etc/nologin

13、检查系统中特权用户及是否存在空口令用户

1.查看是否存在特权用户
	1.1.通过判断/etc/passwd文件中的UID字段是否为0来查找系统是否存在特权用户,使用命令awk
		awk -F: '$3==0 {print $1}' /etc/passwd
2.查看是否存在空口令用户
	2.1.通过判断/etc/shadow文件密码字段的长度是否为0来查看系统是否存在空口令用户
		awk -F: 'length($2)==0 {print $1}' /etc/shadow
	2.2.关于如何新建用户并设置密码为空(只有root才能操作)
		useradd lisi
		passwd -d lisi

14、弱口令检测

1.安装john工具,需要先yum安装编译环境gcc、gcc-c++、make、cmake
	yum install -y gcc gcc-c++ make cmake
	cd
	rz		//上传john-1.8.0.tar.gz
	tar zxf john-1.8.0.tar.gz
	cd john-1.8.0/src
	make clean linux-x86-64

2.将/etc/shadow文件拷贝一份,用于弱口令检测
	cp /etc/shadow /root/shadow.txt

3.使用john工具执行暴力破解
	cd /root/john-1.8.0/run/
	./john /root/shadow.txt		//执行暴力破解
	Press 'q' or Ctrl-C to abort, almost any other key for status
	123456           (root)			//已破解用户root 密码为123456
	按CTRL+C可终止破解

4.查看已破解的账户列表
	./john --show /root/shadow.txt

5.通过其他字典进行破解
	:>john.pot 							//清空破解信息
	./john --wordlist=./password.lst /root/shadow.txt 	//指定其他字典进行破解

15、sshd服务防止暴力破解

1.方法有两种,分别为:配置安全的sshd服务、通过防护软件来避免暴力破解

2.配置安全的sshd服务
	2.1.密码足够的复杂,密码的长度要大于8位最好大于20位。密码的复杂度是密码要尽可能有数字、大小写字母和特殊符号混合组成
	2.2.修改默认端口号
	2.3.不允许root账号直接登陆,添加普通账号,授予root的权限
	2.4.不允许密码登陆,只能通过认证的秘钥来登陆系统

3.通过防护软件来避免暴力破解(fail2ban、pam 模块、shell脚本、denyhosts 软件防护等)
	3.1.关于fail2ban工具(http://www.fail2ban.org/wiki/index.php/Downloads)
		fail2ban可以监视你的系统用户登录日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙)
		工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp列表一定时间

firewalld 防火墙

Linux 防火墙介绍

1、Linux 包过滤防火墙概述

1. netfilter / firewalld 是 unix/linux CentOS 7.0 版本自带的一款开源的,基于包过滤的防火墙管理工具

2.它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。特别是它可以在一台非常低硬件配置服务器上运行的非常好,提供近 400 人的上网服务丝毫不逊色企业级专业路由器防火墙

2、包过滤防火墙工作层次

1.主要是网络层,针对IP数据包,体现在对包内的IP地址、端口/服务,等信息的处理上

在这里插入图片描述

3、netfilter 与 firewalld 简介

1.netfilter
	1.1.指的是linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态/内核空间的防火墙功能体系"

2.firewalld
	2.1.指的是用来管理linux防火墙的命令程序,属于用户态/用户空间的防火墙管理体系。
	2.2.firewalld属于应用层,属于一个定义规则的配置工具,核心的数据包响应和处理,包括拦截和转发等操作属于netfilter来控制,netfilter属于linux系统核心层内部的一个数据包处理模块。

4、防火墙数据处理流程

1.检查数据来源的源地址
	1.1.若源地址关联到特定的区域,则执行该区域所制定的规则
	1.2.若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所制定的规则
	
2.当客户端访问网关服务器本身时,网关服务器的入口区域规则是生效的

3.当客户端通过网关服务器访问其他服务器时,网关服务器的入口区域规则不生效

4.在开启firewalld情况下并实现网关服务器转发流量到其他服务器,那么需要通过IP地址伪装或者端口转发实现
	4.1.地址伪装:NAT,内网访问外网
	4.2.端口转发:PAT,外网访问内网

5、CentOS 7 中存在的防火墙管理程序

1.在CentOS 7.0版本中有几种应用层的防火墙管理程序:firewalld、iptables、ebtables,默认使用 firewalld;在 CentOS 7 版本之前默认使用的是iptables

2.相对于传统的 iptables 防火墙管理工具,firewalld 支持动态更新,并加入了区域 zone 的概念,相对于 iptables 来说,配置更加简单

6、防火墙区域概念

1.简单来说,区域就是firewalld预先准备了几套防火墙策略规则(策略模版),用户可以根据生产场景的不同而选择合适的策略合集,从而实现防火墙策略的快速切换使用。

2.firewalld能定义多组区域:
	2.1.根据不同的环境,选择不同的区域
	2.2.根据不同的区域,配置不同的访问规则。

6.1、firewalld 区域
在这里插入图片描述

6.2、firewalld区域选项

在防火墙配置中,"区域"的相关配置选项的含义如下:
1.服务:  
其实指的是该服务默认的端口,该服务关闭则表示该服务默认端口关闭
2.端口:
相关端口,端口需依赖所对应的服务,用法如:ssh服务被关闭,意味着TCP22被封,但ssh的端口被管理员改为222,那么在端口中开启222即可实现访问服务器ssh服务,虽然此时的服务ssh是被关闭的。
3.协议:
指的是比较广范围的服务或端口,如TCP、UDP、ICMP等,相当于是一个组策略。开启了TCP,意味着所有TCP流量均可通过。
4.源端口:
添加访问者的端口,该端口可是一个,也可是一个范围,一般不需要使用,因为源端口一般都是发起请求端的随机端口。
5.IP地址伪装:
NAT,一般用于内网用户通过NAT访问外网,只能用于IPv4
6.端口转发:
PAT,更加细致的NAT,通过IP+端口实现转换,用于外网访问内网较多
7.ICMP过滤器:
一般用于是否回应ping请求

6.3、firewalld服务选项

在防火墙配置中,"服务"的相关配置选项的含义如下:
1.目标地址:发起请求者要访问的目标地址,添加进的IP则是允许的IP,该配置为空时表示允许所有。
其他选项卡与"区域"中的功能一致。

7、firewalld防火墙配置方法

1.firewall-config图形工具

2.firewall-cmd命令行工具

3./etc/firewalld/中的配置文件

firewalld 防火墙配置

Nginx

Nginx入门介绍

1、Nginx简介

1.Nginx是一个高性能的HTTP、反向代理服务,由俄罗斯人开发。第一个公开版本0.1.0发布于2004年10月4日
  其特点是占有内存少,并发能力强,nginx的并发能力在同类型的网页服务器中表现较好
  在整个web应用程序的生产环境使用率中,该软件名列前茅
  其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名

2.Nginx分为开源版、商业版,官网地址如下:
	开源社区版:nginx.org
	商业版:nginx.com

2、Nginx 和 Apache 的比较

1.相同点
	1.1.在功能实现上都使用了模块化结构设计
	1.2.都支持通用的语言接口,如PHP、Perl、Python等
	1.3.都支持正向、反向代理,虚拟主机,URL重写等
2.Apache的优点
	2.1.Apache更稳定
	2.2.Apache处理动态请求时,Apache性能更高,因为动态请求会用到伪静态,而Apache对rewrite支持的更好
	2.3.Apache的rewrite模块更完善
	2.4.Apache模块更多
3.Nginx的优点
	3.1.Nginx是轻量级的,这里的轻量级并不是说软件占用的储存小,而是资源消耗更少
	3.2.Nginx适合做高并发,因为Nginx采用的是非阻塞异步网络IO模型(epoll),所以Nginx在高并发状态下能保持低资源消耗
		而Apache采用的是select模型/线性轮询,其性能会随着连接数的上升而急剧下降
	3.3.Nginx在处理静态页面方面表现更好
	3.4.反向代理、负载均衡的能力更强
	3.5.可对后端服务器进行健康检查
	3.6.支持网站缓存,加速网页访问(--squid代理)

Nginx安装配置

1、安装配置

nginx编译安装的环境安装
# yum install -y gcc gcc-c++ make lrzsz
nginx依赖包的安装:
# yum install -y pcre-devel zlib-devel openssl openssl-devel patch
//是一个Perl的函数库,包括perl兼容的正则表达式库rewrite重写模块会用到
//zlib是压缩和解压缩模块
//openssl=https
# useradd -M -s /sbin/nologin nginx
//创建一个无法本地登录的用户,用于实现运行nginx程序

# rz			//上传LNMP.zip
# yum install -y unzip
# unzip LNMP.zip
# unzip nginx_upstream_check_module-master.zip		//检测节点服务器补丁包
# tar zxf nginx-1.20.1.tar.gz -C /usr/src
# cd /usr/src/nginx-1.20.1
//打补丁,以支持nginx集群
# patch -p1 < /root/nginx_upstream_check_module-master/check_1.20.1+.patch 
# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/nginx_upstream_check_module-master
//http_stub_status_module主要是用于查询nginx状态的模块,能够获取并发连接、请求等相关数据
///root/nginx_upstream_check_module-master	//后期集群检测节点服务器用
//http_ssl_module实现https的必需模块
# make && make install
# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
//通过配置链接,可以实现更方便使用nginx配套命令,而不需要指定绝对路径

//以下命令用于检查,不用每个敲一遍
# nginx -t				//检查nginx主配置文件是否配置异常
# systemctl start nginx 					//启动nginx服务
# netstat -anpt | grep nginx	//查看nginx是否启动
# nginx -s reload			//平滑启动nginx服务,不断开的情况下重启服务
# yum install psmisc -y		//安装支持killall命令的程序,以及pstree、fuser
# killall -s HUP nginx		//重启nginx服务
# killall -s QUIT nginx		//停止Nginx服务
# nginx –v				//显示nginx版本
# nginx –V				//显示nginx版本以及编译时所定义的配置选项

配置nginx.service文件:
# vim /lib/systemd/system/nginx.service
[Unit]

Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload			//重载systemctl系统
# systemctl enable nginx.service		//设置为开机自启
# systemctl start nginx				//启动nginx

# systemctl status nginx			//查看nginx启动状态
# systemctl reload nginx			//平滑启动,重载
# systemctl stop nginx				//关闭nginx

2、配置文件优化

nginx配置文件主要分三个区域:
# vim /usr/local/nginx/conf/nginx.conf

1.全局配置:
user  www www;				//指定运行用户和组,不修改时,运行用户为安装配置时所指定的用户,修改该文件时,该文件为准。
worker_processes  4;			//指定工作进程数,默认为1,一般和CPU内核数量一致
# cat /proc/cpuinfo | grep "processor"| wc -l	//查看服务器内核数
worker_cpu_affinity 0001 0010 0100 1000;
worker_rlimit_nofile 65535;		//worker进程能够打开的最大文件数量,该值过低客户端会报50X错误,该值一般可设置为65535;
#error_log  logs/error.log;			//错误日志文件位置
#error_log  logs/error.log  notice;	//注意级别错误日志 
#error_log  logs/error.log  info;	//信息级别错误日志,[debug|info|notice|warn|error|crit]
#pid        logs/nginx.pid;		//pid存放位置
关于以上工作进程数一般设置为1个,如果在生产环境可根据服务器工作量适当增加,指定进程数切记不可超过CPU线程个数

2.I/0事件模型配置:
events {
    use epoll;			//系统内核在2.6以上建议使用epoll模型,以提高性能
[ kqueue | rtsig | epoll | /dev/poll | select | poll ]	//可选模型,根据运行平台使用相关模型,linux下使用epoll
accept_mutex on;     //如果配置了多个workers,还应配置影响worker的相关指令。 accept_mutex参数将使每个可用的worker进程接受新连接。 默认情况下,该标志设置为off。
    multi_accept on;		//worker能够在获得新连接的通知时尽可能多的接受连接。 此指令的作用是立即接受所有连接放到监听队列中。如果指令被禁用,worker进程将逐个接受连接。off为禁用
    	//默认每个进程处理的连接数量,最高可以和rlimit_nofile一致
理论上每台nginx服务器能够同时处理的连接数为2的48次方
}


3.HTTP设置,虚拟主机、反向代理、负载均衡都在此区域配置
http {
    include    mime.types;		//设定mime类型,类型由mime.type文件定义,可用于网页输出格式
    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;			//nginx 访问日志
 
    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    #对于普通应用,必须设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
    #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile     on;			//支持文件发送(下载)
    #tcp_nopush     on;		//防止网络阻塞
 
    keepalive_timeout  65;		// 连接超时时间
    tcp_nodelay     on;			//提高数据的实时响应性
    gzip  on;			    	//开启gzip压缩
	client_max_body_size 10M;          //客户端请求的单个最大文件
    client_body_buffer_size 128K;      //缓冲区代理缓冲用户请求最大值
    proxy_connect_timeout 90;           //nginx和节点服务器连接超时时间
    #proxy_end_timeout 90;               //节点服务器数据回传超时时间
    proxy_read_timeout 90;              //连接成功后,节点服务器超时时间
    proxy_buffer_size 4K;              //设置代理服务器(nginx)保存用户头信息的缓冲区大小

    server {				 //设定虚拟主机配置区域
        listen    192.168.1.100:80;			 //监听IP、端口
        server_name  www.nginx.cn;	 //此服务器FQDN
 	charset utf-8;			//网页的默认字符集
        #access_log  logs/nginx.access.log  main;  //设定本虚拟主机的访问日志
        location / {			//根目录配置区域
            root html;		        //定义服务器的默认网站根目录位置
            index index.php index.html index.htm;   //定义首页索引文件的名称
        }
        location /status {			//配置nginx访问状态统计目录
            stub_status on;			//打开状态统计功能
            access_log off;			//关闭状态统计功能的访问日志
        }
        error_page   500 502 503 504 /50x.html;		//内部错误提示页面
        location = /50x.html {			//错误页面配置

        }
 
    }
}

3、Nginx常用功能模块合集
在这里插入图片描述

4、虚拟主机

1.设置基于域名的虚拟web主机
# mkdir -p /var/www/chengdu
# mkdir -p /var/www/shanghai
# echo "www.chengdu.com" > /var/www/chengdu/index.html
# echo "www.shanghai.com" > /var/www/shanghai/index.html 

进入nginx主配置文件新建两个server区域并进行修改配置
# vim /usr/local/nginx/conf/nginx.conf
    server {
        listen       192.168.1.30:80;
        server_name  www.chengdu.com;

        charset utf-8;

        access_log  logs/chengdu.access.log  main;

        location / {
            root   /var/www/chengdu;
            index  index.html index.htm;
        }
}
    server {
        listen       192.168.1.30:80;
        server_name  www.shanghai.com;

        charset utf-8;

        access_log  logs/shanghai.access.log  main;

        location / {
            root   /var/www/shanghai;
            index  index.html index.htm;
        }
}


# systemctl restart nginx 		//如果报错,需要将日志格式打开,去掉注释#
								//或者将access_log  logs/chengdu.access.log  main;#注释掉

关于修改配置文件后应当选择 restart/reload的建议:
建议尽量使用restart,如果修改配置文件错误等,使用restart将会报错,有助于解决报错问题
而使用reload可能不会提醒,用户自然会以为修改的配置文件没有问题,实则可能出现了问题从而导致后续验证失败,但是生产环境中reload可以使已连接的用户不会掉线

验证:
修改客户端hosts文件,进行网页访问验证

2.基于端口的虚拟主机设置:
需求:当输入192.168.1.10:80时访问到chengdu页面
当输入192.168.1.10:8080时访问到shanghai页面
注意:通过IP+端口方式访问服务器时,最好是使用http://192.168.1.10:8080 的方式,前面加上http头部
步骤:修改主配置文件,将shanghai的server区域监听端口修改为8080,这时可以实现通过ip+端口方式访问到shanghai页面,但通过192.168.1.10:80访问时,会直接跳到默认欢迎界面而并非chengdu页面,
chengdu设置方式:
找到默认站点server区域,将默认站点的root 后的路径改为/var/www/chengdu 即可
到此,基于端口的虚拟主机配置实现完成。

3.基于IP的虚拟主机配置:
通过192.168.1.10:80 访问到chengdu
通过192.168.2.10:80 访问到shanghai
步骤:找到默认站点,将默认站点的监听改为 192.168.1.10:80
找到shanghai 的server区域,将监听改为 192.168.2.10:80
配置web服务器的第二个网卡IP为192.168.2.10。第一个网卡为默认的192.168.1.10

客户端分别访问192.168.1.10 192.168.1.20能够获取到不同页面

LNMP架构及应用部署

1、安装mysql数据库

1.先决条件
# yum install -y gcc gcc-c++ make ncurses-devel autoconf lrzsz		//安装所需依赖包
//ncurses		字符终端处理库,包括面板和菜单等功能
通过rz上传 cmake、mysql至服务器:
# tar zxvf cmake-2.8.6.tar.gz -C /usr/src
# cd /usr/src/cmake-2.8.6 
# ./configure 
# make && make install
2.编译安装mysql
# cd
# tar zxf mysql-5.6.36.tar.gz -C /usr/src
# cd /usr/src/mysql-5.6.36/
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
-DCMAKE_INSTALL_PREFIX		//程序安装路径
-DSYSCONFDIR			//程序初始化目录,配置文件存放目录
-DDEFAULT_CHARSET		//指定字符集
-DDEFAULT_COLLATION		//指定字符集校对规则
-DWITH_EXTRA_CHARSETS		//支持额外的字符集
# make && make install
# useradd -M -s /sbin/nologin mysql    //创建mysql运行用户和组
4.配置mysql
# chown -R mysql:mysql /usr/local/mysql
# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf 	//复制mysql主配置文件到运行目录

初始化数据库,以mysql用户运行初始化脚本并制定mysql数据库运行目录和数据存放目录
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
--user		//指定运行用户
--basedir	//指定安装目录
--datadir	//指定数据库数据存放位置

修改属主权限
# chown -R root /usr/local/mysql
# chown -R mysql /usr/local/mysql/data
设置变量环境,方便执行mysql命令,若不设置则只能够使用绝对路径命令执行
# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
# . /etc/profile
添加为系统服务,方便控制mysql服务
# cp /usr/local/mysql/support-files/mysql.server /usr/local/mysql/bin/mysqld.sh

# vim /lib/systemd/system/mysqld.service
[Unit]
Description=Mysql Server
After=network.target

[Service]
User=mysql
Type=forking
PIDFile=/usr/local/mysql/data/ch4ser.pid		//改为服务器自身的主机名
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop

[Install]
WantedBy=multi-user.target		//Minimal 或者桌面/graohical.target

# systemctl daemon-reload			//重载systemctl守护进程
# systemctl enable mysqld.service		//将httpd服务设置为开机自启

以下两种方法都可查询开机是否启动:
# systemctl list-unit-files | grep mysqld
# systemctl is-enabled mysqld.service


# systemctl start mysqld
# netstat -anpt | grep mysqld		//可查看mysql运行状态,端口号为tcp:3306

2、安装PHP

1.先决条件
# rpm -e php php-cli php-ldap php-common php-mysql --nodeps		//卸载
# yum install -y gd libxml2-devel libjpeg-devel libpng-devel xz-devel zlib-devel freetype-devel libtool* libtool-ltdl* libtool-ltdl-devel
//L2,不是数字12,GD插件,提供验证码功能
安装三个加密扩展工具库:libmcrypt、mhash、mcrypt
# tar zxvf libmcrypt-2.5.8.tar.gz -C /usr/src/		//php加密算法扩展库程序
# cd /usr/src/libmcrypt-2.5.8/
# ./configure 
# make && make install
# ln -s /usr/local/lib/libmcrypt.* /usr/lib/
# cd
# tar zxvf mhash-0.9.9.9.tar.gz -C /usr/src/
# cd /usr/src/mhash-0.9.9.9/
# ./configure  
# make && make install
# ln -s /usr/local/lib/libmhash.* /usr/lib/
# cd
# tar zxvf mcrypt-2.6.8.tar.gz -C /usr/src/
# cd /usr/src/mcrypt-2.6.8/
# ./configure 		//如若提示版本小于2.5,则执行以下命令设置变量重新配置
# vim /etc/profile		//编辑系统文件,加入以下内容:
export LD_LIBRARY_PATH=/usr/local/lib: LD_LIBRARY_PATH
# . /etc/profile
# ./configure 		//设置变量后重新配置
# make && make install
3.安装PHP
# cd
# tar zxf php-5.5.38.tar.gz -C /usr/src
# cd /usr/src/php-5.5.38/
# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-zip --libdir=/usr/lib64 --with-png-dir
--prefix:指定安装目录
--with-mcrypt:加载数据加密等扩展工具支持
--with-mysql:指定mysql数据库安装位置
--with-config-file-path:指定php配置文件php.ini将要存放的位置
--enable-mbstring:启用多字符串功能
--with-mysqli:mysql扩展功能
# make && make install

注意:如果PHP与MySQL不在同一台服务器中,则需要用以下方式配置:
# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib --enable-zip --libdir=/usr/lib64 --with-png-dir --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

3、配置PHP

主要设置php.ini,用于确定PHP的运行参数
1.PHP.ini设置
PHP的配置文件在解压目录下,有两个配置文件,分别用于开发与生产
/usr/src/php-5.5.38/php.ini-development		//开发版,用于测试、学习
/usr/src/php-5.5.38/php.ini-production 		//生产版,用于生产环境
将PHP.ini配置文件拷贝至安装目录下
# grep -v "^;" /usr/src/php-5.5.38/php.ini-development | grep -v "^$" > /usr/local/php5/php.ini
# cp /usr/local/php5/php.ini /usr/local/php5/php.ini.bak		//备份配置文件
# vim /usr/local/php5/php.ini[PHP] 的下一行加入如下:
default_charset = "utf-8"
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20M
post_max_size = 8M
short_open_tag = On		//修改自带的为on
extension = php_mysqli.dll
分别是设置默认字符集、允许文件上传、上传文件最大限制、每个请求最多能够上传个数、通过post提交的数据量限制、识别PHP语法标记、以及添加mysqli支持

添加优化模块
# cd
# rz		//上传zend-loader-php5.5-linux-x86_64_update1.tar.gz
# tar zxf zend-loader-php5.5-linux-x86_64_update1.tar.gz -C /usr/src/
# cd /usr/src/zend-loader-php5.5-linux-x86_64/
# cp ZendGuardLoader.so /usr/local/php5/
# vim /usr/local/php5/php.ini		//加入优化模块 [PHP]中
zend_extension=/usr/local/php5/ZendGuardLoader.so
zend_loader.enable=1

4、配置Nginx支持PHP环境

若要让nginx能够解析php网页,有两种办法可以选择:
1.充当中介,将访问php页面的请求转交给其他服务器 LAMP 处理
2.使用PHP的FPM模块来调用本机的PHP环境

配置FPM模块
# cd /usr/local/php5/etc/
# cp php-fpm.conf.default php-fpm.conf
# useradd -M -s /sbin/nologin php

# vim php-fpm.conf		//修改以下内容,并非直接添加
pid = run/php-fpm.pid			//指定pid文件位置
user = php					//设置运行用户
group = php					//设置运行组
pm.max_children = 50			//最多空闲进程
pm.start_servers = 20			//启动时开启的进程数
pm.min_spare_servers = 5		//最少空闲进程数
pm.max_spare_servers = 35		//最大空闲进程数

以上内容必须设置,否则FPM模块无法启动且会报错

# /usr/local/php5/sbin/php-fpm			//启用fpm模块
# netstat -anpt | grep php

# vim /etc/profile		//在开机启动配置文件中加入以下命令,实现开机自启php功能
/usr/local/php5/sbin/php-fpm


1.转交其他服务器:
# vim /usr/local/nginx/conf/nginx.conf
server {
.....				//在默认页面的server中添加一个location区域
	location ~ \.php$ {			//访问.php页面配置区域
             proxy_pass   http://192.168.1.200:80;	//另一台lamp服务器
        }
}

2.调用本机FPM
# vim /usr/local/nginx/conf/nginx.conf
server {
.....				//在默认页面的server中添加一个location区域
location ~ \.php$ {
            root           /usr/local/nginx/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include     fastcgi.conf;
            charset utf-8;				//不加可能会产生乱码
        }


# systemctl restart nginx

5、测试是否能够正常使用

1.测试PHP是否能够正常使用
# vim /usr/local/nginx/html/phpinfo.php  
<?php
phpinfo( );
?>
客户机测试:192.168.1.100/phpinfo.php

2.测试LNMP是否能够正常使用
# mysqladmin -u root -p password		//设置mysql密码为 123456
Enter password: 			//默认密码为空 ,回车即可
New password: 
Confirm new password:
# vim /usr/local/nginx/html/chengdu.php	//mysql5.5使用的是mysqli,5.3使用的是mysql
<?php
$link=mysqli_connect('localhost','root','123456');
if($link) echo "恭喜你,数据库连接成功!";
mysqli_close($link);
?>
客户机测试:192.168.1.100/chengdu.php

6、在LNMP里部署WEB应用

# vim /usr/local/nginx/conf/nginx.conf
修改在默认server {  中设置站点路径以及支持解析php页面
        location / {
            root   html/wwwroot;
            index  index.html index.htm index.php;
        }

添加:在 默认 server {		中添加如下内容:		//需要注意,在测试LNMP可用时应该添加过此模块的,因此这里不需要再次添加,直接使用之前添加的这个模块即可
        location ~ \.php$ {
            root           /usr/local/nginx/html/wwwroot;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
#            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
            charset utf-8;
}

1.部署skyuc天空影院
# yum install -y unzip
# unzip SKYUC.v3.4.2.SOURCE.zip  
# cp -rf SKYUC.v3.4.2.SOURCE/wwwroot /usr/local/nginx/html/
# cd /usr/local/nginx/html/wwwroot/
# chown -R php:php admincp/ data/ templates/ upload/
# systemctl restart nginx
# mysql -u root -p
mysql> create database skyucdb;
mysql> grant all on skyucdb.* to skyuc@localhost identified by 'Aa123456';


# vim /usr/local/nginx/html/wwwroot/includes/class_core.php
禁用2446行:
#               $this->shutdown = Shutdown::init ();
客户端访问:
http://192.168.1.10/install/index.php

注册时填写 创建的数据库"skyucdb" 以及管理员"skyuc" 密码:Aa123456

填写管理员时可以根据自己需求输入相关管理员名称与密码


首页:
http://192.168.1.10/
后台中心:
http://192.168.1.10/admincp



2.部署discuz
# mysql -u root -p
mysql> create database bbsdb;
mysql> grant all on bbsdb.* to bbs@localhost identified by 'Aa123456';


# yum install -y unzip
# unzip Discuz_7.0.0_FULL_SC_UTF8.zip
# cd Discuz_7.0.0_FULL_SC_UTF8
# cp -rf upload/ /usr/local/nginx/html/wwwroot
# cd /usr/local/nginx/html/wwwroot
# chown -R php config.inc.php attachments/ forumdata/ uc_client/data/cache/ templates/  uc_server 
# systemctl restart nginx
客户端访问:
http://192.168.1.10/install

访问主页:
http://192.168.1.10
访问后台:	//通过管理员登录,然后点击右上角的“系统设置”即可跳转到系统后台
http://192.168.1.10

3.部署skyuc天空影院(和MySQL分离)
# yum install -y unzip
# unzip SKYUC.v3.4.2.SOURCE.zip  
# cp -rf SKYUC.v3.4.2.SOURCE/wwwroot /usr/local/nginx/html/
# cd /usr/local/nginx/html/wwwroot/
# chown -R php:php admincp/ data/ templates/ upload/
# systemctl restart nginx
# mysql -h 172.16.16.132 -u root -p
mysql> create database skyucdb;
mysql> grant all on skyucdb.* to skyuc111@172.16.16.89 identified by 'Admin@123';
#mysql> grant all on skyucdb.* to 用户名@本机IP identified by '密码';


# vim /usr/local/nginx/html/wwwroot/includes/class_core.php
禁用2446行:
#               $this->shutdown = Shutdown::init ();


#vim /usr/local/nginx/conf/nginx.conf
location ~ \.php$ {
            root           /usr/local/nginx/html/wwwroot;		//修改根目录
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include     fastcgi.conf;
            charset utf-8;
        }

        location / {
            root   html/wwwroot;						//修改根目录
            index  index.html index.htm index.php;		//添加索引 index.php
        }

# systemctl restart nginx

客户端访问:
http://172.16.16.89/install/index.php

注册时填写 创建的数据库"skyucdb" 以及管理员"skyuc" 密码:Aa123456

填写管理员时可以根据自己需求输入相关管理员名称与密码


首页:
http://172.16.16.89/
后台中心:
http://172.16.16.89/admincp

和MySQL分离的Web服务器上搭建SKYUC
数据库主机填写MySQL服务器IP
在这里插入图片描述

Nginx集群

集群相关介绍

1、集群的概念

1.指多台相互独立的计算机,利用高速通信网络组成一个规模较大的计算机服务系统,集群中的一台服务器都是运行各自服务的独立服务器
2.集群中的服务器相互连接,协同为用户提供应用程序、数据资源,并以单一系统的模型进行管理
3.当用户请求集群系统时,集群给用户的感觉就像是一台独立的服务器在为客户提供服务,而实际上是由很多台服务器共同实现的

在这里插入图片描述

2、集群的优点

1.高性能
	一些国家重要的计算密集型应用(如天气预报、核试验模拟等)需要计算机有很强的运算处理能力。以全世界现有的技术,即使是大型机,其计算能力也是有限的,很难单独完成此任务。因为计算时间可能会相当长,也许几天,甚至几年或更久。因此,对于这类复杂的计算业务使用了计算机集群技术,集群中有几十台、上百台,甚至成千上万台计算机协同计算
	
2.价格有效性
	通常一套系统集群架构,只需要几台或数十台服务器主机即可。与动辄价值上百万的专用超级计算机相比便宜了很多
	在达到同样性能需求的条件下,采用计算机集群架构比采用同等运算能力的大型计算机具有更高的性价比
	
3.可伸缩性
	当服务负载、压力增长时,针对集群系统进行较简单的扩展即可满足需求,且不会降低服务质量
	
4.高可用性
	单一的计算机系统总会面临设备损毁的问题,只要一个部件坏掉,这个计算机系统就可能会宕机,无法正常提供服务
	在集群系统中,尽管部分硬件和软件也会发生故障,但整个系统的服务可以是7×24小时可用的

5.透明性
	多个独立计算机组成的松耦合集群系统构成一个虚拟服务器
	用户或客户端程序访问集群系统时,就像访问一台高性能、高可用的服务器一样
	集群中一部分服务器的上线、下线不会中断整个系统服务,这对用户也是透明的

3、集群的类型

0.在互联网网站架构中,比较常用的是负载均衡集群和高可用性集群。
  无论哪种集群、都至少包括两台节点服务器,而且对外表现为一个整体,只提供一个访问入口(域名或IP)

1.LB/负载均衡集群
	1.1.以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载的整体性能
	1.2.例如“DNS轮询”、“应用层交换”、“反向代理”等都可以用作负载均衡集群
	1.3.LB的负载分配主要依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个集群系统的压力
	1.4.负载均衡集群典型的开源软件包括LVS、Nginx、Haproxy等
	
2.HA/高可用集群
	2.1.以提高应用系统的可靠性,尽可能地减少中断时间为目标,从而确保服务的连续性,达到高可用的容错效果
	2.2.例如“故障切换”、“双机热备”、“多机热备”等都属于高可用集群
	2.3.HA的工作方式包括双工和主从两种模式。
		双工即所有节点同时上线;而主从只有主节点在线提供服务,只有当主节点故障时从节点才会替代主节点为用户提供服务
	
3.HPC/高性能运算集群
	3.1.以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
	3.2.例如“云计算”、“网格计算”也可视为高性能运算的一种
	3.3.高性能运算集群的高性能依赖于“分布式运算”、“并行运算”,通过专用硬件和软件将多台服务器的CPU、内存等硬件资源整合到一起,
		实现只有大型、超级计算机才具备的计算能力
	

在这里插入图片描述

4、集群实现的方式

1.通过软件实现
	1.1.企业中常用的开源集群软件有:Nginx、LVS、Haproxy、Keepalived、Heartbeat等
	
2.通过硬件实现
	2.1.企业中常用的商业集群硬件有:F5、Netscaler、Radware、A10等
	
3.两种实现方式的比较
	3.1.商业的负载均衡产品成本高、性能好,更稳定,缺点是不能二次开发
	3.2.开源的负载均衡软件对运维人员的能力要求较高,目前的互联网行业更偏向使用开源的负载均衡软件

5、负载均衡、高可用的分层结构

1.在典型的负载均衡集群中,主要包括三个层次的组件:负载均衡调度器、服务器池、共享存储

2.前端至少有一个负载调度器(Director) 负责响应并分发来自客户机的访问请求
  后端有大量独立节点服务器(Real Server)构成服务器池(Server Pool)提供实际的应用服务
  整个集群的伸缩性通过增加、删除节点服务器来完成,而这些过程对客户机都是透明的
  为了保持服务、数据的一致性,所有节点使用共享存储设备

在这里插入图片描述

1.第一层 - 负载均衡调度器
	这是访问整个集群系统的唯一入口,对外使用所有服务器的共有VIP(Virtual IP)地址,也称为集群IP地址
	通常会配置主、备两台调度器实现双机热备效果,当主调度器失效后,可以平滑替换至备用调度器,从而确保高可用性
	
2.第二层 - 服务器池
	服务器池提供web应用服务,只处理调度器分发过来的客户机请求
	其中每个节点具有独立的RIP(Real IP,真实IP)地址
	当某个节点暂时失效时,负载调度器的容错机制将会将其隔离,等待错误排除后再重新加入服务器池

3.第三层 - 共享存储
	为服务器池中的所有节点提供稳定、一致的文件存储服务,确保整个集群的统一性
	在 Linux / UNIX 环境中,共享存储可以使用 NAS 设备,或者提供 NFS(网络文件系统)共享服务的专用服务器

Nginx负载均衡集群介绍

1、反向代理、负载均衡的概念

1.关于Nginx的反向代理
  严格来说Nginx没有负载均衡,只是因为Nginx的反向代理所表现出来的效果可以达到负载均衡,所以才称之为Nginx负载均衡
  
2.Nginx反向代理与LVS负载均衡的区别
	2.1.工作方式不同
	一句话概括:LVS等的负载均衡是转发用户请求的数据包,而Nginx反向代理是接收用户的请求然后重新发起请求去请求其后面的节点
	Nginx的反向代理相当于是以反向代理服务器的身份,重新请求节点服务器。在节点服务器看来,访问自己的是反向代理服务器
	LVS的负载均衡相当于是直接转发请求数据包。在节点服务器看来,访问自己的是真实的用户
	2.2.调度算法不同
	Nginx反向代理通常使用轮询算法(round-robin)来将请求发送给后端服务器
	LVS负载均衡可以使用多种算法,如轮询算法、加权轮询算法、源地址	哈希算法等
	2.3.负载均衡能力不同
	LVS负载均衡器可以处理更大量级的流量和更多的后端服务器
	Nginx反向代理的负载均衡能力较弱,适用于小规模的负载均衡
	2.4.功能不同
	Nginx反向代理除了负载均衡功能,还可以提供反向代理、缓存、SSL加速等功能
	LVS负载均衡器则专注于提供负载均衡功能

在这里插入图片描述

2、nginx负载均衡的核心组件介绍

Nginx HTTP功能模块模块说明
ngx_http_proxy_moduleproxy代理模块,用于将请求转发给节点服务器
ngx_http_upstream_module用于实现网站的负载均衡、节点的健康检查

2.1、ngx_http_proxy_module

1.proxy模块介绍
	1.1.proxy_pass指令属于ngx_http_proxy_module模块,此模块可以将请求转发到另一台服务器
	1.2.在实际的反向代理中,会通过location功能匹配指定的URI,然后把请求通过proxy_pass抛给定义好的upstream节点池
	
2.proxy_pass指令的使用案例
	2.1.将匹配URI为name的请求抛给http://127.0.0.1/remote/
	server {
        location /name/ {
                proxy_pass http://127.0.0.1/remote/;
        }
	}
	2.2.将匹配URI为some/path的请求抛给http://127.0.0.1
	server {
        location /some/path {
                proxy_pass http://127.0.0.1;
        }
 	}
 	server {
        location / {
                proxy_pass www_pools;
                //如果报错的话,试一下 proxy_pass http://www_pools;
        }
 	}

2.2、ngx_http_upstream_module模块

1.upstream模块介绍
	1.1.Nginx的负载均衡功能依赖于ngx_http_upstream_module模块
	1.2.ngx_http_upstream_module模块允许Nginx定义一组或多组节点服务器
		使用时可以通过proxy_pass代理方式把网站的请求发送到事先定义好的对应upstream组上
		具体写法为“proxy_pass http://www_pools”,其中www_pools就是一个upstream节点服务器组名字

2.基本的upstream配置案例
	http {
	       upstream www_pools {						//www_pools为集群组名称
	               server 192.168.1.12:80 weight=10;	//weight是权重
	               server 192.168.1.13:80 weight=20;
	               server 192.168.1.14:80 backup;		//其他服务器不可以时启用该服务器
	       }
	}
	
3.upstream模块调度算法
	3.1.静态调度算法:负载均衡器根据自身设定的规则进行分配,不需要考虑后端节点服务器情况(rr、wrr、ip_hash)
	3.2.动态调度算法:负载均衡器会根据后端节点的当前状态来决定是否分发请求(least_conn、fair)

4.常用的调度算法
	4.1.rr轮询(轮询,静态调度算法)
	按客户端请求顺序把客户端的请求逐一分配到不同的后端节点服务器,这相当于LVS中的rr算法,如果后端节点服务器宕机(默认情况下Nginx只检测80端口),宕机的服务器会被自动从节点服务器池中剔除,以使客户端的用户访问不受影响。新的请求会分配给正常的服务器。
	4.2.wrr(权重轮询,静态调度算法,默认算法)
	在rr轮询算法的基础上加上权重,即为权重轮询算法,当使用该算法时,权重和用户访问成正比,权重值越大,被转发的请求也就越多。可以根据服务器的配置和性能指定权重值大小,从而有效解决新旧服务器性能不均带来的请求分配问题。
	4.3.IP_hash:根据请求者的IP,把请求交给特定的服务器
	4.4.fair(动态调度算法)
	此算法会根据后端节点服务器的响应时间来分配请求,响应时间短的优先分配。这是更加智能的调度算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair调度算法的,如果需要使用这种调度算法,必须下载Nginx的相关模块upstream_fair。
	4.5.least_conn(动态调度算法)
	least_conn算法会根据后端节点的连接数来决定分配情况,哪个机器连接数少就分发给哪个节点。

在这里插入图片描述

2.3、ngx_http_proxy_module模块

1.proxy_pass指令属于ngx_http_proxy_module模块,此模块可以将请求转发到另一台服务器

2.在实际的反向代理工作中,会通过location功能匹配指定的URI,
  然后把接收到的符合匹配URI的请求通过proxy_pass抛给定义好的upstream节点池

3.proxy_pass的使用案例:
1)将匹配URI为name的请求抛给http://127.0.0.1/remote/:
server {
        location /name/ {
                proxy_pass http://127.0.0.1/remote/;
        }
 }
2)将匹配URI为some/path的请求抛给http://127.0.0.1:
server {
        location /some/path {
                proxy_pass http://127.0.0.1;
        }
 }
server {
        location / {
                proxy_pass www_pools;	//指定upstream模块声明的三台节点服务器,表示请求会交给后端的三台节点服务器处理
                						//报错的话,试一下 proxy_pass http://www_pools;
        }
 }

nginx反向代理、负载均衡实战

1、实验环境描述

1.一台Nginx服务器(反向代理服务器)
IP地址为192.168.1.100
使用编译安装部署Nginx,实现反向代理、负载均衡

2.两台节点服务器
IP地址为192.168.1.101和192.168.1.102
使用yum安装部署Apache,实现静态页面的解析

2、反向代理服务器、节点服务器的Web服务部署

1.Nginx服务器的Nginx编译安装此处不再体现,前面章节有介绍

2.两台节点服务器的Web服务安装
//第一台节点服务器
# yum install -y httpd
# systemctl start httpd
# systemctl enable httpd
# echo "这是节点服务器1111111111" > /var/www/html/index.html

//第二台节点服务器
# yum install -y httpd
# systemctl start httpd
# systemctl enable httpd
# echo "这是节点服务器222222222222222222222" > /var/www/html/index.html

3.在Nginx服务器中验证节点服务器的可用性
# curl 192.168.1.101
这是节点服务器1111111111
# curl 192.168.1.102
这是节点服务器222222222222222222222

3、在Nginx服务器中配置Nginx的反向代理、负载均衡

# vim /usr/local/nginx/conf/nginx.conf
1.配置负载均衡
在nginx主配置文件的"http {"中加入以下内容:
    upstream www {		//表示节点服务器地址池名称为www
                server 192.168.1.101:80 weight=10;
                server 192.168.1.102:80 weight=10;
				#ip_hash;		//基于IP地址链接的调度,同一个源地址的请求发往同一个节点服务器
        }
        
2.配置反向代理
在nginx主配置文件的"server {"中加入以下内容:
        location / {
                proxy_pass http://www;
        }
并禁用掉以下内容:
        location / {
             root   html;
             index  index.html index.htm;
        }

4、验证反向代理、负载均衡

# nginx -t 
# systemctl restart nginx

客户端访问前端nginx代理服务器 192.168.1.100
重复访问可分别得到两台节点服务器的页面信息

在这里插入图片描述

nginx反向代理、负载均衡(多虚拟主机实现)

实现客户访问www.nginx.com访问到节点服务器的www.nginx.com内容,访问www.apache.com访问到节点服务器的www.apache.com内容,也就是说需要配置2 * 2 = 4 个站点

1、节点服务器站点部署

1.第一台节点服务器
# mkdir /var/wwwnginx /var/wwwapache		//网站根目录
# echo "www.nginx11111.com" > /var/wwwnginx/index.html
# echo "www.apache11111.com" > /var/wwwapache/index.html 
# echo "192.168.1.101 www.nginx.com www.apache.com" >> /etc/hosts		//域名解析(用DNS也可以)

vim /etc/httpd/conf/httpd.conf
//添加虚拟主机
<VirtualHost 192.168.1.101:80>
    DocumentRoot "/var/wwwnginx"
    ServerName www.nginx.com
    ErrorLog "logs/www.nginx.com.error.log"
    CustomLog "logs/www.nginx.com.access.log" common
</VirtualHost>

<VirtualHost 192.168.1.101:80>
    DocumentRoot "/var/wwwapache"
    ServerName www.apache.com
    ErrorLog "logs/www.apache.com.error_log"
    CustomLog "logs/www.apache.com.access_log" common
</VirtualHost>

//修改DocumnetRoot "/var"
//再修改下面的为<Directory "/var">

# systemctl restart httpd

2.第二台节点服务器
# mkdir /var/wwwnginx /var/wwwapache		//网站根目录
# echo "www.nginx22222.com" > /var/wwwnginx/index.html
# echo "www.apache22222.com" > /var/wwwapache/index.html 
# echo "192.168.1.102 www.nginx.com www.apache.com" >> /etc/hosts		//域名解析(用DNS也可以)

vim /etc/httpd/conf/httpd.conf
//添加虚拟主机
<VirtualHost 192.168.1.102:80>
    DocumentRoot "/var/wwwnginx"
    ServerName www.nginx.com
    ErrorLog "logs/www.nginx.com.error.log"
    CustomLog "logs/www.nginx.com.access.log" common
</VirtualHost>

<VirtualHost 192.168.1.102:80>
    DocumentRoot "/var/wwwapache"
    ServerName www.apache.com
    ErrorLog "logs/www.apache.com.error_log"
    CustomLog "logs/www.apache.com.access_log" common
</VirtualHost>

//修改DocumnetRoot "/var"
//再修改下面的为<Directory "/var">

# systemctl restart httpd

2、验证

1.在Windows 10 虚拟机 hosts 文件中添加DNS解析条目

2.发现不管输入 www.nginx.com 或 www.apache.com,解析出来的始终是第一个虚拟主机nginx的网页内容,并非我们想要的效果

在这里插入图片描述

在这里插入图片描述

3、改进

1.问题所在
通过以上设置,在客户端访问不同域名时发现并未访问到不同内容,始终是第一个虚拟主机的网页内容

2.原因
用户访问域名时确实携带了www.nginx.com或者www.apache.com主机头请求Nginx反向代理服务器
但是反向代理服务器向下面节点重新发起请求时,默认并没有在请求头里告诉节点服务器要找哪台虚拟主机
所以节点服务器接收到请求后发现没有主机头信息
因此就把节点服务器的第一个虚拟主机发给了反向代理(而我们配置的第一个虚拟主机放是www.nginx.com)

3.解决办法
当反向代理向后重新发起请求时,要携带主机头信息,以明确告诉节点服务器要找哪个虚拟主机
具体的配置很简单,就是在Nginx代理WWW服务虚拟主机配置里增加如下一行配置:
        location / {
                proxy_pass http://www;
				proxy_set_header Host $host;		//新增内容
        }
# systemctl restart nginx

4、继续验证

Windows 10 继续验证,发现可以正常解析了

在这里插入图片描述

节点服务器统计真机客户端IP地址

1、存在的问题与解决

存在的问题:
由于使用的是nginx反向代理,因此节点服务器收到的web请求的源地址为nginx代理服务器,因此无法统计真实的客户访问情况

解决步骤:
1.nginx代理服务器打开Forwarded模块
        location / {
                proxy_pass http://www;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $remote_addr;		//新增内容
        }
2.节点服务器设置日志格式(两台都要改)
	2.1.修改httpd主配置文件:
	<IfModule log_config_module>
	    LogFormat "%{X-FORWARDED-FOR}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
	以上 %{X-FORWARDED-FOR}i 为新增内容,表示在记录日志时加入真实客户端的ip地址。
	2.2.修改虚拟主机日志记录格式为“combined”,两台节点服务器都需要修改:
	<VirtualHost 192.168.1.101:80>
	    DocumentRoot "/var/wwwnginx"
	    ServerName www.nginx.com
	    ErrorLog "logs/www.nginx.com.error.log"
	    CustomLog "logs/www.nginx.com.access.log" combined
	</VirtualHost>
	
	
	<VirtualHost 192.168.1.101:80>
	    DocumentRoot "/var/wwwapache"
	    ServerName www.apache.com
	    ErrorLog "logs/www.apache.com.error_log"
	    CustomLog "logs/www.apache.com.access_log" combined
	</VirtualHost>

2、客户端验证

客户端再次访问并在节点服务器中查看日志,可以发现日志的第一列为真实客户机的IP地址,第二列为nginx代理服务器的IP地址

未设置之前,日志中所显示的源IP是反向代理服务器的IP
在这里插入图片描述
设置之后,日志日志中所显示的源IP是客户机的真实IP
在这里插入图片描述

nginx实现动静分离

1.需求
当用户请求www.nginx.com/static/x地址时,实现由静态服务器池(static_pools)处理请求
而对于其他访问请求全部由默认的动态服务器池(default_pools)处理请求
此案例静态服务器为192.168.1.101,动态服务器为192.168.1.102

2.nginx代理服务器配置
	2.1.修改nginx服务器的负载均衡配置:
	http {
	    include       mime.types;
	    default_type  application/octet-stream;
	    upstream www {			//用于动态解析
	                server 192.168.1.101:80 weight=10; 	//删除该项
	                server 192.168.1.102:80 weight=10; 
	        }
	以上配置即为动态服务器的配置
	
	2.2.增加静态服务器池配置:
	在upstream www区域后面增加以下内容:
	    upstream static {		//用于静态解析
	                server 192.168.1.101:80 weight=10;
	        }
	在下方配置文件中的上面新增红色字体部分内容:
	        location /static {		//客户端访问 xxx/static/x 时,匹配到这里的/static
	                proxy_pass http://static;		//定义匹配static服务器池
	                proxy_set_header Host $host;
	                proxy_set_header X-Forwarded-For $remote_addr;
	        }
	        location / {			//当客户端访问其他域名时,匹配到这里的 / 
	                proxy_pass http://www;
	                proxy_set_header Host $host;
	                proxy_set_header X-Forwarded-For $remote_addr;
	        }
	
	重启nginx服务:# systemctl restart nginx
	
	2.3.增加静态服务器的验证信息,该静态服务器为192.168.1.101:
	//因为网站根目录下面没有static文件夹,所以需要在静态网站根目录下,创建一个新的名为static的文件夹,并存放网页内容,如:index.html
	# mkdir /var/wwwnginx/static
	# echo "这是静态服务器的静态页面!!!!" > /var/wwwnginx/static/index.html

在这里插入图片描述

Nginx负载均衡监测节点状态

1、nginx_upstream_check_module模块简介

1.利用第三方Nginx插件监控代理后端节点的服务器淘宝技术团队开发了一个Tengine(Nginx的分支)模块nginx_upstream_check_module,用于提供主动式后端节点服务器健康检查
2.通过它可以检测后端realserver的健康状态,如果后端realserver不可用,则所有的请求就不会转发到该节点上
3.Tengine原生支持这个模块,而Nginx则需要通过打补丁的方式将该模块添加到Nginx中(安装nginx时已经安装该补丁)
4.补丁下载地址:https://github.com/yaoweibin/nginx_upstream_check_module。下面介绍一下如何使用这个模块。

2、使用方法

# vim /usr/local/nginx/conf/nginx.conf
    upstream www {
                server 192.168.1.102:80 weight=10;
                check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        }
上面配置的意思是,对www这个地址池的节点服务器,每隔3秒检测一次,请求2次正常则标记realserver状态为up,如果检测5次都失败,则标记real-server的状态为down,超时时间为1秒,检查协议是HTTP。
新增以下内容:
        location /status {
                check_status;
        }

客户端访问:192.168.1.100/status

在这里插入图片描述

LVS

LVS基础知识

1、LVS简介

1.LVS指的是Linux Virtual Server,是一种基于Linux操作系统的开源负载均衡软件。简单来说,负载均衡就是将请求平均分配给多个服务器处理,以提高系统的性能、可靠性和可扩展性。

2.LVS可以将多个服务器组成一个虚拟服务器集群,对外表现为一个服务地址。当用户发送请求时,LVS会将请求分发给集群中的某一台服务器进行处理,从而实现请求的平均负载分配和服务的高可用性。

3.使用LVS可以有效提高网站、应用程序等服务的响应速度和可用性,是许多大型网站和应用程序的核心技术之一。

2、LVS负载均衡与Nginx负载均衡的区别

LVS和Nginx都是负载均衡软件,它们都可以将请求平均分配给多个服务器处理,以提高系统的性能和可靠性。它们之间的主要区别在于:

1.工作原理:LVS主要通过IP地址实现负载均衡;
			Nginx主要通过HTTP协议实现负载均衡

2.功能特点:LVS支持更多的负载均衡算法,可以适用于更多场景;
			Nginx则更擅长于处理Web应用负载均衡

3.配置和使用:LVS需要在Linux系统中进行配置和管理,需要一定的Linux系统运维技能;
			Nginx则可以使用更加简单的配置文件进行管理和配置,易于上手和使用

总的来说,如果需要处理高并发的TCP/UDP服务,如数据库、邮件、DNS等,可以考虑使用LVS;
如果需要处理Web应用负载均衡,可以考虑使用Nginx;
但具体选择哪种负载均衡软件,需要根据实际业务需求和技术架构进行评估

3、LVS的三种工作模式
在这里插入图片描述

1.NAT 地址转换模式:
	1.1.所有真实服务器都处于内网中,但LVS(调度服务器)的IP地址对外可见
	1.2.当请求到达LVS的IP地址时,LVS会根据预设的负载均衡算法将请求转发给其中一台真实服务器
		真实服务器处理请求后,将响应返回给LVS,再由LVS返回给客户端
	1.3.整个过程中,为了让客户端无法感知到真实服务器的存在,LVS会重写请求报文的目的IP(本应是真实服务器IP,重写为LVS自己的IP)
		同时,LVS也会重写响应报文的源IP(本应是真实服务器IP,重写为LVS自己的IP),因此被称为NAT模式

2.TUN IP隧道模式:
	2.1.由于采用NAT模式时,请求和响应报文都必须经过LVS重写IP地址,而当客户请求增多时,LVS的处理能力将成为瓶颈,所以出现了TUN模式
	2.2.TUN模式的原理就是将请求与响应分离(因为请求报文的大小远小于响应报文的大小)
	2.3.TUN模式的LVS仅处理请求报文,通过IP隧道转发至真实服务器
		而响应报文由真实服务器直接返回给客户端,所以客户端知道后端真实服务器的存在
	2.4.TUN模式大幅减小了LVS的工作压力,集群系统的最大吞吐量可以提高10倍

3.DR 直接路由模式:
	3.1.在TUN模式中,需要LVS与真实服务器之间创建隧道连接,而这样会增加服务器的负担,所以出现了DR模式
	3.2.DR模式中的LVS依然仅处理请求报文,响应报文依然由真实服务器直接返回给客户端
		但不同的是,DR模式要求LVS与真实服务器必须在统一个局域网内,并且LVS、真实服务器共享一个对外可见的VIP地址(Virtual IP)
	3.3.客户端可以通过该VIP地址向LVS发起请求,LVS会修改请求报文的MAC地址为某台真实服务器的MAC地址,发给某台真实服务器
	3.4.由于真实服务器响应客户端时,响应报文的源IP地址也是该VIP地址,于是客户端便感觉不到后端真实服务器的存在

4、LVS的常用调度算法

1.轮询(Round Robin)
	将收到的访问请求按照顺序轮流分配给集群中的各节点服务器,均等地对待每台节点服务器,而不考虑服务器实际的连接数和系统负载等条件
	当所有节点服务器的配置都相近或一致时一般采用这种方式
2.加权轮询(Weighted Round Bobin)
	根据真实服务器的处理能力轮流分配收到的访问请求,调度器可以自动查询各节点的负载情况,并动态调整其权重
	这样可以保证处理能力强的服务器承担更多的访问流量
3、最少连接(Least Connections)
	根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点
	如果所有的服务器节点性能相近,采用这种方式可以更好地负载均衡
4.加权最少连接(Weighted Least Connections)
	在服务器节点的性能差异较大情况下,可以为真实服务器自动调整权重,权重较高的节点将承担更大比例的活动连接负载

5、LVS管理工具 ipvsadm

1.ipvsadm简介
	1.1.ipvsadm是在 调度器 上使用的LVS集群管理工具
	1.2.ipvsadm通过调用ip_vs模块添加、删除、查看负载均衡集群运行状态,在CentOS 7系列中需要手动安装ipvsadm管理工具
	
2.ipvsadm安装
# modprobe ip_vs				//加载LVS功能模块
# yum install -y ipvsadm		//安装
# ipvsadm -v					//查看已安装的ipvsadm版本
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
# man ipvsadm					//查询ipvsadm使用手册

3.创建调度服务器
示例:集群的VIP地址为192.168.1.100,针对TCP 80端口提供负载分流服务,使用的调度算法为轮询
# ipvsadm -A -t 192.168.1.100:80 -s rr
//-A		表示添加调度服务器
//-t		指定VIP地址以及端口
//-s		指定负载调度算法,轮询/rr、加权轮询/wrr、最少连接/lc、加权最少连接/wlc

4.添加节点服务器
示例:为调度服务器192.168.1.100添加四个节点服务器
# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.20:80 -m -w 1
# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.30:80 -m -w 1
# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.40:80 -m -w 1
# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.50:80 -m -w 1
//-a		表示添加节点服务器
//-t		指定VIP地址以及端口
//-r		指定RIP地址以及端口
//-m		表示LVS的NAT模式,-g为DR模式、-i为TUN模式
//-w		指定权重,权重为0表示停用

5.查看LVS集群状态
# ipvsadm -ln

6.删除集群相关条目
# ipvsadm -d -r 192.168.1.20:80 -t 192.168.1.100:80		//删除单个节点服务器
# ipvsadm -D -t 192.168.1.100:80						//删除调度服务器,连带删除所有节点服务器

LVS负载均衡集群实战(NAT模式)

1、案例描述

1.关于NAT模式下的LVS调度服务器
	1.1.在NAT模式的集群中,LVS负载调度器是所有节点访问互联网的网关服务器
	1.2.其外网地址作为整个集群的VIP地址,具备两块网卡,分别连接内网和外网
	
2.关于客户机访问服务器的数据流向
	2.1.client --> LVS --> RS --> LVS --> client

2、案例架构图
在这里插入图片描述

3、案例环境
在这里插入图片描述

4、案例实施
4.1、说明

1.对于LVS负载调度器来说,需要开启路由转发规则,以便节点服务器能够访问到互联网
2.所有的节点服务器、共享存储均位于内网中,其默认网关设置为LVS负载调度器的内网IP地址(192.168.2.10)

4.2、配置

1.LVS Server操作
开启路由转发:
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# sysctl -p
配置负载分配策略
# yum install -y ipvsadm
# ipvsadm -A -t 192.168.1.10:80 -s rr
# ipvsadm -a -t 192.168.1.10:80 -r 192.168.2.20:80 -m -w 1
# ipvsadm -a -t 192.168.1.10:80 -r 192.168.2.30:80 -m -w 1 
若要验证权重分配几率,最好是采用wrr来实现,CentOS 7中通过rr无法体现出权重的几率
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.10:80 rr
  -> 192.168.2.20:80              Masq    1      0          0         
  -> 192.168.2.30:80              Masq    1      0          0 

2.两台Web Server配置
2.1.Web Server_1配置:
指定网关为LVS服务器的内网IP地址:
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY="192.168.2.10"
# systemctl restart network
安装配置提供给客户端的应用服务程序
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "LVS负载均衡集群之Web Server_1" > /var/www/html/index.html

2.2.Web Server_2配置:
指定网关为LVS服务器的内网IP地址:
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY="192.168.2.10"
# systemctl restart network
安装配置提供给客户端的应用服务程序
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "LVS负载均衡集群之Web Server_2" > /var/www/html/index.html

4.3、验证测试

外网客户机测试:
通过外网客户机访问集群VIP地址访问集群,发现不断刷新或重新连接能够出现不同的页面信息
不过这些信息都来自于节点服务器中的数据,此时再查看LVS服务器的负载情况,也是有所变化的

# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.10:80 rr
  -> 192.168.2.20:80              Masq    1      0          6         
  -> 192.168.2.30:80              Masq    1      0          5    
  
此外,还可以直接查看节点服务器的访问日志
由于此种集群方式采用的是转发请求,因此在节点服务器日志中是能够看到外网客户机访问的
# cat /etc/httpd/logs/access_log
192.168.1.253 - - [11/Nov/2018:12:04:15 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0"

LVS负载均衡集群实战(DR模式)

1、案例描述

1.关于DR模式下的LVS调度服务器
	1.1.在DR模式的集群中,LVS负载调度器作为集群的访问入口,但不作为网关使用
2.关于DR模式下的所有节点服务器
	2.1.服务器池中的所有节点服务器各自接入互联网,发送给客户机的Web响应数据包不需要经过LVS负载调度器
3.关于VIP地址
	3.1.DR模式下,数据将被分别处理,因此LVS负载调度器和所有的节点服务器都需要配置VIP地址,以便响应对整个集群的访问
4.关于客户机访问服务器的数据流向
	4.1.client --> LVS --> RS --> client

2、案例架构图
在这里插入图片描述

3、案例环境
在这里插入图片描述

4、案例实施
4.1、说明

1.使用DR模式时,节点服务器也需要配置VIP地址,并调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突
2.节点服务器配置VIP地址仅用作发送Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)
  因此使用虚接口lo:0来承受VIP地址,并为本机添加一条路由记录,将访问VIP地址的数据限制在本地,避免通信紊乱

4.2、配置

1.LVS Server操作
配置虚拟IP地址
采用虚接口的方式(ens32:0)为网卡ens32绑定一个VIP地址,以便响应集群访问,配置结果为ens32:192.168.1.10、ens32:0:192.168.1.100
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-ens32 ifcfg-ens32:0
# vim ifcfg-ens32:0		//只修改以下三部分内容即可
NAME=ens32:0
DEVICE=ens32:0
IPADDR=192.168.1.100

# ifup ens32:0
# ifconfig ens32:0
ens32:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
        ether 00:0c:29:99:f9:ca  txqueuelen 1000  (Ethernet)
调整/proc响应参数
对于DR集群来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux内核的重定向参数响应。
# vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens32.send_redirects = 0		//此接口地址为lvs服务器正在使用的物理接口
# sysctl -p

配置负载分配策略
# yum install -y ipvsadm
# ipvsadm -A -t 192.168.1.100:80 -s rr
# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.20 -g -w 1
# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.30 -g -w 1
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.100:80 rr
  -> 192.168.1.20:80              Route   1      0          0         
  -> 192.168.1.30:80              Route   1      0          0

2.两台Web Server配置
2.1.Web Server_1配置:
设置VIP地址:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0		//只修改以下三部分内容即可
DEVICE=lo:0
IPADDR=192.168.1.100
NETMASK=255.255.255.255
# ifup lo:0
# ifconfig lo:0
添加路由
# /sbin/route add -host 192.168.1.100 dev lo:0
# vim /etc/rc.local
/sbin/route add -host 192.168.1.100 dev lo:0

调整/proc相应参数
# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce =2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
# sysctl -p

安装配置提供给客户端的应用服务程序
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "LVS负载均衡集群之Web Server_1" > /var/www/html/index.html

2.2.Web Server_2配置:
设置VIP地址:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0		//只修改以下三部分内容即可
DEVICE=lo:0
IPADDR=192.168.1.100
NETMASK=255.255.255.255
# ifup lo:0
# ifconfig lo:0
添加路由
# /sbin/route add -host 192.168.1.100 dev lo:0
# vim /etc/rc.local
/sbin/route add -host 192.168.1.100 dev lo:0

调整/proc相应参数
# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce =2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
# sysctl -p

安装配置提供给客户端的应用服务程序
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "LVS负载均衡集群之Web Server_2" > /var/www/html/index.html

4.3、验证测试

外网客户机测试:
通过外网客户机访问集群VIP地址访问集群,发现不断刷新或重新连接能够出现不同的页面信息
不过这些信息都来自于节点服务器中的数据,此时再查看LVS服务器的负载情况,也是有所变化的

# ipvsadm -ln
此外,还可以直接查看节点服务器的访问日志
由于此种集群方式采用的是转发请求,因此在节点服务器日志中是能够看到外网客户机访问的
# cat /etc/httpd/logs/access_log
192.168.1.253 - - [11/Nov/2018:12:04:15 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Wind ows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0"

NFS共享存储服务

NFS简介

在这里插入图片描述

1.NFS(Network File System)网络文件系统,主要功能是通过TCP/IP网络让不同的主机之间可以共享文件或目录

2.NFS客户端(一般为节点服务器)可以通过mount挂载的方式将NFS服务器端共享的存储目录挂载到NFS客户端本地系统中
从客户端本地来看,NFS服务器端共享的目录就好像是自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录
有点类似于Windows上的文件共享映射网络驱动器

3.NFS服务的实现依赖于 RPC 机制(远程过程调用),以完成远程到本地的映射过程

4.在CentOS 7系列系统中,需要安装nfs-utils、rpcbind软件包来提供NFS共享服务
前者用于NFS共享发布和访问,后者用于RPC支持

5.NFS的RPC服务的主要功能就是记录每个NFS功能所对应的端口号,在NFS客户端请求时将该端口和功能对应的信息传递给NFS客户端,
确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据目的,相当于NFS服务器端和客户端之间的中介

NFS共享存储服务实战

1、案例描述

通过NFS服务实现共享文件,使得两台Web服务器能够同时访问该共享获取同样的数据

2、案例环境
在这里插入图片描述

3、NFS服务器的安装配置

# yum install -y nfs-utils rpcbind
# systemctl enable nfs
# systemctl enable rpcbind
NFS设置共享目录
# mkdir -p /var/www/html
# echo "这是NFS存储服务器!" > /var/www/html/index.html
# vim /etc/exports			//该文件用于设置NFS共享项目,指定共享目录、权限等
/var/www/html    192.168.1.0/24(rw,sync,no_root_squash)
或者
/var/www    192.168.1.0/24(rw) ,192.168.2.1(ro)
编辑以上配置文件时客户机可以是主机名、IP地址、网段、且允许使用*、?通配符
权限中rw表示读写、ro表示只读,sync表示同步写入,no_root_squash表示当客户机用root登录时赋予本地root权限
# systemctl restart rpcbind  //先启动该服务
# systemctl restart nfs 
查看本地共享的项目:
# showmount -e	
"clnt_create: RPC: Unknown host"	//首次查看时可能会报此错误
解决方法:
# vim /etc/hosts
192.168.1.100    pillarx1m		//加入当前主机IP地址与对应的主机名
# showmount -e				//再次查看当前服务器的共享项目
Export list for pillarx1m:
/var/www/html 192.168.1.0/24

4、NFS客户端访问挂载

1.NFS协议的目标是提供一种网络文件系统,因此对NSF共享的访问也使用mount命令来进行挂载,对应的文件系统类型为nfs
2.可以手动挂载,也可以加入fstab配置文件实现开机自动挂载
3.考虑到集群系统网络稳定性,NFS服务器和NFS客户端之间最好是使用专用网络来进行连接
# yum install -y nfs-utils rpcbind  //rpcbind客户机必须安装,nfs用于支持showmount命令
# systemctl enable rpcbind
# systemctl start rpcbind
# showmount -e 192.168.1.100	//查询NFS服务器的共享项目
Export list for 192.168.1.100:
/var/www/html 192.168.1.0/24
客户端手动挂载NFS服务器共享的目录
# mkdir /var/www
# mount 192.168.1.100:/var/www/ /var/www
查看客户机中的网页是否为NFS服务器的内容:
# cat /var/www/html/index.html
这是NFS存储服务器!
此时通过# mount 命令同样可以查看到已挂载的项目中有当前的NFS项目

客户端实现开机自动挂载:
# vim /etc/fstab
192.168.1.100:/var/www /var/www/        nfs     rw              0 0
添加开机自动挂载配置文件后,重启电脑后可以查看到该项目已经挂载
也可以在当前状态下输入# mount -a实现立即加载fstab配置文件

Keepalived 双机热备

Keepalived入门介绍

1、keepalived简介

1.Keepalived 起初是专门针对 LVS 设计的一款强大的辅助工具,主要用来提供故障切换和健康状态检查功能

2.keepalived 可以判断LVS负载调度器、节点服务器的可用性,并及时隔离并替换为新的服务器,当故障主机恢复后重新将其加入集群

3.keepalived 可以实现高可用的 VRRP / HSRP 功能

4.keepalived除了能够管理LVS软件外,还可以作为其他服务(Nginx、Haproxy、MySQL等)的高可用解决方案软件

5.简单来说,Keepalived 可以监控服务器的运行状态,当其中一台服务器出现故障时,它会自动将该服务器的 IP 地址转移到其他健康的服务器上
  以此来保证服务的正常运行,提高集群系统的高可用性

2、keepalived服务的三个重要功能

1.管理LVS负载均衡软件

2.管理LVS负载均衡软件

3.作为系统网络服务的高可用功能

3、keepalived高可用故障切换的实现原理

1.Keepalived 利用 VRRP 协议实现高可用性、故障切换
2.正常工作时,Master 主机会不断地向 Backup 主机发送(以组播方式)心跳消息,用于告知自己当前状态是正常的
3.当 Master 故障时,无法发送心跳消息给 Backup,因此 Backup 判断 Master 已经故障,因此 Backup 从待命状态变为工作状态
4.当 Master 主机恢复正常后,因为 Master 的优先级高于 Backup,所以Master 主机将会夺回服务权,此时 Bakcup 主机重新变为待命状态

4、关于VRRP协议

1.VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议,用于实现多台路由器的冗余备份,以提高网络的可靠性和稳定性
2.在 VRRP 中,多台路由器组成一个虚拟路由器组,共享一个虚拟 IP 地址,并通过 VRRP 协议通信,选举出一个主路由器和一个备份路由器
3.主路由器负责处理网络流量,备份路由器则处于待命状态
4.当主路由器发生故障时,备份路由器会立即接管主路由器的工作,从而保证网络的连续性和稳定性

在这里插入图片描述

5、keepalived安装及主配置文件介绍

1.安装keepalived
# yum install -y keepalived ipvsadm
# systemctl enable keepalived
# rpm -qa keepalived
keepalived-1.2.13-8.el7.x86_64

2.keepalived主配置文件介绍
# vim /etc/keepalived/keepalived.conf
	2.1.全局配置区域:主要用来定义keepalived故障通知机制和Route ID标识
	2.2.VRRP实例定义区域:此区域主要定义具体服务的实例配置,包括keepalived主备状态、接口、优先级、认证方式和IP信息等。
	2.3.LVS负载的服务器池区域:定义VIP地址、健康状态检查时间、LVS负载均衡调度算法、负载均衡模式、节点服务器IP、权重、重连时间等信息。

Keepalived实现双机热备

1、关于双机热备

1.基于VRRP的热备方式,keepalived可以用作服务器的故障切换,每个热备组可以有多台服务器,最常用的就是双机热备
2.在这种方案中,故障切换主要针对虚拟IP地址的漂移来实现,因此能够适用于各种应用服务器(web、ftp、mail等)

2、案例架构图
在这里插入图片描述

3、案例环境
在这里插入图片描述

4、Master服务器配置

# yum install -y keepalived
# rpm -qa keepalived
keepalived-1.2.13-8.el7.x86_64
# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# vim /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     123456@qq.com				//邮件接收者邮箱
   }
   notification_email_from 654321@qq.com		//邮件发送者邮箱
   smtp_server 192.168.200.1					//邮件服务器IP地址(随意)
   smtp_connect_timeout 30
   router_id chengdu
}

vrrp_instance VI_1 {
    state MASTER
    interface ens32
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100/24 dev ens32 label ens32:0
    }
}
# systemctl start keepalived
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "keepalived高可用集群Web Server_1" > /var/www/html/index.html

5、Backup服务器配置

# yum install -y keepalived
# rpm -qa keepalived
keepalived-1.2.13-8.el7.x86_64
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# rm -rf /etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     123456@qq.com
   }
   notification_email_from 654321@qq.com
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id shanghai
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens32
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100/24 dev ens32 label ens32:0
    }
}
# systemctl start keepalived
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "keepalived高可用集群Web Server_2" > /var/www/html/index.html

6、验证测试

1.当以上keepalived配置完成后,默认情况下Master服务器通过ifconfig命令能够查看到ens32:0网卡的VIP地址192.168.1.100
而Backup服务器却查看不到,当将Master服务器的优先级设置比Backup服务器低时,Master服务器将无法查看到VIP地址,而Backup服务器却可以

总结:通过ifconfig命令查看VIP地址时,只有当前为客户提供服务的服务器才能查看到VIP地址,而处于待命的服务器上无法查看到VIP地址

2.客户端访问验证:
# yum install -y elinks			//客户机安装文本浏览器
# elinks 192.168.1.100			//客户机访问VIP地址,由于此时Master服务器为192.168.1.10,因此获取到的页面为192.168.1.10的网页页面
Master服务器执行:
# systemctl stop keepalived			//在Master服务器中关闭keepalived程序,此时Master服务器无法正常提供服务,因此Backup服务器应该会接替并为用户提供服务
客户端执行:
# elinks 192.168.1.100			//客户机访问VIP地址,由于此时为客户提供服务的为Backup服务器,因此获取到的页面应该为Backup服务器的页面。

3.当客户机连接时,可以通过以下命令在调度器上查看客户机访问服务器的路径流程
# ipvsadm -L -n -c
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:49  FIN_WAIT    192.168.1.222:49375 192.168.1.100:80   192.168.1.30:80
TCP 00:55  FIN_WAIT    192.168.1.222:49374 192.168.1.100:80   192.168.1.30:80

# ipvsadm --list --timeout
Timeout (tcp tcpfin udp): 1 1 1		//超时时间
# ipvsadm --set 1 1 1		//修改超时时间,分别对应 tcp tcpfin udp

Keepalived "裂脑"问题

1、什么是裂脑?

由于某些原因,导致两台高可用服务器对在指定时间内无法检测到对方的心跳消息,各自取得资源及服务的所有权
而此时的两台高可用服务器都还活着并在正常运行,这样就会导致同一个IP 或服务在两端同时存在而发生冲突
最严重的是两台主机占用同一个 VIP 地址,当用户写入数据时可能会分别写入到两端
这可能会导致服务器两端的数据不一致或造成数据丢失,这种情况就被称为裂脑

2、裂脑发生的原因

1.高可用服务器之间心跳线链路故障,导致无法正常通信。
2.高可用服务器上开启了防火墙阻挡了心跳消息传输。
3.高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。
4.其他服务配置不当等原因,如 virtual_router_id 不一致、心跳方式不同、心跳广播冲突、软件BUG等。

3、如何解决裂脑?

1.同时用两条心跳线路,这样一条线路坏了另一个还是好的,依然能传送心跳消息
2.当 Backup 节点接收不到心跳消息,就通过单独的线路发送关机命令关闭 Master 节点的电源
3.做好对裂脑的监控报警(如邮件及手机短信等或值班),在问题发生时人为第一时间介入仲裁,降低损失

4、检测裂脑故障的思路

1.简单判断的思想:只要 Backup 节点出现 VIP 就报警
  这个报警有两种情况,一是 Master 宕机了,Backup 接管了;二是 Master 没宕,裂脑了
  不管属于哪个情况都进行报警,然后由人工查看判断及解决
2.比较严谨的判断:Backup 出现对应 VIP,并且 Master 还存活,就说明发生裂脑了

LVS + Keepalived 实现高可用、负载均衡集群

1、案例描述

1.在基于 LVS + Keepalived 实现的 LVS 集群结构中,至少包括两台热备的负载调度器,至少两台节点服务器
2.本内容将以 DR 模式的 LVS 集群为基础,增加一台负载调度器,使用 keepalived 来实现主、从调度器的热备,
  从而构建兼有负载均衡、高可用两种能力的 LVS 网站集群系统。

2、案例架构图

说明:本案例并未安装如图所示配置服务器池的第二网卡及后端存储服务

在这里插入图片描述

3、案例环境
在这里插入图片描述

4、案例实施
4.1、Master Server操作

调整/proc响应参数
对于DR集群来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux内核的重定向参数响应。
# vim /etc/sysctl.conf						//关闭Linux内核的重定向参数
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens32.send_redirects = 0		//此接口地址为lvs服务器正在使用的物理接口
# sysctl -p									//重载
安装并配置keepalived
# yum install -y keepalived ipvsadm			//安装keepalived 和 ipvsadm
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak		//备份主配置文件
# rm -rf /etc/keepalived/keepalived.conf		//删除主配置文件,因为keepalived的配置文件比较简单,所以我们直接新建一个自己写入

# vim /etc/keepalived/keepalived.conf
//全局配置区域
global_defs {
   notification_email {
     123456@chengdu.vip			//接收者邮箱
   }
   notification_email_from 654321@chengdu.vip		//发送者邮箱
   smtp_server 192.168.200.1						//邮件服务器IP
   smtp_connect_timeout 30							//邮件服务连接超时时间
   router_id chengdu			
}

//VRRP实例区域
vrrp_instance VI_1 {
    state MASTER									//角色为主调度服务器
    interface ens32									//和集群中其他主机通信的网卡
    virtual_router_id 51							//虚拟路由器的ID号(主、备应该一致)
    priority 100									//优先级(主应高于备)
    advert_int 1									//心跳检查时间
    authentication {								//主备通信的权限验证(确定主备属于同一热备组)
        auth_type PASS
        auth_pass 5525
    }
    virtual_ipaddress {								//VIP地址(客户端访问的地址)
        61.139.2.1/29 dev ens32 label ens32:0
    }
}

//服务器池区域
virtual_server 61.139.2.1 80 {
    delay_loop 6									//健康检查时间间隔(调度器与节点服务器)
    lb_algo wrr										//lvs调度算法(rr、wrr、lc、wlc)
    lb_kind DR										//负载均衡转发模式(NAT、TUN、DR)
#    persistence_timeout 50
    protocol TCP									//使用的协议
    real_server 61.139.2.4 80 {			//第一个节点服务器
        weight 1
        inhibit_on_failure
        TCP_CHECK {
                connect_timeout 3
                   nb_get_retry 3
                 delay_before_retry 3
                  connect_port 80
          }
        }
    real_server 61.139.2.5 80 {			//第二个节点服务器
        weight 1
        inhibit_on_failure
        TCP_CHECK {
                connect_timeout 3
                   nb_get_retry 3
                 delay_before_retry 3
                  connect_port 80
          }
        }
}

# systemctl restart keepalived				//重启服务
# ipvsadm -ln						//通过ipvsadm管理工具查看通过配置文件配置的虚拟服务器和节点服务器是否有效
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  61.139.2.1:80 wrr
  -> 61.139.2.4:80                Route   0      0          0         
  -> 61.139.2.5:80                Route   0      0          0 
  
此时由于节点服务器还未配置httpd服务,开放80端口,因此两台节点服务器中的权重都被设置了为0
后续过程中当把节点服务器http服务配置完成并监听80端口后,再次查看此权重,应该为keepalived.conf配置文件做所设置的1

在此时如果将keepalived.conf配置文件中节点服务器的“inhibit_on_failure”选项删除后,
再次通过“ipvsadm -ln”命令将无法查看到节点服务器信息,因为节点服务器被移除了服务列队
即便是这样,在后续配置中将所有节点服务器都配置完成后,再次观察Master服务器的节点服务器状态,可以发现是能够查看到的

4.2、Backup Server操作

调整/proc响应参数
对于DR集群来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux内核的重定向参数响应。
# vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens32.send_redirects = 0		//此接口地址为lvs服务器正在使用的物理接口
# sysctl -p
安装并配置keepalived
# yum install -y keepalived ipvsadm
# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# rm -rf /etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     123456@chengdu.vip
   }
   notification_email_from 654321@chengdu.vip
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id shanghai
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens32
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 5525
    }
    virtual_ipaddress {
        61.139.2.1/29 dev ens32 label ens32:0
    }
}
virtual_server 61.139.2.1 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
#    persistence_timeout 50
    protocol TCP
    real_server 61.139.2.4 80 {					//第一个节点服务器
        weight 1
        inhibit_on_failure
        TCP_CHECK {
                connect_timeout 3
                   nb_get_retry 3
                 delay_before_retry 3
                  connect_port 80
          }
        }
    real_server 61.139.2.5 80 {					//第二个节点服务器
        weight 1
        inhibit_on_failure
        TCP_CHECK {
                connect_timeout 3
                   nb_get_retry 3
                 delay_before_retry 3
                  connect_port 80
          }
        }
}
# systemctl restart keepalived				//重启服务
# ipvsadm -ln						//通过ipvsadm管理工具查看通过配置文件配置的虚拟服务器和节点服务器是否有效
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  61.139.2.1:80 wrr
  -> 61.139.2.4:80                Route   1      0          0         
  -> 61.139.2.5:80                Route   0      0          0

4.3、两台Web Server配置

1.相关说明
	1.1.用DR模式时,节点服务器也需要配置VIP地址,并调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突
	1.2.节点服务器配置VIP地址仅用作发送Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)
		因此使用虚接口lo:0来承受VIP地址,并为本机添加一条路由记录,将访问VIP地的数据限制在本地,避免通信紊乱
2.Web Server_1配置
设置VIP地址:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0		//只修改以下三部分内容即可
DEVICE=lo:0
IPADDR=61.139.2.1
NETMASK=255.255.255.255
# ifup lo:0
# ifconfig lo:0
添加路由
# /sbin/route add -host 61.139.2.1 dev lo:0
# vim /etc/profile
/sbin/route add -host 61.139.2.1 dev lo:0

调整/proc相应参数
# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce =2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
# sysctl -p

安装配置提供给客户端的应用服务程序
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "LVS+keepalived高可用负载均衡集群之Web Server_1" > /var/www/html/index.html

3.Web Server_2配置
设置VIP地址:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0		//只修改以下三部分内容即可
DEVICE=lo:0
IPADDR=61.139.2.1
NETMASK=255.255.255.255
# ifup lo:0
# ifconfig lo:0
添加路由
# /sbin/route add -host 61.139.2.1 dev lo:0
# vim /etc/profile
/sbin/route add -host 61.139.2.1 dev lo:0

调整/proc相应参数
# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce =2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
# sysctl -p

安装配置提供给客户端的应用服务程序
# yum install -y httpd
# systemctl enable httpd
# systemctl start httpd
# mkdir -p /var/www/html/
# echo "LVS+keepalived高可用负载均衡集群之Web Server_2" > /var/www/html/index.html

4.4、验证测试

1.在配置完成后,两台调度器都开启了keepalived,而且61.139.2.2的优先级更高,因此它应该为Master
通过 # tail -50 /var/log/messages 查看系统日志,或 ifconfig 命令查看 VIP 地址,能够验证
此时客户端通过浏览器访问 VIP 地址 61.139.2.1,能够访问到多台节点服务器的网页内容

2.停用 Master 的 keepalived 服务
# systemctl stop keepalived
在 Backup 服务器查看日志,可以看到当前服务器已经角色为Master
#  tail -20 /var/log/messages
VRRP_Instance(VI_1) Transition to MASTER STATE
VRRP_Instance(VI_1) Entering MASTER STATE
此时客户机再次访问VIP地址 61.139.2.1,依然能够像之前那样访问到多台节点服务器的网页内容
也就是说一台调度器出现了故障,并未影响客户正常访问

3.两台的keepalived服务都停掉
# systemctl stop keepalived
此时集群中的两台服务器都无法实现为客户提供服务,因此客户端无法获取到任何节点服务器数据
也就是说客户端访问 VIP 地址时,无法获取到正常的网页内容

4.重新打开 Master 的 keepalived 服务
# systemctl start keepalived
查看日志,发现当前服务器成为了Master
# tail -20 /var/log/messages
VRRP_Instance(VI_1) Transition to MASTER STATE
VRRP_Instance(VI_1) Entering MASTER STATE
客户机再次访问 61.139.2.1,又重新能够像之前那样访问到多台节点服务器的网页内容
此时 LVS + Keepalived 高可用负载均衡集群验证到此结束

Jumpserver堡垒机安装部署

1、访问官网 - 点击免费下载

Jms官网地址:https://www.jumpserver.org/

在这里插入图片描述
2、快速在线安装

1.前提条件:
	准备一台 4核8G (最低)且可以访问互联网的 64 位 Linux 主机
	以 root 用户执行如下命令一键安装 JumpServer
2.输入命令:
curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash

3、安装完成

1. 可以使用如下命令启动, 然后访问
cd /opt/jumpserver-installer-v3.2.1
./jmsctl.sh start

2. 其它一些管理命令
./jmsctl.sh stop
./jmsctl.sh restart
./jmsctl.sh backup
./jmsctl.sh upgrade
更多还有一些命令, 你可以 ./jmsctl.sh --help 来了解

3. Web 访问
http://192.168.1.101:80
默认用户: admin  默认密码: admin

4. SSH/SFTP 访问
ssh -p2222 admin@192.168.1.101
sftp -P2222 admin@192.168.1.101

5. 更多信息
我们的官网: https://www.jumpserver.org/
我们的文档: https://docs.jumpserver.org/

在这里插入图片描述

Zabbix安装部署

Zabbix监控平台Server部署

1、访问官网,根据实际选择Zabbix服务器的平台

这里我在CentOS 7上部署Zabbix监控平台,选择的是Zabbix 5.0 LTS版,并选择MySQL数据库,Web服务选择用Apache

在这里插入图片描述
2、页面下拉,根据官网文档进行安装

# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all

# yum install zabbix-server-mysql zabbix-agent

//执行这条命令之前需要确认配置了aliyun源才行
# yum install centos-release-scl

# vim /etc/yum.repos.d/zabbix.repo
[zabbix-frontend]
...
enabled=1
...

# yum install zabbix-web-mysql-scl zabbix-apache-conf-scl

# yum install -y mysql mariadb-server

# systemctl start mariadb
# systemctl enable mariadb

# mysql -uroot -p
//初始密码为空,直接回车
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'password';		//操纵zabbix数据的用户zabbix的密码为"password"
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
password

# mysql -uroot -p
//初始密码为空,直接回车
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;

# vim /etc/zabbix/zabbix_server.conf
DBPassword=password			//设置数据库zabbix的密码为"password"

# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
; php_value[date.timezone] = Europe/Riga	//修改时区为Asia/Shanghai,并去掉前面的;# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm

在这里插入图片描述
在这里插入图片描述

3、Web浏览器访问zabbix服务器安装页面

1.url栏输入:192.168.1.100/zabbix 进行初始化安装配置		//这里1.100是zabbix服务器的IP	

2.登录账号、密码默认为:Admin、zabbix

3.设置监控平台为中文并解决乱码问题
# cd /usr/share/fonts			//rz上传 simkai.ttf 楷体字体到此处
# chmod 777 simkai.ttf 
# rm -rf /etc/alternatives/zabbix-web-font 			//删除原有字体
链接新上传的楷体字体:
# ln -s /usr/share/fonts/simkai.ttf /etc/alternatives/zabbix-web-font

在这里插入图片描述

Zabbix监控Linux主机

1、访问官网下载RPM格式的zabbix-agent包

1.访问:http://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/

2.选择zabbix-agent的版本然后下载,这里我选择 zabbix-agent-5.0.10-1.el7.x86_64.rpm 

在这里插入图片描述

2、在被监控的Linux主机上安装配置zabbix-agent

1.rz上传zabbix-agent-5.0.10-1.el7.x86_64.rpm 
# rpm -ivh zabbix-agent-5.0.10-1.el7.x86_64.rpm

2.修改agent配置文件,实现连接zabbix服务器
# cp /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.bak
# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.100				//被监控端等待该监控服务器请求监控数据
ServerActive=192.168.1.100			//被监控端主动提交数据到此服务器
Hostname=ch4ser_linux				//zabbix web中添加该主机时名称应该和此值一致

3.启动zabbix-agent并设为开机自启
# systemctl start zabbix-agent
# systemctl enable zabbix-agent
# netstat -anpt | grep agent		//10050端口处于监听状态

3、Zabbix Web管理界面添加 Linux 主机对其进行监控
配置 - 主机 - 右上角创建主机
在这里插入图片描述

选择模板 Template OS Linux by Zabbix agent(我这里选择被动模式)
在这里插入图片描述

在 监测 - 主机 中查看
在这里插入图片描述

Zabbix监控Windows主机

1、访问官网下载zip格式的zabbix-agent
在这里插入图片描述

2、将zabbix-agent传到windows主机进行安装配置

1.将zip格式的zabbix-agent解压(这里我解压到C盘下)
  解压后将 conf 目录下的主配置文件 zabbix_agentd.conf 复制一份到 bin 目录里

2.修改主配置文件 zabbix_agentd.conf(用写字板打开)
Server=192.168.1.100				//被监控端等待该监控服务器请求监控数据
ServerActive=192.168.1.100			//被监控端主动提交数据到此服务器
Hostname=ch4ser_linux				//zabbix web中添加该主机时名称应该和此值一致

3.在 C:\zabbix_agent-5.0.10-windows-amd64\bin 目录下,以管理员身份运行cmd
# zabbix_agentd.exe -c zabbix_agentd.conf -i
zabbix_agentd.exe [3952]: service [Zabbix Agent] installed successfully
zabbix_agentd.exe [3952]: event source [Zabbix Agent] installed successfully

# zabbix_agentd.exe -c zabbix_agentd.conf -s
zabbix_agentd.exe [3640]: service [Zabbix Agent] started successfully

-c		指定配置文件		-i		安装		-s		启动
-x		停止			-d		卸载

4.安装完成后,在Windows的服务(services.msc)中能够看到agent正在运行

3、Zabbix Web管理页面添加Windows主机对其进行监控
默认没有Windows servers群组,在 配置 - 主机群组 - 右上角创建主机群组 Windows servers
在这里插入图片描述

配置 - 主机 - 右上角创建主机
在这里插入图片描述

选择模板 Template OS Windows by Zabbix agent(我这里选择被动模式)
在这里插入图片描述

在 监测 - 主机 中查看
在这里插入图片描述

Zabbix新建监控项、触发器并实现报警

1、配置 - 主机 - 点击监控项 - 右上角新建监控项
在这里插入图片描述

这里我配置一个http服务运行情况监控项,关键是选择了已有键值net_tcp_listen[80]来监听http的80端口,以此判断http服务是否存活
在这里插入图片描述

2、配置 - 主机 - 点击触发器 - 右上角新建触发器
在这里插入图片描述

配置一个http服务运行情况的触发器,用于当服务挂掉的时候触发报警
在这里插入图片描述

表达式配置如下
在这里插入图片描述

3、在监测 - 仪表盘中查看报警信息
在这里插入图片描述

Zabbix自定义监控项、触发器并实现报警

1、修改 zabbix-agent 配置文件,创建自定义键值
这里我配置一个检测80端口连接数量的监控项

# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=80_conn_count,netstat -anpt | grep "192.168.1.101:80" | wc -l			
//语法是 UserParameter=(变量名),值(变量信息)
//这里意思是创建了自定义键值80_conn_count,后面的命令用以实现检测80端口的连接数量

//重启zabbix-agent服务
# systemctl restart zabbix-agent

2、在 zabbix-server 安装 zabbix-get 工具检测自定义监控信息是否正确

# yum install -y zabbix-get
# zabbix_get -s 192.168.1.101 -k '80_conn_count'
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
//这里报错是因为普通用户 zabbix 权限不足,不能执行 netstat命令

//解决办法:在被监控端使用root用户执行如下命令,让其它用户获得文件所有者权限
# chmod +s /bin/netstat

//重新验证,显示有2个连接,成功
# zabbix_get -s 192.168.1.101 -k '80_conn_count'
2

3、在 zabbix-server 的web页面进行配置
创建自定义监控项(键值需要填写 zabbix-agent 配置文件中定义的)
在这里插入图片描述

测试监控项
在这里插入图片描述

创建自定义触发器(表达式根据前面创建的监控项来配置)
在这里插入图片描述

表达式具体配置
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值