Keepalived+nginx双主互备模型实现

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.51cto.com/10651675/1703673

(nod33)配置:IP 172.16.13.33/16,无需指定网关

>>>关闭selinux,清空防火墙规则

[[email protected] ~]# setenforce 0
[[email protected] ~]# iptables –F

>>>安装httpd,提供网页文件

[[email protected] ~]# yum install -y httpd
[[email protected] ~]# echo "web on nod33" > /var/www/html/index.html
[[email protected] ~]# service httpd start
(nod44)配置:IP 172.16.13.44/16,无需指定网关

>>>关闭selinux,清空防火墙规则

[[email protected] ~]# setenforce 0
[[email protected] ~]# iptables –F

>>>安装httpd,提供网页文件

[[email protected] ~]# yum install -y httpd
[[email protected] ~]# echo "web on nod44" > /var/www/html/index.html
[[email protected] ~]# service httpd start

(nod1)配置
>>>关闭selinux,清空防火墙规则

[[email protected] ~]# setenforce 0
[[email protected] ~]# iptables –F

>>>开启核心转发功能

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

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

>>>由于keepalive的配置前提必须(1、主备节点时间同步;2、主备节点主机名必须是使用hostname或uname –r命令获取的一直,并且能互相解析);因此,需要修改主机名并添加主备节点的hosts文件解析

[[email protected] ~]# sed  -I  ‘s/\(HOSTNAME=\).*/\1nod1/‘ /etc/sysconfig/network && hostname nod1
[[email protected] ~]# echo -e ‘127.0.0.1 nod1\n172.16.13.22 nod22‘ >> /etc/hosts 
[[email protected] ~]# crontab -e    
##编辑crontab任务计划,添加如下内容,实现每3分钟自动时间同步
*/3 * * * * /usr/sbin/ntpdate ntp.sjtu.edu.cn &> /dev/null && /sbin/hwclock -w

>>>安装keepalived并配置

[[email protected] ~]# yum install keepalived –y
##需事先配置好yum源
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
 
global_defs {
notification_email {
[email protected]
   }
notification_email_from [email protected]
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设置开机自启并启动

[[email protected] ~]# vim /etc/keepalived/keepalived.conf
[[email protected] ~]# chkconfig --add keepalived
[[email protected] ~]# chkconfig keepalived on
[[email protected] ~]# service keepalived start

>>>编译安装nginx(需事先下载源码包,我已下载至/root目录下)

1       添加nginx组及nginx用户

[[email protected] ~]# groupadd -r nginx
[[email protected] ~]# useradd -r -M -g nginx -s /sbin/nologin  nginx

2       解压源码包至/usr/local/src目录下并安装

[[email protected] ~]# tar xf /root/nginx-1.8.0.tar.gz -C /usr/local/src/
[[email protected] ~]# yum install gcc pcre-devel openssl openssl-devel

##安装gcc编译器,并事先解决依赖关系(nginx安装时所依赖的软件开发包)

[[email protected] ~]# cd /usr/local/src/nginx-1.8.0/       ##切换至nginx展开目录
[[email protected] 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 
[[email protected] nginx-1.8.0]# mkdir -pv /var/tmp/nginx/{client,proxy,fcgi,uwsgi,scgi}
[[email protected] nginx-1.8.0]# make && make install

>>>配置nginx反向负载均衡代理

[[email protected] ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak

##备份配置文件

[[email protected] ~]# 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

[[email protected] ~]# /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
[[email protected] ~]# /usr/local/nginx/sbin/nginx

######使用物理机的浏览器测试负载均衡是否生效(注意测试时可能浏览器自身缓存导致测试有误,刷新时需按住shift+F5)

(nod22)配置

>>>关闭selinux,清空防火墙规则

[[email protected] ~]# setenforce 0
[[email protected] ~]# iptables –F

>>>开启核心转发功能

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

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

>>>由于keepalive的配置前提必须(1、主备节点时间同步;2、主备节点主机名必须是使用hostname或uname –r命令获取的一直,并且能互相解析);因此,需要修改主机名并添加主备节点的hosts文件解析

[[email protected] ~]# sed  -I  ‘s/\(HOSTNAME=\).*/\1nod22/‘ /etc/sysconfig/network && hostname nod22
[[email protected] ~]# echo -e ‘127.0.0.1 nod22\n172.16.13.11 nod2‘ >> /etc/hosts 
[[email protected] ~]# crontab -e    
##编辑crontab任务计划,添加如下内容,实现每3分钟自动时间同步
*/3 * * * * /usr/sbin/ntpdate ntp.sjtu.edu.cn &> /dev/null && /sbin/hwclock -w

>>>安装keepalived并配置

[[email protected] ~]# yum install keepalived –y
[[email protected] ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
##备份配置文件,若配置错误可随时恢复
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
##修改配置文件
! Configuration File for keepalived
 
global_defs {
notification_email {
[email protected]
   }
notification_email_from [email protected]
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设置开机自启并启动

[[email protected] ~]# vim /etc/keepalived/keepalived.conf
[[email protected] ~]# chkconfig --add keepalived
[[email protected] ~]# chkconfig keepalived on
[[email protected] ~]# service keepalived start

>>>编译安装nginx(需事先下载源码包,我已下载至/root目录下)

1       添加nginx组及nginx用户

[[email protected] ~]# groupadd -r nginx
[[email protected] ~]# useradd -r -M -g nginx -s /sbin/nologin  nginx

2       解压源码包至/usr/local/src目录下并安装

[[email protected] ~]# tar xf /root/nginx-1.8.0.tar.gz -C /usr/local/src/

[[email protected] ~]# yum install gcc pcre-devel openssl openssl-devel

##安装gcc编译器,并事先解决依赖关系(nginx安装时所依赖的软件开发包)

[[email protected] ~]# cd /usr/local/src/nginx-1.8.0/       ##切换至nginx展开目录
[[email protected] 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 
[[email protected] nginx-1.8.0]# mkdir -pv /var/tmp/nginx/{client,proxy,fcgi,uwsgi,scgi}
[[email protected] nginx-1.8.0]# make && make install

>>>配置nginx反向负载均衡代理

[[email protected] ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak        
##备份配置文件
 
[[email protected] ~]# 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

[[email protected] ~]# /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
[[email protected] ~]# /usr/local/nginx/sbin/nginx         ##启动nginx

######使用物理机的浏览器测试负载均衡是否生效(注意测试时可能浏览器自身缓存导致测试有误,刷新时需按住shift+F5)

(nod55)的配置

>>>关闭selinux,清空防火墙规则

[[email protected] ~]# setenforce 0
[[email protected] ~]# iptables –F

>>>开启核心转发功能

[[email protected] ~]#echo 1 > /proc/sys/net/ipv4/ip_forward

网卡配置

测试

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

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

时间: 2024-10-11 07:27:00

Keepalived+nginx双主互备模型实现的相关文章

MariaDB、MySQL双主互备模型同步数据

MySQL双主互备即两台MySQL服务器同时是主服务器,而同时又是对方的从服务器,这样可以分担主服务器的一部分写请求,因为如果是单主模型的话数据写入只能写入在一台MySQL服务器,而双主模型则可同时写在两台服务器上,有效加快了写入的速度,而且还能提供数据的备份功能. 环境如下: server1:CentOS 6.5 x86_64 mariadb 10.0.10 IP:192.168.10.204 server2:CentOS 6.5 x86_64 mariadb 10.0.10  IP:192.

[Mysql高可用]——双主互备+keepalived

实验架构图    实验环境 主机名 操作系统 Mysql版本 keepalived版本 主机IP VIP lyj1(Master/Slave) Red Hat release 6.5 Mysql5.6.31 keepalived-1.2.12 10.0.100.201 10.0.100.220 lyj2(Slave/Master) Red Hat release 6.5 Mysql5.6.31 keepalived-1.2.12 10.0.100.202 构建双主互备 1. 分别修改DB1和DB

Mogilefs分布式文件系统-Keepalived+Nginx双主模型实现图片分布式存储、访问

一.分布式文件系统: 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.计算机通过文件系统管理.存储数据,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量的方式,在容量大小.容量增长速度.数据备份.数据安全等方面的表现都差强人意. 分布式文件系统可以有效解决数据的存储和管理难题:将固定于某个地点的某个文件系统,扩展到任意多个地点/多个文件系统,众多的节点组成一个文件系统网络.每个节点可以分布在

keepalived双主互备和自定义日志

自定义日志: keepalived的日志默认存储在/var/log/messages 有时我们会有需要将keepalived日志拿出来单独分析,那么这就需要我做自己去定义 /etc/sysconfig/keepalived #编辑keepalived的环境配置文件 KEEPALIVED_OPTIONS="-D -d -S 0" #修改内容 # --dump-conf -d  导出配置数据 # --log-detail -D  详细日志信息 # --log-facility -S  设置

Mysql5.7.22+Keepalived双主互备高可用集群

DB1:192.168.254.128DB2:192.168.254.129配置前进行校时操作#安装ntpdate工具yum install ntpdate -y#使用ntpdate校时(后面的是ntp服务器)ntpdate pool.ntp.org 配置mysql双主备 安装数据库链接(在主页数据库里面可以看到)http://blog.51cto.com/10158955/1926574 DB1修改配置文件(需重启)vi /etc/my.cnf#在[mysqld]添加server-id=166

MySQL双主互备模式架构

MySql双主互备架构模式 操作系统 CentOS 6.3 MySql版本 mysql-5.0.56 keepalived keepalived-1.1.19.tar.gz Master DB1配置文件 修改MySql 配置文件  /etc/my.cnf 增加以下段落 [mysqld] server-id=1    节点标示 log-bin=mysql-bin   开启mysql的binlog日志功能 relay-log = mysql-relay-bin  用来定义日志文件命名格式 repli

mysql双主互备

一.安装mysql 各种方式太多了 二.摘录自:https://linux.cn/thread-14135-1-1.html 1)首先在DB1上my.cnf 中[mysqld] 字段中添加如下内容:server-id = 1 //数据库ID号, 为1时表示为Master,其中master_id必须为1到232–1之间的一个正整数值;log-bin=mysql-bin //启用二进制日志: relay-log=mysql-relay-bin  //用来定义relay-log日志文件命名格式repl

Mysql + keepalived 实现双主热备读写分离【转】

Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论 架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12,Keepalived-1.2.7环境简介:1.Master-A 192.168.1.168 (Mysql+Keepalived)2.Master-B 192.168.1.169 (Mysql+Keepalived)3.写入VIP 192.168.100 (168主,169从)4.读取VIP 192.1

Mysql双主互备+keeplived高可用架构(部分)

一.Mysql双主互备+keeplived高可用架构介绍 Mysql主从复制架构可以在很大程度保证Mysql的高可用,在一主多从的架构中还可以利用读写分离将读操作分配到从库中,减轻主库压力.但是在这种架构中,主库出现故障时需要手动将一台从库提升为主库.在对写操作要求较高的环境中,主库故障在主从架构中会成为单点故障.因此需要主主互备架构,避免主节点故障造成写操作失效. 在双主互备的架构中,每台Mysql都充当主服务器,同时充当对方的从服务器.在任意一台服务器上的写操作都会被复制到另一台服务器上,从