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 配置高可用性集群的主要内容,如果未能解决你的问题,请参考以下文章

nginx+keepalive 实现高可用负载均衡方案

keepalived入门之keepalive+nginx实例部署

nginx + keepalive

keepalive笔记之二:keepalive+nginx(自定义脚本实现,上述例子也可以实现)

keepalive高可用nginx(nginx动静分离)的实现

nginx +keepalive +tomcat