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

[经验分享] Keepalived+nginx双主互备模型实现

[复制链接]

尚未签到

发表于 2018-12-31 07:35:31 | 显示全部楼层 |阅读模式
Keepalived双主互备模型实现


实验拓扑概述

本次实验所涉及的系统发行版本为:CentOS6.6-64bit;内核版本:2.6.32-504.el6.x86_64

(nod1)Nginx代理1:配置有nginx服务,向外部宣称一个公网ip接收外部客户端请求,网卡eth0桥接模式,配置有内网ip172.16.13.11;eth1(1.1.1.2/24)仅主机模式,模拟与出口路由器通信接口,nod1为VIP1的MASTER时,VIP(1.1.1.100/32)配置于eth1的别名eth1:1上,若BACKUP节点故障,将VIP2转移到eth1:2上


(nod22)nginx代理2:配置nginx服务,向外部宣称一个公网ip接收外部客户端请求,网卡eth0桥接模式,配置有内网ip172.16.13.22;eth1(1.1.1.3/24)仅主机模式,模拟与出口路由器通信接口,nod22为VIP2的MASTER时,VIP(1.1.1.200/32)配置于eth1的别名eth1:1上,若BACKUP节点故障,将VIP1转移到eth1:2上


(nod33)web1:配置有httpd服务,负责接收前端代理服务器的调度接收,网卡eth0桥接模式,配置有内网ip172.16.13.33
(nod44)web2:配置有httpd服务,负责接收前端代理服务器的调度接收,网卡eth0桥接模式,配置有内网ip172.16.13.44
(nod55)模拟出口路由器,eth1(1.1.1.1/24)仅主机模式,eth0自定义网络vmnet10
客户端网卡也连接vmnet10



实验原理
Nod1和nod22上分别向互联网宣称一个公网IP(VIP1和VIP2)提供web服务。通过DNS的轮询解析原理,会将来自不同IP客户端的请求分别分发至nod1和nod22上,当nod1或nod22中任意一个节点故障停机,配置在相应节点上的VIP地址会自动转移到另一节点,从而保证了对外的服务提供依旧正常。


实验配置:
  关于keepalived配置参数介绍,请参见http://imsupeng.blog.运维网.com/10651675/1703673
(nod33)配置:IP 172.16.13.33/16,无需指定网关
>>>关闭selinux,清空防火墙规则
[root@nod33 ~]# setenforce 0
[root@nod33 ~]# iptables –F


>>>安装httpd,提供网页文件
[root@nod33 ~]# yum install -y httpd
[root@nod33 ~]# echo "web on nod33" > /var/www/html/index.html
[root@nod33 ~]# service httpd start
(nod44)配置:IP 172.16.13.44/16,无需指定网关
>>>关闭selinux,清空防火墙规则
[root@nod44 ~]# setenforce 0
[root@nod44 ~]# iptables –F
>>>安装httpd,提供网页文件
[root@nod44 ~]# yum install -y httpd
[root@nod44 ~]# echo "web on nod44" > /var/www/html/index.html
[root@nod44 ~]# service httpd start

nod1)配置
>>>关闭selinux,清空防火墙规则
[root@nod1 ~]# setenforce 0
[root@nod1 ~]# iptables –F

>>>开启核心转发功能
[root@nod1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

>>>网卡配置如下————注意:若虚拟机配置前就把IP设置成如下,很可能导致网络yum源无法使用,可以将后面配置完成后再修改网卡



>>>由于keepalive的配置前提必须(1、主备节点时间同步;2、主备节点主机名必须是使用hostname或uname –r命令获取的一直,并且能互相解析);因此,需要修改主机名并添加主备节点的hosts文件解析
[root@nod1 ~]# sed  -I  's/\(HOSTNAME=\).*/\1nod1/' /etc/sysconfig/network && hostname nod1
[root@nod1 ~]# echo -e '127.0.0.1 nod1\n172.16.13.22 nod22' >> /etc/hosts
[root@nod1 ~]# crontab -e   
##编辑crontab任务计划,添加如下内容,实现每3分钟自动时间同步
*/3 * * * * /usr/sbin/ntpdate ntp.sjtu.edu.cn &> /dev/null && /sbin/hwclock -w

>>>安装keepalived并配置
[root@nod1 ~]# yum install keepalived –y
##需事先配置好yum源
[root@nod1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
   }
notification_email_from kaadmin@nod1
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id nod1
}
vrrp_instance VI_1 {         ##第一个为主
state MASTER          ##VIP1的MASTER
interface eth1
virtual_router_id 13         ##两个实例此处必须不一样
priority 100      ##优先级应大于MASTER
advert_int 1
authentication {
auth_type PASS
auth_pass 281fd7d6        ##两个实例的密码也不能一样
    }
virtual_ipaddress {
1.1.1.100/32 dev eth1 label eth1:1
    }
}
vrrp_instance VI_2 {
state BACKUP ##VIP2为BACKUP
interface eth1
virtual_router_id 23         ##两个实例此处必须不一样
priority 99         ##注意优先级小于MASTER
advert_int 1
authentication {
auth_type PASS
auth_pass 1fd7d6    ##两个实例的密码也不能一样
    }
virtual_ipaddress {
1.1.1.200/32 dev eth1 label eth1:2
    }
}


>>>将keepalived设置开机自启并启动
[root@nod1 ~]# vim /etc/keepalived/keepalived.conf
[root@nod1 ~]# chkconfig --add keepalived
[root@nod1 ~]# chkconfig keepalived on
[root@nod1 ~]# service keepalived start
>>>编译安装nginx(需事先下载源码包,我已下载至/root目录下)
1       添加nginx组及nginx用户
[root@nod1 ~]# groupadd -r nginx
[root@nod1 ~]# useradd -r -M -g nginx -s /sbin/nologin  nginx
2       解压源码包至/usr/local/src目录下并安装
[root@nod1 ~]# tar xf /root/nginx-1.8.0.tar.gz -C /usr/local/src/
[root@nod1 ~]# yum install gcc pcre-devel openssl openssl-devel

##安装gcc编译器,并事先解决依赖关系(nginx安装时所依赖的软件开发包)
[root@nod1 ~]# cd /usr/local/src/nginx-1.8.0/       ##切换至nginx展开目录
[root@nod1 nginx-1.8.0]# ./configure --prefix=/usr/local/nginx \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--with-http_mp4_module --user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
[root@nod1 nginx-1.8.0]# mkdir -pv /var/tmp/nginx/{client,proxy,fcgi,uwsgi,scgi}
[root@nod1 nginx-1.8.0]# make && make install

>>>配置nginx反向负载均衡代理
[root@nod1 ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak##备份配置文件
[root@nod1 ~]# vim /usr/local/nginx/conf/nginx.conf
在http上下文中添加
upstream httpdsrvs {
server 172.16.13.33:80 weight=1;
server 172.16.13.44:80 weight=1;
    }
将默认server段的location删除,添加:
location / {
proxy_pass http://httpdsrvs/;
}如图:




检查配置文件,并启动nginx
[root@nod1 ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nod1 ~]# /usr/local/nginx/sbin/nginx######使用物理机的浏览器测试负载均衡是否生效(注意测试时可能浏览器自身缓存导致测试有误,刷新时需按住shift+F5)



(nod22)配置
>>>关闭selinux,清空防火墙规则
[root@nod22 ~]# setenforce 0
[root@nod22 ~]# iptables –F
>>>开启核心转发功能
[root@nod22 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
>>>网卡配置如下————注意:若虚拟机配置前就把IP设置成如下,很可能导致网络yum源无法使用,可以将后面配置完成后再修改网卡



>>>由于keepalive的配置前提必须(1、主备节点时间同步;2、主备节点主机名必须是使用hostname或uname –r命令获取的一直,并且能互相解析);因此,需要修改主机名并添加主备节点的hosts文件解析
[root@nod22 ~]# sed  -I  's/\(HOSTNAME=\).*/\1nod22/' /etc/sysconfig/network && hostname nod22
[root@nod22 ~]# echo -e '127.0.0.1 nod22\n172.16.13.11 nod2' >> /etc/hosts
[root@nod1 ~]# crontab -e   
##编辑crontab任务计划,添加如下内容,实现每3分钟自动时间同步
*/3 * * * * /usr/sbin/ntpdate ntp.sjtu.edu.cn &> /dev/null && /sbin/hwclock -w
>>>安装keepalived并配置
[root@nod22 ~]# yum install keepalived –y
[root@nod22 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
##备份配置文件,若配置错误可随时恢复


[root@nod22 ~]# vim /etc/keepalived/keepalived.conf
##修改配置文件
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
   }
notification_email_from kaadmin@nod22
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id nod22         ##注意修改
}
vrrp_instance VI_1 {
state BACKUP ##注意修改
interface eth1
virtual_router_id 13
priority 99         ##注意修改
advert_int 1
authentication {
auth_type PASS
auth_pass 281fd7d6        ##注意修改,与此实例的MASTER保持一致
    }
virtual_ipaddress {
1.1.1.100/32 dev eth1 label eth1:1
    }
}
vrrp_instance VI_2 {
state MASTER ##注意修改
interface eth1
virtual_router_id 23
priority 100      ##注意修改
advert_int 1
authentication {
auth_type PASS
auth_pass 1fd7d6    ##注意修改,与此实例的MASTER保持一致
    }
virtual_ipaddress {
1.1.1.200/32 dev eth1 label eth1:2
    }
}

>>>将keepalived设置开机自启并启动
[root@nod22 ~]# vim /etc/keepalived/keepalived.conf
[root@nod22 ~]# chkconfig --add keepalived
[root@nod22 ~]# chkconfig keepalived on
[root@nod22 ~]# service keepalived start
>>>编译安装nginx(需事先下载源码包,我已下载至/root目录下)
1       添加nginx组及nginx用户
[root@nod22 ~]# groupadd -r nginx
[root@nod22 ~]# useradd -r -M -g nginx -s /sbin/nologin  nginx
2       解压源码包至/usr/local/src目录下并安装
[root@nod22 ~]# tar xf /root/nginx-1.8.0.tar.gz -C /usr/local/src/
[root@nod22 ~]# yum install gcc pcre-devel openssl openssl-devel
##安装gcc编译器,并事先解决依赖关系(nginx安装时所依赖的软件开发包)
[root@nod22 ~]# cd /usr/local/src/nginx-1.8.0/       ##切换至nginx展开目录
[root@nod22 nginx-1.8.0]# ./configure --prefix=/usr/local/nginx \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--with-http_mp4_module --user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
[root@nod22 nginx-1.8.0]# mkdir -pv /var/tmp/nginx/{client,proxy,fcgi,uwsgi,scgi}
[root@nod22 nginx-1.8.0]# make && make install



>>>配置nginx反向负载均衡代理
[root@nod22 ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak        
##备份配置文件
[root@nod22 ~]# vim /usr/local/nginx/conf/nginx.conf
在http上下文中添加
upstream httpdsrvs {
server 172.16.13.33:80 weight=1;
server 172.16.13.44:80 weight=1;
    }
将默认server段的location删除,添加:
location / {
proxy_pass http://httpdsrvs/;
}
检查配置文件,并启动nginx
[root@nod22 ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nod22 ~]# /usr/local/nginx/sbin/nginx         ##启动nginx
######使用物理机的浏览器测试负载均衡是否生效(注意测试时可能浏览器自身缓存导致测试有误,刷新时需按住shift+F5)




(nod55)的配置
>>>关闭selinux,清空防火墙规则
[root@nod55 ~]# setenforce 0
[root@nod55 ~]# iptables –F
>>>开启核心转发功能
[root@nod55 ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
网卡配置





测试
第一步:测试节点故障后,VIP能否自动转移







第二步:客户端测试网站是否能正常负载均衡

  





运维网声明 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-657771-1-1.html 上篇帖子: Nginx+Keepalived 实现反代 负载均衡 高可用(HA)配置 下篇帖子: Linux下部署ftp双机热备 keepalived+ftp
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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