c4rt1y

nginx+keepalived+apache高可用及双主模式

0x01 nginx+keepalived高可用

1、Nginx+keepalived 主从配置
这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。

2、Nginx+keepalived 双主配置
这种方案,使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于当前架构环境。

0x02 实验环境

#两台服务器分别安装如下
master
	eth0 10.10.10.10
	eth1 20.20.20.10
	vip0 10.10.10.100
	vip1 10.10.10.200
node01
	eth0 10.10.10.20
	eth1 20.20.20.20
	vip0 10.10.10.100
	vip1 10.10.10.200


#两台服务器同时关闭如下
#关闭firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service

#关闭selinux
sed -i 's:SELINUX=enforcing:SELINUX=disabled:g' /etc/selinux/config
setenforce 0



#两台服务器安装httpd
yum install httpd -y

#两台服务器修改端口
vi /etc/httpd/conf/httpd.conf
Listen 8080

#两台服务器启动httpd
systemctl start httpd
#查看httpd启动状态
systemctl status httpd

#在master上输入
echo "hello 10.10.10.10" > /var/ww/html/index.html

#在node01上输入
echo "hello 10.10.10.20" > /var/ww/html/index.html

#两台服务器安装nginx
yum install nginx -y

vi /etc/nginx/nginx.conf
#加入代理的代码
upstream myProxy{
    server 10.10.10.10:8080;
    server 10.10.10.20:8080;
}

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
        proxy_pass http://myProxy;    #指向代理位置
    }

#两台服务器启动nginx
systemctl start nginx
#两台服务器查看nginx启动状态
systemctl status nginx


#额外知识点
nginx负载均衡策略可分为两大类:内置策略和扩展策略
内置策略包含加权轮询和ip hash
扩展策略包含fair、通用hash、consistent hash等
nginx的upstream目前支持4中方式的分配:
轮询默认:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
weight:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配

#两台服务器安装keepalived
yum install keepalived -y

0x03 配置keepalived

#master上
vi /etc/keepalived/keepalived.conf 
global_defs {
    router_id 10.10.10.10   #本机IP
}

vrrp_instance VI_1 {
    state MASTER           	#主节点
    interface eth1  		#网卡
    virtual_router_id 51   	# 主、备机的virtual_router_id必须相同  
#    mcast_src_ip 10.10.10.10   #本机IP
    priority 100   # 主、备机取不同的优先级,主机值较大,备份机值较小。0-254之间
    advert_int 1   #检查时间周期,每一秒一次
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.100   #设置多个vip 虚拟地址
    }
}

vrrp_instance VI_2 {
    state MASTER           	
    interface eth1  		
    virtual_router_id 50   	
    priority 90   
    advert_int 1   
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.200   #设置多个vip 虚拟地址
    }
}

#node01上
vi /etc/keepalived/keepalived.conf 
global_defs {
    router_id 10.10.10.10   #本机IP
}

vrrp_instance VI_1 {
    state BACKUP           	#备份节点名字不一样
    interface eth1  		
    virtual_router_id 51   	
    priority 90   		#备份节点的权重小于主节点
    advert_int 1   
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.100   
    }
}

vrrp_instance VI_2 {
    state MASTER           	
    interface eth1  		
    virtual_router_id 50   	
    priority 100  
    advert_int 1   
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.200
    }
}

#启动keepalived,首先启动master,然后启动node01
#启动keepalived
systemctl start keepalived
#查看httpd启动状态
systemctl status keepalived

0x04 验证

上述讲了nginx默认使用轮询,所以梁旭访问两次,发现结果不一样。

10_10_10_200_10 10_10_10_200_20

0x05 资料来源

老男孩12期
http://blog.csdn.net/lexang1/article/details/52386909
GoTop