本文将继续单机架构升级集群系列博文, 记录nginx+keepalived主从高可用搭建工做的记录,但愿能帮助到须要的朋友们,也欢迎大牛们批评指正!! html
在博文( https://my.oschina.net/u/2342969/blog/995598 )中描述了本次架构升级的背景nginx
在博文( https://my.oschina.net/u/2342969/blog/1036702 )中记录了redis主从集群搭建 c++
以上博文有须要的朋友们能够观阅redis
本文将记录nginx+keepalived主从集群高可用搭建工做, 在此参考了 博文(http://blog.csdn.net/u012453843/article/details/69668663?locationNum=2&fps=1)浏览器
本段仅仅介绍一下基础概念,供小白参考..tomcat
keepalived:它是集群环境下保证高可用的一个服务软件。 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。 master上面有一个对外提供服务的vip(该路由器所在局域网内其余机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就须要根据VRRP的优先级来选举一个backup当master。这样的话就能够保证路由器的高可用了。 总结之,主备环境共有一个虚拟ip(自定义ip),外部用户只须要访问这个虚拟ip,主节点挂掉后,虚拟ip就会漂移到选举出来的从节点上,对用户无感知的。更多资料自行百度一下或者发私信评论。bash
nginx:nginx详细信息可百度,本文只用nginx对tomcat作负载均衡使用。架构
keepalived :1.2.18 (版本不一样和本文就会有不一样之处) 负载均衡
nginx : 1.5.8spa
虚拟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_A 虚拟机ip:192.168.1.100
nginx_B 虚拟机ip:192.168.1.101
两台虚拟机安装步骤同样,
安装目录选择的 /opt/nginx (目录自定义)
通常咱们都须要先装pcre, zlib(自行百度),前者为了重写rewrite,后者为了gzip压缩。
安装nginx前,编译环境gcc g++ 开发库之类的须要提早装好
yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++
cd /opt
wget -c http://nginx.org/download/nginx-1.5.8.tar.gz
tar zxvf nginx-1.5.8.tar.gz
cd nginx-1.5.8
./configure --prefix=/opt/nginx --with-pcre= pcre-8.36的安装路径
make && make install
/opt/nginx/sbin/nginx
如图所示,访问成功。
以下图两台虚拟机分别添加一行:
192.168.1.100: <p><em>This is nginx_A.</em></p>
192.168.1.101: <p><em>This is nginx_B.</em></p>
如图:
192.168.1.100访问结果:
192.168.1.101访问结果:
启动: /opt/nginx/sbin/nginx
修改配置后从新加载: /opt/nginx/sbin/nginx -s reload
中止: kill -9 pid
须要高可用的nginx对应的虚拟机均须要安装keepalived服务,安装步骤同样
本文安装目录为: /opt/keepalived
keepalived VIP(虚拟ip): 192.168.1.110
cd /opt
wget -c http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
tar -zxvf keepalived-1.2.18.tar.gz
cd keepalived-1.2.18
./configure --prefix=/opt/keepalived
make && make install
启动命令: /opt/keepalived/sbin/keepalived -f /opt/keepalived/etc/keepalived/keepalived.conf
为了方便启停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
就能够使用如下命令启停服务了: service keepalived [start | stop | reload | restart ]
两台机器按照以上步骤安装完毕后,进入下面配置keepalived
192.168.1.100为主节点, 192.168.1.101为从节点, 192.168.1.110 为VIP
注意: 此时keepalived的配置路径为 : /etc/keepalived/keepalived.conf
service keepalived stop
! 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 } }
! 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信息仅包含有.本地ip和虚拟机的物理ip
service keepalived start
192.168.1.100看到了VIP漂移成功(下图),192.168.1.101没有VIP绑定
service keepalived stop
如图所示: vip已经漂移到192.168.1.101节点
#!/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格式
根据下图keepalived配置的脚本路径将nginx_check.sh脚本上传
此配置是keepalived每2秒执行一次脚本, 若是nginx无服务,则启动nginx,若是启动失败,则停掉keepalived服务
上传完毕后要给脚本赋执行权限,命令以下:
chmod 777 /etc/keepalived/nginx_check.sh
service keepalived start
如图所示: 访问虚拟ip即访问的主节点(192.168.1.100)nginx_A
由于keepalived的检测脚本会尝试启动nginx, 若是nginx能够启动成功的话,主节点就会继续工做,
我直接把192.168.1.100的nginx配置文件清空, 而后中止nginx服务,让nginx没法启动。
此时在浏览器访问虚拟ip--192.168.1.110,如图所示: 访问到了备节点(192.168.1.101)nginx_B
到此,已经完成了nginx高可用调整, 有问题的欢迎留言沟通。。。。