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默认使用轮询,所以梁旭访问两次,发现结果不一样。
0x05 资料来源
老男孩12期
http://blog.csdn.net/lexang1/article/details/52386909