什么是集群?
一组通过高速网络互联的计算组,并以单一系统的模式加以管理,将很多服务器集中在一起,提供同一种服务,在客户端看起来就像是只有一个服务器。任务调度是集群系统中的技术核心。
集群的目的:
提高性能:如计算密集型应用,如:天气预报、核试验模拟
降低成本:相对百万美元级的超级计算机,价格便宜
提高可扩展性:只要增加集群节点即可
增强可靠性:多个节点完成相同功能,避免单点失败
集群分类:
HPC:高性能计算集群,解决复杂的科学问题
LB:负载均衡集群,客户端负载在计算机集群中尽可能的平均分摊
HA:高可用集群,避免单点故障,当一个系统发生故障时,可以快速迁移
LVS概述
LVS项目介绍:
Linux 虚拟服务器(LVS)是章文嵩在国防科技大学就读博士期间创建的
LVS可以实现高可用的、可伸缩的Web、Mail、Cache和Media等网络服务
最终目标是利用Linux操作系统和LVS集群软件实现一个高可用、高性能、低成本的服务器应用集群
LVS集群组成
前端:负载均衡层,由一台或多台负载调度器构成
中间:服务器群组层,由一组实际运行应用服务的服务器组成
底端:数据共享存储层,提供共享存储空间的存储区域
LVS术语:
Director Server:调度服务器 【lvs】
将负载分发到Real Server的服务器
Real Server:真实服务器 【web】
真正提供应用服务的服务器
VIP:虚拟IP地址
公布给用户访问的虚拟IP地址
RIP:真实IP地址
集群节点上使用的IP地址
DIP:调度器连接节点服务器的IP地址
LVS工作模式
VS/NAT:
通过网络地址转换实现的虚拟服务器
大并发访问时,调度器的性能成为瓶颈
VS/DR:
直接使用路由技术实现虚拟服务器
节点服务器需要配置VIP,注意MAC地址广播
VS/TUN:
通过隧道方式实现虚拟服务器
负载均衡调度算法:
LVS目前实现了10种调度算法
常用调度算法有4种
轮询(Round Robin):将客户端请求平均分发到Real Server
加权轮询(Weighted Round Robin):根据Real Server权重值进行轮询调度
最少连接(Least Connections):选择连接数最少的服务器
加权最少连接( Weighted Least Connections ):根据Real Server权重值,选择连接数最少的服务器
源地址散列(Source Hashing):根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器
其他调度算法:基于局部性的最少链接
带复制的基于局部性最少链接
目标地址散列(Destination Hashing)
最短的期望的延迟
最少队列调度
准备LAMP分离环境
一,准备四台虚拟机,全新的,免密登录
vh05.tedu.cn 192.168.4.5 mysql
vh06.tedu.cn 192.168.4.6 web
vh07.tedu.cn 192.168.4.7 web
vh08.tedu.cn 192.168.4.8 lvs
二,安装web服务器
1.在vh06/vh07上安装软件包
[root@vh06 ~]# yum -y install httpd php php-mysql
[root@vh06 ~]# systemctl restart httpd
[root@vh06 ~]# systemctl enable httpd
三,配置数据库服务器,在vh05上
[root@vh05 ~]# yum -y install mariadb-server
[root@vh05 ~]# systemctl restart mariadb
[root@vh05 ~]# systemctl enable mariadb
[root@vh05 ~]# mysql
MariaDB [(none)]> grant all on *.* to 'admin'@"%" identified by "tedu.cn";
四,在vh06上安装Discuz
[root@room9pc01 ~]# scp -r 888888/项目/Discuz_X3.3_SC_UTF8.zip 192.168.4.6:/root
[root@vh06 ~]# unzip Discuz_X3.3_SC_UTF8.zip
[root@vh06 ~]# cp -r upload/ /var/www/html/bbs
[root@vh06 ~]# chown -R apache.apache /var/www/html/bbs
[root@room9pc01 ~]# firefox http://192.168.4.6/bbs &
同意---->下一步----> 数据库服务器:192.168.4.5---->数据库用户名: admin----->数据库密码:tedu.cn
管理员账号:admin--->密码随便(论坛帐号)--->下一步
登录时,输入的是论坛的密码
管理中心:输入的是授权的密码
模块管理中心:输入的是论坛帐号密码---->论坛
[root@vh05 ~]# mysql
MariaDB [(none)]> use ultrax
MariaDB [ultrax]> show tables;
MariaDB [ultrax]> desc pre_common_member;
MariaDB [ultrax]> select username,email from pre_common_member;
+----------+------------------+
| username | email |
+----------+------------------+
| admin | admin@admin.com |
| haha | 123456789@qq.com |
+----------+------------------+
MariaDB [ultrax]> desc pre_forum_post;
MariaDB [ultrax]> select author,subject,message from pre_forum_post;
+--------+----------------+--------------------+
| author | subject | message |
+--------+----------------+--------------------+
| admin | hfdbvgewtkhtrj | wml/hahah/zuimei
|
+--------+----------------+--------------------+
ipvsadm用法:
-Ln 查看命令
-A 添加虚拟服务器
-t tcp协议,设置群集地址
-s 指定负载调度算法
添加、删除服务器节点:
-a 添加真实服务器
-d 删除真实服务器
-r 指定真实服务器(Real Server)的地址
-m 使用NAT模式;-g、-i分别对应DR、TUN模式
-w 为节点服务器设置权重,默认为1
配置LVS-NAT模式
1.在vh08上安装
[root@vh08 ~]# yum -y install ipvsadm
2、在vh06和vh07 web服务器上把网关指向192.168.4.8
# nmtui 添加网关
# ifdown eth0; ifup eth0
【[root@vh06 html]# nmcli connection modify eth0 ipv4.method manual ipv4.gateway 192.168.4.8 connection.autoconnect yes】
3、在vh08的eth2上配置额外的地址201.1.1.8/24
[root@vh08 ~]# nmtui
[root@vh08 ~]# systemctl restart NetworkManager
【[root@vh08 ~]# nmcli connection add con-name eth2 ifname eth2 type ethernet
[root@vh08 ~]# nmcli connection modify eth2 ipv4.method manual ipv4.addresses 201.1.1.8/24 connection.autoconnect yes
[root@vh08 ~]# nmcli connection up eth2
】
4、打开vh08的路由转发功能(RHEL7默认已打开,以前版本需要做以下配置)
[root@vh08 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@vh08 ~]# sysctl -p
net.ipv4.ip_forward = 1 让内核参数生效
[root@vh08 ~]# sysctl -a 查看所有的内核参数
5.在vh06和vh07上做一个网页
[root@vh06 html]# vim index.html
<html><h1><<font color=red>我想和你一起吃火锅</font></h1></html>
[root@vh06 html]# systemctl restart httpd
[root@vh07 html]# vim index.html
<html><h1><font color=yellow>你是屎吗?×××的!</font></h1></html>
[root@vh07 html]# systemctl restart httpd
6、lvs集群配置
(1)创建虚拟服务器,使用tcp的80端口,调度算法是rr
[root@vh08 ~]# ipvsadm -A -t 201.1.1.8:80 -s rr 不加-s选项默认是wlc
(2)向VIP中加入RIP
[root@vh08 ~]# ipvsadm -a -t 201.1.1.8:80 -r 192.168.4.6 -m -w 2
[root@vh08 ~]# ipvsadm -a -t 201.1.1.8:80 -r 192.168.4.7 -m
7、验证
[root@vh08 ~]# ipvsadm -Ln
[root@room8pc16 ~]# firefox http://201.1.1.8/bbs
刷新页面时,按ctrl+f5重新连接服务器
修改调度算法为WRR
[root@vh08 ~]# ipvsadm -E -t 201.1.1.8:80 -s wrr
[root@vh08 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 201.1.1.8:80 wrr
-> 192.168.4.6:80 Masq 2 0 1
-> 192.168.4.7:80 Masq 1 0 1
从规则中移除real server
[root@vh08 ~]# ipvsadm -d -t 201.1.1.8:80 -r 192.168.4.6
[root@vh08 ~]# vim 1.sh
#!/bin/bash
RIP1=192.168.4.2
RIP2=192.168.4.3
VIP=201.1.1.4:80
while [ 1 ]
do
for IP in $RIP1 $RIP2
do
curl -I http://${IP} &> /dev/null
web_state=$?
ipvsadm -Ln | grep ${IP} &> /dev/null
ip_in_lvs=$?
if
[ $web_state -ne 0 -a $ip_in_lvs -eq 0 ]
then
ipvsadm -d -t $VIP -r $IP
elif
[ $web_state -eq 0 -a $ip_in_lvs -ne 0 ]
then
ipvsadm -a -t $VIP -r $IP -m
fi
done
sleep 3
done
[root@vh08 ~]# sh 1.sh &
[root@vh06 html]# systemctl stop httpd
[root@vh08 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 201.1.1.4:80 rr
-> 192.168.4.3:80 Masq 1 0 0
[root@vh06 html]# systemctl restart httpd
[root@vh08 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 201.1.1.4:80 rr
-> 192.168.4.2:80 Masq 1 0 0
-> 192.168.4.3:80 Masq 1 0 0
lvs起动状态管理
[root@vh08 ~]# systemctl stop ipvsadm
[root@vh08 ~]# systemctl restart ipvsadm 重起失败,提示执行journalctl -xe,报错日志是/etc/sysconfig/ipvsadm文件不存在,所以要创建它
查看状态
[root@vh08 ~]# systemctl status ipvsadm 会检查出没有/etc/sysconfig/ipvsadm文件
[root@vh08 ~]# touch /etc/sysconfig/ipvsadm 创建文件
[root@vh08 ~]# ipvsadm -A -t 201.1.1.4:80 -s rr
[root@vh08 ~]# ipvsadm -a -t 201.1.1.4:80 -r 192.168.4.2 -m -w 2
[root@vh08 ~]# ipvsadm -a -t 201.1.1.4:80 -r 192.168.4.3 -m
[root@vh08 ~]# ipvsadm -Ln
[root@vh08 ~]# systemctl restart ipvsadm
[root@vh08 bin]# systemctl enable ipvsadm
[root@vh08 ~]# cat /etc/sysconfig/ipvsadm
-A -t 201.1.1.4:80 -s rr
-a -t 201.1.1.4:80 -r 192.168.4.2:80 -m -w 2
-a -t 201.1.1.4:80 -r 192.168.4.3:80 -m -w 1
配置LVS-DR模式
一、清理LVS-NAT的配置
1、删除lvs规则
[root@vh08 bin]# ipvsadm -D -t 201.1.1.8:80
2、删除eth2的地址
[root@vh08 bin]# nmtui 删除地址,将地址获取改为自动
[root@vh08 bin]# ifdown eth2
【[root@vh08 ~]# nmcli connection delete eth2】
二、配置VIP
1、调度器上配置在vh08的eth0上
[root@vh08 bin]# cd /etc/sysconfig/network-scripts/
[root@vh08 bin]# cd /etc/sysconfig/network-scripts/
[root@vh08 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0
[root@vh08 network-scripts]# vim ifcfg-eth0:0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.4.100
PREFIX=24
[root@vh08 network-scripts]# ifup eth0:0
2、把VIP配置在vh06和vh07两台real server的lo
[root@vh06 html]# cd /etc/sysconfig/network-scripts/
[root@vh06 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@vh06 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.100
NETMASK=255.255.255.255 如果写成了255.255.255.0将导致该网段其他主机不管理配置192.168.4.0/24网段的哪个地址,都会出现地址冲突
NETWORK=192.168.4.100
BROADCAST=192.168.4.100
ONBOOT=yes
NAME=lo:0
[root@vh06 network-scripts]# ifup lo:0
三、在WEB服务器上修改内核参数
三台主机都有VIP192.168.4.100。当请求发送过来时,应该是调度器接收请求, real server不要接收。为了实现这个功能,需要修改real server的内核参数。
[root@vh06 ~]# sysctl -a | grep arp_ig
[root@vh06 ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
[root@vh06 ~]# echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
[root@vh06 ~]# sysctl -a | grep arp_ann
[root@vh06 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
[root@vh06 ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
[root@vh06 ~]# sysctl -p 应用内核参数
四、配置LVS DR规则
[root@vh08 network-scripts]# ipvsadm -A -t 192.168.4.100:80
[root@vh08 network-scripts]# ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.6 -g
[root@vh08 network-scripts]# ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.7
验证:
[root@room9pc01 ~]# firefox 192.168.4.100
[root@room9pc01 ~]# curl http://192.168.4.100
<html><h1><font color=red>我想和你一起吃火锅</font></h1></html>
[root@room9pc01 ~]# curl http://192.168.4.100
<html><h1><font color=yellow>你是屎吗?×××的!</font></h1></html>
[root@room9pc01 ~]# curl http://192.168.4.100
<html><h1><font color=red>我想和你一起吃火锅</font></h1></html>
[root@vh08 network-scripts]# 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.4.100:80 wlc
-> 192.168.4.6:80 Route 1 0 10
-> 192.168.4.7:80 Route 1 0 11