redhat7.2 nginx+keepalived 配置高可用性集群
Posted 脱缰的野马!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redhat7.2 nginx+keepalived 配置高可用性集群相关的知识,希望对你有一定的参考价值。
这两天一直在研究高并发场景下的业务,于是就想自己动手配置一个keepalived集群。
keepalived简介:
keepalived为负载均衡提供的高可用的框架。
什么是负载均衡?可以看看这篇文章:https://zhuanlan.zhihu.com/p/32841479https://zhuanlan.zhihu.com/p/32841479。*****其实说白了就是:单个服务器在请求量较大的时候会降低服务器性能,比如访问服务器的速度会变慢。举个栗子:比如有一台服务器A,A上部署了mysql服务器提供数据持久化服务,还部署了redis提供高速缓存服务,以及请求处理服务器,在大型项目里可能还需要session服务器等待,但是,如果把这么多的服务都部署到一个服务器A上,会不会带来问题?答案是可定的,如果把所有的服务都部署到A上,就会增大A的压力,一旦请求量增大,就会增加访问A的延迟,甚至直接宕机,那有没有解决方案呢?这时候就要用到均衡负载了,顾名思义就是把A服务器的压力分摊到其他服务器,比如,在增加两台服务器B,C,A服务器负责分发请求和提供mysql服务,B作为redis高速缓存服务器,C作为session服务器,这样一来就可把原来A的压力分发到BC服务器上了。
言归正传,开始配置nginx和keepalived。
redhat7-master
#首先,下载Nginx:
cd /home/software
wget http://nginx.org/download/nginx-1.6.3.tar.gz
#解压:tar -zxvf nginx-1.6.3.tar.gz
cd nginx-1.6.3
#创建安装目录
mkdir -p /home/yveshe/nginx
#指定编译路径
#如果缺少依赖执行:
#yum install pcre pcre-devel zlib zlib-devel -y
./configure --prefix=/home/yveshe/nginx
#安装
make && make install
#配置index主页,添加主节点标记
vim /home/yveshe/nginx/html/index.html
#添加<h1>This is master node</h1>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<h1>This is master node</h1>
<p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
#启动
/home/yveshe/nginx/sbin/nginx
#检测是否安装成功
#访问127.0.0.1:80(默认运行端口)
切换到redhat-slave
按照相同的步骤配置slave节点:
配置keepalived 主节点
#下载keepalived
cd /home/software
wget http://www.keepalived.org/software/keepalived-1.4.4.tar.gz
#创建安装目录
mkdir -p /home/yveshe/keepalived
#下载ipvsadm
yum install ipvsadm
#解压
tar -zxvf keepalived-1.4.4.tar.gz
#指定安装路径
cd keepalived-1.4.4
./configure --prefix=/home/yveshe/keepalived
#编译安装
make && make install
#查看ip地址
ifconfig
#我的ip地址是192.168.152.159
#复制配置文件到/etc/keepalived(服务启动是会在这里加载配置文件,默认没有这个目录需要自己创建)
cp /home/yveshe/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
#先注释掉 global_defs里的vrrp_strict,这里非常重要否则后续无法访问v_ipaddress
! Configuration File for keepalived
#global_defs注释掉vrrp_strict即可
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #主节点声明
interface eno16777736 #本地虚拟网络地址,ipconfig命令查看
virtual_router_id 51 #主从节点保持一致
priority 100 #指定优先级,主节点大于从节点
advert_int 1 #组播信息发送间隔,两个节点设置必须一样
authentication { #设置认证信息,两个节点必须一致
auth_type PASS
auth_pass 1111
}
mcast_src_ip 192.168.152.159 #本地ip地址
virtual_ipaddress {
192.168.152.18 #虚拟ip地址,需要和本地网段一样,并且主从节点一致
}
}
#后边的内容全部注释
配置keepalived 从节点
#先注释掉 global_defs里的vrrp_strict,这里非常重要否则后续无法访问v_ipaddress
! Configuration File for keepalived
#global_defs注释掉vrrp_strict即可
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP #从节点声明
interface eno16777736 #本地虚拟网络地址,ipconfig命令查看
virtual_router_id 51 #主从节点保持一致
priority 90 #小于主节点的100
advert_int 1 #组播信息发送间隔,两个节点设置必须一样
authentication { #设置认证信息,两个节点必须一致
auth_type PASS
auth_pass 1111
}
mcast_src_ip 192.168.152.158 #本地ip地址
virtual_ipaddress {
192.168.152.18 #虚拟ip地址,需要和本地网段一样,并且主从节点一致
}
}
#后边的内容全部注释
测试
我们在windows 系统里去访问两个节点,所以两台虚拟机都要关闭防火墙
systemctl stop firewalld.service
当访问主节点192.168.152.159时
访问从节点192.168.152.158时:
访问虚拟路由 192.168.152.18时,其实是访问的主节点:
模拟主节点断开时(其实是访问从节点)
systemctl stop keepalived.service
以上是关于redhat7.2 nginx+keepalived 配置高可用性集群的主要内容,如果未能解决你的问题,请参考以下文章
keepalived入门之keepalive+nginx实例部署
keepalive笔记之二:keepalive+nginx(自定义脚本实现,上述例子也可以实现)