一、检测系统信息
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端口
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端口
四、安装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成功
五、安装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
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
停掉master后 使用web访问VIP
再次把master启动 使用web访问VIP
上面测试的只是假设keeplived服务器down 博友们可以测试假设nginx down测试效果
我已经测试没问题,这里就不在啰嗦了