您的位置:首页 > 运维架构 > Nginx

单机架构升级集群架构--nginx+keepalived主从集群高可用搭建工作记

2017-07-05 00:00 1081 查看
摘要: 本文将继续单机架构升级集群系列博文, 记录nginx+keepalived主从高可用搭建工作的记录,希望能帮助到需要的朋友们,也欢迎大牛们批评指正

本文将继续单机架构升级集群系列博文, 记录nginx+keepalived主从高可用搭建工作的记录,希望能帮助到需要的朋友们,也欢迎大牛们批评指正!!

背景

在博文( https://my.oschina.net/u/2342969/blog/995598 )中描述了本次架构升级的背景

在博文( https://my.oschina.net/u/2342969/blog/1036702 )中记录了redis主从集群搭建

以上博文有需要的朋友们可以观阅

本文将记录nginx+keepalived主从集群高可用搭建工作, 在此参考了 博文(http://blog.csdn.net/u012453843/article/details/69668663?locationNum=2&fps=1)

概述

本段仅仅介绍一下基础概念,供小白参考..

keepalived:它是集群环境下保证高可用的一个服务软件。 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。 master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级选举一个backup当master。这样的话就可以保证路由器的高可用了。 总结之,主备环境共有一个虚拟ip(自定义ip),外部用户只需要访问这个虚拟ip,主节点挂掉后,虚拟ip就会漂移到选举出来的从节点上,对用户无感知的。更多资料自行百度一下或者发私信评论。

nginx:nginx详细信息可百度,本文只用nginx对tomcat做负载均衡使用。

环境准备

centOs:6.5

keepalived :1.2.18 (版本不同和本文就会有不同之处)

nginx : 1.5.8

虚拟ip: 192.168.1.110

资源准备

nginx下载地址:http://nginx.org/download/nginx-1.5.8.tar.gz

keepalived 下载地址:http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

环境搭建

nginx环境搭建

本文采用的一主一从集群模式

nginx_A 虚拟机ip:192.168.1.100

nginx_B 虚拟机ip:192.168.1.101

nginx安装

两台虚拟机安装步骤一样,

安装目录选择的 /opt/nginx (目录自定义)

一般我们都需要先装pcre, zlib(自行百度),前者为了重写rewrite,后者为了gzip压缩。

安装nginx前,编译环境gcc g++ 开发库之类的需要提前装好

yum -y install gcc automake autoconf libtool make

yum install gcc gcc-c++


进入nginx待安装目录

cd /opt


下载nginx

wget -c http://nginx.org/download/nginx-1.5.8.tar.gz[/code] 
解压安装包

tar zxvf nginx-1.5.8.tar.gz


进入nginx目录

cd nginx-1.5.8


安装nginx

./configure --prefix=/opt/nginx --with-pcre= pcre-8.36的安装路径

make && make install


启动nginx(前提是80端口未被占用)

/opt/nginx/sbin/nginx


浏览器输入IP地址



如图所示,访问成功。

修改nginx欢迎界面(%nginx_home%/html/index.html)

如下图两台虚拟机分别添加一行:

192.168.1.100: <p><em>This is nginx_A.</em></p>

192.168.1.101: <p><em>This is nginx_B.</em></p>



验证两台nginx均启动成功

如图:

192.168.1.100访问结果:



192.168.1.101访问结果:



nginx基本命令

启动: /opt/nginx/sbin/nginx

修改配置后重新加载: /opt/nginx/sbin/nginx -s reload

停止: kill -9 pid

keepalived环境搭建

需要高可用的nginx对应的虚拟机均需要安装keepalived服务,安装步骤一样

本文安装目录为: /opt/keepalived

keepalived VIP(虚拟ip): 192.168.1.110

keepalived安装

进入keepalived待安装目录

cd /opt


下载keepalived

wget -c http://www.keepalived.org/software/keepalived-1.2.18.tar.gz[/code] 
解压安装包

tar -zxvf keepalived-1.2.18.tar.gz


进入安装包

cd keepalived-1.2.18


编译安装包

./configure --prefix=/opt/keepalived


安装keepalived服务

make && make install

启动命令: /opt/keepalived/sbin/keepalived -f /opt/keepalived/etc/keepalived/keepalived.conf

keepalived做成系统服务

为了方便启停keepalived服务,做成系统服务自启动

复制启动文件

cp /opt/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
&&
cp /opt/keepalived/etc/sysconfig/keepalived /etc/sysconfig/


复制启动配置文件

mkdir /etc/keepalived && cp /opt/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/


创建启动软连接

ln -s /opt/keepalived/sbin/keepalived /sbin/
&&
ln -s /opt/keepalived/sbin/keepalived /usr/sbin/


设置开机服务

chkconfig keepalived on


启停keepalived服务

就可以使用以下命令启停服务了: service keepalived [start | stop | reload | restart ]

两台机器按照以上步骤安装完毕后,进入下面配置keepalived

配置keepalived

192.168.1.100为主节点, 192.168.1.101为从节点, 192.168.1.110 为VIP

注意: 此时keepalived的配置路径为 : /etc/keepalived/keepalived.conf

停止keepalived服务(此步骤非必须)

service keepalived stop


修改192.168.1.100 的keepalived配置

! Configuration File for keepalived

global_defs {
router_id nginx100  #自定义主机名
}

# vrrp_script chk_nginx {   #检查nginx进程脚本此处暂未启动
#   script "/etc/keepalived/nginx_check.sh"
#   interval 2
#   weight -20
# }

vrrp_instance VI_1 {
state MASTER  # 主节点 为 MASTER  从节点为 BACKUP
interface eth0  # 网卡标识名
virtual_router_id 11
mcast_src_ip 192.168.1.100 网卡ip
priority 100   # 主节点 优先级数字需要高于从节点,多个从节点需要一次降低优先级
nopreempt
advert_int 1
authentication {   # 主从节点此区域需要一致
auth_type PASS
auth_pass 1111
}
track_script {  # 执行上面检测nginx进程脚本
chk_nginx
}
virtual_ipaddress {  #虚拟ip
192.168.1.110
}
}


修改192.168.1.101 的keepalived配置

! Configuration File for keepalived

global_defs {
router_id nginx101  #自定义主机名
}

# vrrp_script chk_nginx {   #检查nginx进程脚本此处暂未启动
#   script "/etc/keepalived/nginx_check.sh"
#   interval 2
#   weight -20
# }

vrrp_instance VI_1 {
state BACKUP  # 主节点 为 MASTER  从节点为 BACKUP
interface eth0  # 网卡标识名
virtual_router_id 11
mcast_src_ip 192.168.1.101 网卡ip
priority 90   # 主节点 优先级数字需要高于从节点,多个从节点需要一次降低优先级
nopreempt
advert_int 1
authentication {   # 主从节点此区域需要一致
auth_type PASS
auth_pass 1111
}
track_script {  # 执行上面检测nginx进程脚本
chk_nginx
}
virtual_ipaddress {  #虚拟ip
192.168.1.110
}
}


两台分别执行命令 ip a

如下图所示: ip信息仅包含有.本地ip和虚拟机的物理ip



两台机器分别启动keepalived服务

service keepalived start


查看VIP漂移结果

192.168.1.100看到了VIP漂移成功(下图),192.168.1.101没有VIP绑定



关闭192.168.1.100(主节点)keepalived服务

service keepalived stop


在192.168.1.101(备节点)输入 ip a

如图所示: vip已经漂移到192.168.1.101节点



nginx高可用搭建

修改192.168.1.100 和 192.168.1.101中keepalived配置



编写nginx_check.sh脚本

#!/bin/sh
# 查看nginx服务数量赋值给变量A
A=`ps -C nginx --no-header |wc -l`
# 判断nginx服务数量是否等于0
if [ $A -eq 0 ];then
# nginx服务数量为0 则启动nginx服务(根据实际nginx启动方法启动)
/opt/nginx/sbin/nginx
sleep 2
# nginx服务数量为0 则杀掉keepalived服务
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi

注意: 如果在window下编写的 , 一定要转换文件格式为 unix, 本人使用notepad++,转换方法为:

编辑-->文档格式转换-->转换成UNIX格式

上传nginx_check.sh脚本到192.168.1.100 和 192.168.1.101虚拟机

根据下图keepalived配置的脚本路径将nginx_check.sh脚本上传

此配置是keepalived每2秒执行一次脚本, 如果nginx无服务,则启动nginx,如果启动失败,则停掉keepalived服务



上传完毕后要给脚本赋执行权限,命令如下:

chmod 777 /etc/keepalived/nginx_check.sh


启动192.168.1.100 和 192.168.1.101中keepalived

service keepalived start


在浏览器访问虚拟ip

如图所示: 访问虚拟ip即访问的主节点(192.168.1.100)nginx_A



给192.168.1.100中nginx一个致命无法启动的错误

因为keepalived的检测脚本会尝试启动nginx, 如果nginx可以启动成功的话,主节点就会继续工作,

我直接把192.168.1.100的nginx配置文件清空, 然后停止nginx服务,让nginx无法启动。

此时在浏览器访问虚拟ip--192.168.1.110,如图所示: 访问到了备节点(192.168.1.101)nginx_B



到此,已经完成了nginx高可用调整, 有问题的欢迎留言沟通。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息