keepalived+nginx负载均衡高可用集群
- 1. 什么是集群
- 2. 集群的架构作用以及特点:
- 3. 集群主要分成三大类:
- 4. 集群图解
- 5.环境说明:
-
- 5.1 首先关闭防火墙和selinux
- 5.2 挂载镜像
- 5.3 源码安装nginx软件的依赖
- 5.4 解压nginx源码包,可以去nginx官网下载源码包(www.nginx.org),解压完之后会生成一个目录,我么进入这个目录
- 5.5 进入目录之后再对其进行编译
- 5.6 安装nginx
- 5.7 在两台web主机上修改nginx的文件
- 5.8 修改完之后启动nginx服务
- 5.9 修改nginx的配置文件
- 5.10 下面模拟代理出现故障,通过keepalived实现将IP自动切换到另一台代理服务器上.在两台代理端上都安装keepalived.
- 5.11 输入VIP地址之后就能看到下面的界面了
- 5.12 验证keepalived会不会实现自动切换
- 5.13 会出现以下界面
1. 什么是集群
- 就是一组计算机,它们作为一个整体向用户提供一组网络资源,这些单个的计算机系统就是集群的节点.
- 简单来说就是将单个计算机组合起来成为一个整体对外提供服务,就称之为集群.
2. 集群的架构作用以及特点:
- 可扩展性:集群的性能不限于单一的服务实体,新的服务实体可以动态的加入到集群,从而增加集群的性能.
- 高可用性: 当一台服务器出现故障时,这台服务器上所运行的程序将会被另一台服务器自动接管.
- 负载均衡: 将任务比较均匀的分布到集群环境中,可以有效的减少资源的浪费和过剩,提高数据吞吐量.
3. 集群主要分成三大类:
- HA: 高可用集群
- LBC: 负载均衡集群/负载均衡系统
- HPC: 科学计算集群/高性能计算集群
4. 集群图解
5.环境说明:
node1和node2为代理,node3和4提供网站服务
主机 | IP地址 |
---|---|
node1 | 192.168.182.137 |
node2 | 192.168.182.138 |
node3 | 192.168.182.139 |
node4 | 192.168.182.140 |
5.1 首先关闭防火墙和selinux
[root@node1 opt]# systemctl stop firewalld.service
[root@node1 opt]# systemctl disable firewalld.service
[root@node1 opt]# setenforce 0
[root@node1 opt]# getenforce 0
5.2 挂载镜像
先创建挂载点
[root@node1 opt]# mkdir /mnt/cdrom
将ISO镜像挂载到创建的目录下
[root@node1 opt]# mount /dev/sr0 /mnt/cdrom/
创建本地yum源
[root@node1 opt]# cat /etc/yum.repos.d/w.repo
[BaseOS]
name=BaseOS
baseurl=file:///mnt/cdrom/BaseOS
gpgcheck=0
enabled=1
[AppStream]
name=AppStream
baseurl=file:///mnt/cdrom/AppStream
gpgcheck=0
enabled=1
5.3 源码安装nginx软件的依赖
[root@node1 nginx-1.18.0]# yum -y install gcc pcre-devel openssl-devel zlib
5.4 解压nginx源码包,可以去nginx官网下载源码包(www.nginx.org),解压完之后会生成一个目录,我么进入这个目录
[root@node1 opt]# tar -zxf nginx-1.18.0.tar.gz
[root@node1 opt]# cd nginx-1.18.0
5.5 进入目录之后再对其进行编译
这里可以指定编译安装的路径,这里我们放在/opt/nginx目录下
[root@node1 nginx-1.18.0]# ./configure --prefix=/opt/nginx
5.6 安装nginx
安装也是在此目录下
[root@node1 nginx-1.18.0]# make && make install
以上步骤每一台机器上都要执行.
5.7 在两台web主机上修改nginx的文件
[root@node3 ~]# cat /opt/nginx/html/index.html
<marquee><font color=red><h1>web01<marquee>[root@node4 ~]# cat /opt/nginx/html/index.html
<marquee><font color=red><h1>web02<marquee>
5.8 修改完之后启动nginx服务
[root@node3 ~]# /opt/nginx/sbin/nginx
[root@node4 ~]# /opt/nginx/sbin/nginx
5.9 修改nginx的配置文件
在配置文件里面添加下面的内容
注意:这个两台代理端都需要做同样的配置,这样时为了防止137这个主机宕机时也还有第二个代理来提供服务,保证服务的正常运行.
#gzip on;34 upstream webserver { 35 server 192.168.182.139;36 server 192.168.182.140;37 }
// upstream的意思是定义集群,后面跟集群的名字;在下面写要的集群里的主机,一个server就代表着一个主机.集群定义完成之后,就要调用集群了.添加下面的内容用来定义集群
location / {47 proxy_pass http://webserver; //这里写要定义的集群名字.48 root html;
修改完之后,启动nginx服务去访问
[root@node1 ~]# vim /opt/nginx/conf/nginx.conf
[root@node2 ~]# vim /opt/nginx/conf/nginx.conf
// 访问到下面的页面说明成功,并且每刷新一次就会在两个web端不停的跳转.
- 说明:你去访问137这个代理主机,而出现的web页面是由web01,也就是139这个主机提供的.当你去访问137这个主机时,137这个代理主机就会将请求转给web01和web02这个两个主机,由这个来两个服务器来提供服务.
5.10 下面模拟代理出现故障,通过keepalived实现将IP自动切换到另一台代理服务器上.在两台代理端上都安装keepalived.
// keepalived实现故障的自动切换
// - keepalived通过VIP地址实现故障自动切换,这里的VIP地址一般为公网IP
[root@node1 nginx-1.18.0]# yum -y install keepalived
修改keepalived配置文件,注释掉 vrrp_strict这一行
1 ! Configuration File for keepalived2 3 global_defs {4 notification_email {5 acassen@firewall.loc6 failover@firewall.loc7 sysadmin@firewall.loc8 }
这几行的功能就是如果出现错误可以通过发邮件的方式告诉你10 smtp_server 192.168.200.111 smtp_connect_timeout 3012 router_id LVS_DEVEL13 vrrp_skip_check_adv_addr14 vrrp_strict15 vrrp_garp_interval 016 vrrp_gna_interval 017 }
这里是写发件人是谁主要修改下面的内容:
19 vrrp_instance VI_1 {20 state MASTER //这一行表示当前服务器的身份21 interface eth0 //这一行将这个eth0 改为本机的网卡名称,当出现故障时能自动切换这里我们改为ens160,两台都改22 virtual_router_id 5123 priority 100 //这时当前主机的优先级,需要修改主机上的优先级,这里的数字越大优先级越高.24 advert_int 1 //心跳检测,每隔几秒检测一次25 authentication { //这里主机间身份验证的方式,默认是用密码验证的方式26 auth_type PASS27 auth_pass 1111 //默认4个128 }29 virtual_ipaddress { //这里用来指定VIP地址30 192.168.200.16 //这里我们用私网IP来模拟,按需求进行增减.31 192.168.200.17 /32 192.168.200.1833 }34 }
将备用的代理服务器也就是138的state MASTER这一行的MASER改为BACKUP;MASER代表主的意思,BACKUP就是备用的意思.virtual_ipaddress {30 192.168.182.100/24 //代理端此处保持一致.
这两个台主机都要写一样的IP地址.修改之后启动服务
[root@node1 ~]# systemctl start keepalived.service
[root@node2 ~]# systemctl start keepalived.service
启动服务之后,我们发现在ens160这个网卡下多了一个IP,这个IP就是刚才我们在配置文件里面所指定的VIP地址
5.11 输入VIP地址之后就能看到下面的界面了
5.12 验证keepalived会不会实现自动切换
先关闭keepalived服务,再输入VIP地址192.168.182.100
[root@node1 ~]# systemctl stop keepalived.service
5.13 会出现以下界面
// 当代理端出现问题就使用VIP地址进行访问,当代理端恢复之后就使用代理的IP
// 当nginx代理出现问题时实现自动切换
将nginx和keepalived进行绑定,当nginx代理出现问题也能进行切换
我们这里写一个脚本来进行实现
[root@node1 ~]# vim /etc/keepalived/nginx.sh
#!/bin/bash
content=`ps -C nginx | grep -vc PID`
if [ $content -eq 0 ];then/opt/nginx/sbin/nginxsleep 5
content= `ps -C nginx | grep -vc PID`
elif [ $content -eq 0 ];thensystemctl stop keepalived.service
elseecho "nice"
fi
// 验证
先关闭nginx服务,给脚本执行权限并执行脚本验证.
[root@node1 ~]# /opt/nginx/sbin/nginx -s stop
[root@node1 ~]# chmod +x /etc/keepalived/nginx.sh
[root@node1 ~]# /etc/keepalived/nginx.sh
[root@node1 ~]# ps -C nginxPID TTY TIME CMD739623 ? 00:00:00 nginx739625 ? 00:00:00 nginx
nginx启动成功
// 让keepalived自动检测执行脚本
修改keepalived的配置文件,指定脚本路径,定义监控项,添加一下内容:
vrrp_script nginx { //这是keepalived提供定义脚本监控项的模块,nginx是监控项的名字,可随意.script "/etc/keepalived/nginx.sh" //这里是指定脚本的路径interval 2 //指定多久去检测脚本,这里是2秒
vrrp_instance VI_1 { //在此行上方添加调用监控项
track_script { //通过此参数来调用上面定义的监控项的名称.nginx
}virtual_ipaddress { //在此行上面添加