设为首页 收藏本站
查看: 1453|回复: 0

[经验分享] nginx+keepalived配置双主高可用负载均衡

[复制链接]

尚未签到

发表于 2015-9-4 10:44:13 | 显示全部楼层 |阅读模式
nginx+keepalived配置高可用性负载均衡专题版权说明:nginx+keepalived配置高可用性负载均衡版权归Linux大师之路官方网站所有,允许自由转...  nginx+keepalived配置高可用性负载均衡专题版权说明:
nginx+keepalived配置高可用性负载均衡版权归Linux大师之路官方网站所有,允许自由转载,但转载要注明出处。
任何转载该nginx配置文档的单位和个人必须注明以下信息
Linux大师之路首页链接:http://www.linuxmr.com/
该中文文档目录链接:http://www.linuxmr.com/cms_chinese_doc/
nginx+keepalived配置高可用性负载均衡专题首页链接:http://www.linuxmr.com/nginx_keepalived/
每个转载的页面需保留本版权说明,Linux大师之路保留所有权力。
___________________________________________________________________________

nginx+keepalived配置高可用性负载均衡--nginx+keepalived配置双主高可用负载均衡

一、nginx双主高可用试验环境
1、操作系统redhat X86-64
2、使用的软件nginx-1.2.1,keepalived-1.2.1
3、两台主机,一台ip是192.168.1.2,另一台ip是192.168.1.3
4、虚拟ip是192.168.1.4,192.168.1.5

二、nginx双主高可用目的
nginx单主高可用,虽然实现了高可用,但是总是有一台机器是空闲的,为了合理使用资源,做成nginx双主高可用是很有必要的

三、安装nginx
这个nginx配置安装相当简单,不做说明
安装完成之后开启nginx
用命令ps -C nginx --no-heading,有类似下面的输出,即表示nginx正常启动

四、安装keepalived
参考http://www.linuxmr.com/2012/nginx_keepalived_0628/203.html,获得keepalived安装方法。
这里主要用到keepalived的故障切换功能。

五、nginx双主高可用具体配置
具体细节参考keepalived配置文件详解
这里直接上实现nginx单主高可用的配置文件内容
主机192.168.1.2上的keepalived的配置是
global_defs { #全局定义
notification_email { #定义报警邮件相关,这些可以忽略
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.1.3 #smtp服务器地址
smtp_connect_timeout 30
router_id LVS_DEVEL #标示虚拟路由的id
}

vrrp_script check_nginx_alive { #定义实例使用的检测脚本
scritp /root/check_nginx.sh #定义检测脚本路径
interval 2 #定义检测时间间隔
}

vrrp_instance VI_1 { #定义实例
state MASTER #该主机初始状态
interface eth0 #使用的网卡
virtual_router_id 51 #虚拟路由,互为高可用的主机之间的虚拟路由必须相同
priority 100 #优先级,这个是MASTER,应该比SLAVE的高
advert_int 1 #VRRP发送advertisment数据包的间隔时间
authentication { #互为高可用的主机之间通信的认证信息
auth_type PASS #类型是明文密码,官方推荐使用明文密码
auth_pass 1111 #明文密码内容,互为高可用的主机之间的密码也应该相同
}

track_script { #该实例使用的检测脚本
check_nginx_alive #该脚本在keepalived中定义的名称
}

virtual_ipaddress { #绑定的虚拟ip地址
192.168.1.4
}
}

vrrp_instance VI_2 { #再为该主机定义一个实例
state SLAVE #该主机初始状态
interface eth0 #使用的网卡
virtual_router_id 52 #虚拟路由,同一台主机之间不同实例路由必须不一样
priority 95 #优先级,这个是SLAVE,应该比MASTER的低
advert_int 1 #VRRP发送advertisment数据包的间隔时间
authentication { #互为高可用的主机之间通信的认证信息
auth_type PASS #类型是明文密码,官方推荐使用明文密码
auth_pass 1111 #明文密码内容,互为高可用的主机之间的密码也应该相同
}

virtual_ipaddress { #绑定的虚拟ip地址
192.168.1.5
}
}

主机192.168.1.3上的keepalived的配置是
global_defs { #全局定义
notification_email { #定义报警邮件相关,这些可以忽略
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.1.3 #smtp服务器地址
smtp_connect_timeout 30
router_id LVS_DEVEL #标示虚拟路由的id
}

vrrp_script check_nginx_alive { #定义实例使用的检测脚本
scritp /root/check_nginx.sh #定义检测脚本路径
interval 2 #定义检测时间间隔
}

vrrp_instance VI_1 { #定义实例
state SLAVE #该主机初始状态
interface eth0 #使用的网卡
virtual_router_id 51 #虚拟路由,互为高可用的主机之间的虚拟路由必须相同
priority 95 #优先级,这个是SLAVE,应该比MASTER的高
advert_int 1 #VRRP发送advertisment数据包的间隔时间
authentication { #互为高可用的主机之间通信的认证信息
auth_type PASS #类型是明文密码,官方推荐使用明文密码
auth_pass 1111 #明文密码内容,互为高可用的主机之间的密码也应该相同
}

virtual_ipaddress { #绑定的虚拟ip地址
192.168.1.4
}
}

vrrp_instance VI_2 { #为主机192.168.1.3定义另一个实例,对应192.168.1.2中的那个实例
state MASTER #该主机初始状态
interface eth0 #使用的网卡
virtual_router_id 52 #虚拟路由,同一主机不同实例之间的虚拟路由必须不同,这里对应192.168.1.2里面的配置
priority 100 #优先级,这个是MASTER,应该比SLAVE的高
advert_int 1 #VRRP发送advertisment数据包的间隔时间
authentication { #互为高可用的主机之间通信的认证信息
auth_type PASS #类型是明文密码,官方推荐使用明文密码
auth_pass 1111 #明文密码内容,互为高可用的主机之间的密码也应该相同
}

track_script { #该实例使用的检测脚本
check_nginx_alive #该脚本在keepalived中定义的名称
}

virtual_ipaddress { #绑定的虚拟ip地址
192.168.1.5
}
}

/root/check_nginx.sh的内容是:
nginx_state=`ps -C nginx --no-heading | wc -l`
if [ ${nginx_state} == 0 ];then
#/usr/local/nginx/sbin/nginx
#sleep 3
#nginx_state=`ps -C nginx --no-heading | wc -l`
[ ${nginx_state} == 0 ] && service keepalived stop
fi

注释掉的那段代码,是为了防止nginx意外停止而家的设置,用处是,当检测到nginx停止时,尝试重新启动nginx,如果重新启动nginx失败,则停止keepalived,让主机192.168.1.4自动切换到MASTER状态,从而实现高可用。这里注释掉是为了测试方便。

现在重启两台机器上的keepalived,
在192.168.1.2上运行代码
shell> ip a | grep eth0 -A5
输出的结果类似
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link/ether 00:ea:01:16:87:a1 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.4/32 scope global eth0
inet6 fe80::2ea:1ff:fe16:87a1/64 scope link

在192.168.1.3上运行代码
shell> ip a | grep eth0 -A5
输出的结果类似
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link/ether 00:ea:01:16:87:a1 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.5/32 scope global eth0
inet6 fe80::2ea:1ff:fe16:87a1/64 scope link

看,虚拟ip192.168.1.4、192.168.1.5已经分别绑定在192.168.1.2与192.168.1.3的网卡eth0上。

在命令行输入命令
shell> curl -s http://192.168.1.4/ --ignore-content-length
shell> curl -s http://192.168.1.5/ --ignore-content-length
如果是nginx网页文件没有改变,则两次输出内容都类似下面:
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Welcome to nginx!</h1></center>
</body>
</html>

这说明已经可以通过虚拟IP来访问网站了,那到底能不能实现nginx双主高可用呢?

测试如下:

停掉192.168.1.2上的nginx,到192.168.1.3上运行命令:
shell>ip a | grep eth0 -A5
输出的结果类似
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link/ether 00:16:3e:31:cd:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.3/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.4/32 scope global eth0
inet 192.168.1.5/32 scope global eth0
inet6 fe80::2ea:1ff:fe16:87a1/64 scope link
现在两个虚拟ip已经绑定到192.168.1.3的网卡eth0上了,
在命令行输入命令
shell> curl -s http://192.168.1.4/ --ignore-content-length
shell> curl -s http://192.168.1.5/ --ignore-content-length
如果是nginx网页文件没有改变,则输出内容也是类似下面:
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Welcome to nginx!</h1></center>
</body>
</html>
由此可见,nginx双主高可用配置成功

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109298-1-1.html 上篇帖子: 基于keepalived、redis sentinel的高可用redis集群 下篇帖子: Lvs+Keepalived负载均衡方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表