一、检测系统信息


Host A

root@master:~# cat /etc/issue
Ubuntu 12.04.1 LTS \n \l
root@master:~# uname  -a
Linux master 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
root@master:~# ifconfig
eth0      Link encap:以太网  硬件地址 00:0c:29:8f:04:ca  
          inet 地址:192.168.1.186  广播:192.168.1.255  掩码:255.255.255.0
          inet6 地址: fe80::20c:29ff:fe8f:4ca/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:93215 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:3718 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000
          接收字节:31482582 (31.4 MB)  发送字节:412234 (412.2 KB)

lo        Link encap:本地环回  
          inet 地址:127.0.0.1  掩码:255.0.0.0
          inet6 地址: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  跃点数:1
          接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:0 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:0
          接收字节:0 (0.0 B)  发送字节:0 (0.0 B)
root@master:~# hostname
master


Host B

root@slave:~# cat /etc/issue
Ubuntu 12.04.1 LTS \n \l

root@slave:~# uname  -a
Linux slave 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
root@slave:~# ifconfig
eth0      Link encap:以太网  硬件地址 00:0c:29:02:d9:dd  
          inet 地址:192.168.1.188  广播:192.168.1.255  掩码:255.255.255.0
          inet6 地址: fe80::20c:29ff:fe02:d9dd/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:96437 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:3450 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000
          接收字节:32545367 (32.5 MB)  发送字节:383043 (383.0 KB)

lo        Link encap:本地环回  
          inet 地址:127.0.0.1  掩码:255.0.0.0
          inet6 地址: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  跃点数:1
          接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:0 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:0
          接收字节:0 (0.0 B)  发送字节:0 (0.0 B)

root@slave:~# hostname
slave


 小编:以下操作完全针对上述环境,仅供参考

二、安装nginx

    关于如安装最新版本的nginx我这不再阐述查看本博客ubuntu安装最新稳定版nginx博文

三、配置nginx


master主机配置

    由于本次安装是非生产环境,so对于nginx不进行优化

root@master:/etc/nginx/conf.d# mv default.conf default.conf.sav
root@master:/etc/nginx/conf.d# cat default.conf
upstream keep {
        server 192.168.1.193:8888  weight=20 max_fails=2 fail_timeout=30s;
        ip_hash;
                 }
server {
    listen       80;
    server_name  localhost;

location / {
        proxy_pass      http://keep;
        proxy_set_header HOST   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-FOR $proxy_add_x_forwarded_for;
                }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

测试183的80端口是否能访问到193的8888端口

                        

wKioL1Plj2PSmMrJAAAiwK7kAPM785.jpg


slave主机配置

    由于本次安装是非生产环境,so对于nginx不进行优化

root@slave:/etc/nginx/conf.d# mv default.conf default.conf.sav

root@slave:/etc/nginx/conf.d# cp default.conf.sav default.conf

root@slave:/etc/nginx/conf.d# cat default.conf
upstream keep {
        server 192.168.1.199:8888  weight=20 max_fails=2 fail_timeout=30s;
        ip_hash;
                 }
server {
    listen       80;
    server_name  localhost;


        root   /usr/share/nginx/html;
        index  index.html index.htm;
location / {
        proxy_pass      http://keep;
        proxy_set_header HOST   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-FOR $proxy_add_x_forwarded_for;
                }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    error_page   500 502 503 504  /50x.html;
}
root@slave:/etc/nginx/conf.d# service  nginx restart

测试188的80端口是否能访问到199的8888端口

   

wKioL1Plk7Wxf3p8AAAjQR3AFb0427.jpg


四、安装ipvsadm

 root@master:~# apt-get install ipvsadm  安装ipvsadmin模块

安装最后报警提示:ipvsadm is not configured to run

    update-rc.d: warning: ipvsadm start runlevel arguments (2 3 4 5) do not match LSB  Default-Start values (2 3 5)
    * ipvsadm is not configured to run. Please run dpkg-reconfigure ipvsadm

解决办法:

    运行:dpkg-reconfigure ipvsadm进行配置ipvsadm

第一个提示:是否把ipvs加如开机加载当中 选择yes

第二个提示:本机是master还是backup,如果是mastr就选择master反之

第三个提示:选择要生成的vip是绑定到那个物理网卡上

重启ipvsadm成功

wKiom1PllEDiZOVZAAEJX8nJQUk833.jpg


五、安装keeplived模块

master 安装keeplived

root@master:~# apt-get install keepalived

手动修改配置文件

root@master:/etc/keepalived# cat /etc/keepalived/keepalived.conf
 global_defs {
#定义接收邮箱
   notification_email {
       root@localhost
   }
#定义发送邮箱(可随意,即便不存在也可以)
   notification_email_from admin@localhost
#定义邮件发送服务器
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
#监控脚本配置段
#为keepalived定义服务检测脚本,定义关键字就是vrrp_script
vrrp_script chk_keepalived_down {
#如果存在down文件,则返回1(表示keepalived服务失效),否则返回0(表示服务没有失效)
    script "[ -e /etc/keepalived/down ] && exit 1 || exit 0"
#检测间隔1秒
    interval 1
#如果失效,权重减2
    weight -2
}
#提供检测nginx的高可用脚本
vrrp_script chk_nginx {
#检测nginx是否存在,如果存在返回0,如果不存在返回1
    script "killall -0 nginx"
#检测间隔时间
    interval1 2
#如果失败,权重减2
    weight -2
#失败检测次数
    fall 2
#成功检测次数
    rise 1
}
#VRRP配置段
#定义vrrp实例VI_1(即一个虚拟路由器),也同时定义vrrp的检测脚本
vrrp_instance VI_1 {
#若权重高,则定义此实例为主(主从区别),从为BACKUP
    state MASTER
#定义VIP绑定接口
    interface eth0
 #发送多播包的地址,心跳信息,若不指定,使用上个选项的接口,建议使用内部接口IP
        mcast_src_ip 192.168.1.186
#定义vrrp虚拟路由唯一标识,即确定vmac
    virtual_router_id 51
#初始权重(主从区别),从需要比此数据小
    priority 100
#通告
    advert_int 1
#认证机制,防止未知设备,成为节点
    authentication {
#认证类型:密码
        auth_type PASS
#认证密钥随机字符串
        auth_pass 1111
    }
#定义vip
    virtual_ipaddress {
        192.168.1.165
    }
#追踪脚本,调用检查脚本
    track_script {
    chk_keepalived_down
    chk_nginx
    chk_nginx
    }
}

启动keeplived服务查看vip是否生成,ping vip看是否ping通

root@master:/etc/keepalived# ip add sho
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:8f:04:ca brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.186/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.165/32 scope global eth0
    inet6 fe80::20c:29ff:fe8f:4ca/64 scope link
       valid_lft forever preferred_lft forever

wKioL1Plm_PimCpIAAQPhI3386g659.jpg

backup 安装keeplived

root@slave:/etc/nginx/conf.d#  apt-get install ipvsadm

root@slave:/etc/nginx/conf.d# dpkg-reconfigure ipvsadm

root@slave:/etc/nginx/conf.d# service ipvsadm restart

root@slave:/etc/nginx/conf.d# apt-get install keepalived

root@slave:/etc/nginx/conf.d# cat /etc/keepalived/keepalived.conf
global_defs {
#定义接收邮箱
   notification_email {
       root@localhost
   }
#定义发送邮箱(可随意,即便不存在也可以)
   notification_email_from admin@localhost
#定义邮件发送服务器
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
#监控脚本配置段
#为keepalived定义服务检测脚本,定义关键字就是vrrp_script
vrrp_script chk_keepalived_down {
#如果存在down文件,则返回1(表示keepalived服务失效),否则返回0(表示服务没有失效)
    script "[ -e /etc/keepalived/down ] && exit 1 || exit 0"
#检测间隔1秒
    interval 1
#如果失效,权重减2
    weight -2
}
#提供检测nginx的高可用脚本
vrrp_script chk_nginx {
#检测nginx是否存在,如果存在返回0,如果不存在返回1
    script "killall -0 nginx"
#检测间隔时间
    interval1 2
#如果失败,权重减2
    weight -2
#失败检测次数
    fall 2
#成功检测次数
    rise 1
}
#VRRP配置段
#定义vrrp实例VI_1(即一个虚拟路由器),也同时定义vrrp的检测脚本
vrrp_instance VI_1 {
#若权重高,则定义此实例为主(主从区别),从为BACKUP
    state BACKUP
#定义VIP绑定接口
    interface eth0
 #发送多播包的地址,心跳信息,若不指定,使用上个选项的接口,建议使用内部接口IP
        mcast_src_ip 192.168.1.188
#定义vrrp虚拟路由唯一标识,即确定vmac
    virtual_router_id 51
#初始权重(主从区别),从需要比此数据小
    priority 99
#通告
    advert_int 1
#认证机制,防止未知设备,成为节点
    authentication {
#认证类型:密码
        auth_type PASS
#认证密钥随机字符串
        auth_pass 1111
    }
#定义vip
    virtual_ipaddress {
        192.168.1.165
    }
#追踪脚本,调用检查脚本
    track_script {
    chk_keepalived_down
    chk_nginx
    chk_nginx
    }
}

root@slave:/etc/nginx/conf.d# service  keepalived start

root@slave:/etc/nginx/conf.d# ip add show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:02:d9:dd brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.188/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::20c:29ff:fe02:d9dd/64 scope link
       valid_lft forever preferred_lft forever

当slave启动后我们发现并没有vip因为master并没有down手动把master的keeplived stop 查看vip

root@master:/etc/keepalived# service keepalived stop

root@slave:/etc/nginx/conf.d# ip add show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:02:d9:dd brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.188/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.165/32 scope global eth0
    inet6 fe80::20c:29ff:fe02:d9dd/64 scope link
       valid_lft forever preferred_lft forever


六、使用web测试效果

把master和slave的keeplived服务全部启动 使用web访问VIP

wKiom1PlnY6z4CiRAAAitFSOW3k937.jpg

停掉master后 使用web访问VIP


wKioL1PlnvKDg4U-AAAnj_Loigo751.jpg


再次把master启动 使用web访问VIP

wKiom1Plnhuh88tuAABFuWFtfgk863.jpg

上面测试的只是假设keeplived服务器down 博友们可以测试假设nginx down测试效果

我已经测试没问题,这里就不在啰嗦了