准备两台机器130和132,130做为master,132做为backupphp
两台机器都执行yum install -y keepalivedhtml
两台机器都安装nginx,其中130上已经编译安装过nginx,132上须要yum安装nginx: yum install -y nginxmysql
设定vip为100linux
编辑130上keepalived配置文件,内容获取地址nginx
130编辑监控脚本,内容获取地址https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.confgit
给脚本755权限web
systemctl start keepalived 130启动服务算法
132上编辑配置文件,内容获取地址sql
132上编辑监控脚本,内容获取地址apache
给脚本755权限
132上也启动服务 systemctl start keepalived
1.首先准备两台机器,都安装keepalived
A机器,安装keepalived [root@xuexi-001 ~]# yum install -y keepalived B机器,安装keepalived [root@localhost ~]# yum install -y keepalived
2.这里使用 nginx ,把它做为一个高可用的对象——>使用nginx做为演示对象的缘由,由于nginx在工做中,在生产环境中,不少企业把nginx作一个负载均衡器
3.如果A、B机器没有装nginx服务,能够直接 yum安装
B机器yum安装nginx [root@localhost ~]# yum install -y epel-release [root@localhost ~]# yum install -y nginx [root@localhost ~]# systemctl start nginx [root@localhost ~]# ps aux | grep nginx root 1410 0.0 0.2 120752 2096 ? Ss 22:26 0:00 nginx: master process /usr/sbin/nginx nginx 1411 0.0 0.3 121136 3124 ? S 22:26 0:00 nginx: worker process root 1413 0.0 0.0 112676 984 pts/0 R+ 22:27 0:00 grep --color=auto nginx
4.更改keepalived配置文件了,内容地址
A机器更改配置文件 [root@xuexi-001 ~]# ls /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf [root@xuexi-001 ~]# > !$ //直接清空文件内容了 > /etc/keepalived/keepalived.conf [root@xuexi-001 ~]# cat /etc/keepalived/keepalived.conf [root@xuexi-001 ~]# vim /etc/keepalived/keepalived.conf //去文件地址去下载内容 将拷贝的内容复制进去 只须要改网卡名字和飘逸IP为192.168.133.100 -----------------全局配置 ------------------ global_defs { //global_defs 全局配置标识 notification_email { //notification_email用于设置报警邮件地址 xuexi1@163.com //能够设置多个,每行一个 } notification_email_from xuexi1@163.com //设置邮件发送地址 smtp_server 127.0.0.1 //设置邮件的smtp server地址 smtp_connect_timeout 30 //设置链接smtp sever超时时间 router_id LVS_DEVEL } ---------------------------- VRRP配置 --------------------------------------- vrrp_script chk_nginx { script "/usr/local/sbin/check_ng.sh" //检查服务是否正常,经过写脚本实现,脚本检查服务健康状态 interval 3 //检查的时间间断是3秒 } vrrp_instance VI_1 { //VRRP配置标识 VI_1是实例名称 state MASTER //定义master相关 interface ens33 //经过vrrp协议去通讯、去发广播。配置时,需注意本身的网卡名称 virtual_router_id 51 //定义路由器ID ,配置的时候和从机器一致 priority 100 //权重,主角色和从角色的权重是不一样的 advert_int 1 //设定MASTER与BACKUP主机质检同步检查的时间间隔,单位为秒 authentication { //认证相关信息 auth_type PASS //这里认证的类型是PASS auth_pass aminglinux>com //密码的形式是一个字符串 } virtual_ipaddress { //设置虚拟IP地址 (VIP),又叫作漂移IP地址 192.168.5.100 //更改成192.168.5.100 } track_script { //加载脚本 chk_nginx } } 保存退出
5.定义监控脚本,脚本内容获取地址https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh
A机器定义监控脚本 [root@xuexi-001 ~]# vi /usr/local/sbin/check_ng.sh #!/bin/bash #时间变量,用于记录日志 d=`date --date today +%Y%m%d_%H:%M:%S` #计算nginx进程数量 n=`ps -C nginx --no-heading|wc -l` #若是进程为0,则启动nginx,而且再次检测nginx进程数量, #若是还为0,说明nginx没法启动,此时须要关闭keepalived if [ $n -eq "0" ]; then /etc/init.d/nginx start n2=`ps -C nginx --no-heading|wc -l` if [ $n2 -eq "0" ]; then echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log systemctl stop keepalived fi fi 保存退出
6.脚本建立完以后,还须要改变脚本的权限(不更改权限,就没法自动加载脚本,那就没法启动keepalived服务)
[root@xuexi-001 ~]# chmod 755 /usr/local/sbin/check_ng.sh
7.启动keepalived服务,并查看是否启动成功(PS:启动不成功,有多是防火墙未关闭或者规则限制致使的)
[root@xuexi-001 ~]# systemctl start keepalived [root@xuexi-001 ~]# ps aux | grep keepalived root 2276 0.0 0.0 118652 1396 ? Ss 23:11 0:00 /usr/sbin/keepalived -D root 2277 0.0 0.1 127516 3304 ? S 23:11 0:00 /usr/sbin/keepalived -D root 2278 0.0 0.1 127456 2840 ? S 23:11 0:00 /usr/sbin/keepalived -D root 2303 0.0 0.0 112720 976 pts/0 R+ 23:11 0:00 grep --color=auto keepalived
8.查看nginx服务进程
[root@xuexi-001 ~]# ps aux |grep nginx root 1035 0.0 0.0 46040 1292 ? Ss 20:14 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 1041 0.0 0.2 48576 4188 ? S 20:14 0:00 nginx: worker process nobody 1042 0.0 0.2 48576 3928 ? S 20:14 0:00 nginx: worker process root 2389 0.0 0.0 112720 968 pts/0 R+ 23:12 0:00 grep --color=auto nginx
9.这时中止nginx服务
[root@xuexi-001 ~]# /etc/init.d/nginx stop Stopping nginx (via systemctl): [ 肯定 ]
10.再来查看nginx服务进程,会看到自动加载了
[root@xuexi-001 ~]# ps aux |grep nginx root 2478 0.0 0.0 46040 1292 ? Ss 23:12 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 2480 0.0 0.2 48576 4192 ? S 23:12 0:00 nginx: worker process nobody 2481 0.0 0.2 48576 3928 ? S 23:12 0:00 nginx: worker process root 2515 0.0 0.0 112720 972 pts/0 R+ 23:12 0:00 grep --color=auto nginx
11.keepalived日志文件路径
12.查看ip地址,使用 ip add 命令,而不能使用ifconfig命令,由于 ifconfig命令 是没法查看到vip192.168.5.100这个IP的
[root@xuexi-001 ~]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:b3:a2:bf brd ff:ff:ff:ff:ff:ff inet 192.168.5.130/24 brd 192.168.5.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.5.100/32 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.5.150/24 brd 192.168.5.255 scope global secondary ens33:0 valid_lft forever preferred_lft forever inet6 fe80::9625:3e1d:12c7:4fe6/64 scope link valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:b3:a2:c9 brd ff:ff:ff:ff:ff:ff
13.检查A、B 机器下防火墙和selinux是否关闭了,若没有关闭,可能会致使实验失败
以上就是主机器A的配置
1.在B机器yum安装nginx和keepalived
[root@hf-01 ~]# yum install -y epel-release [root@hf-01 ~]# yum install -y nginx
2.关闭B机器的防火墙和selinux
3.自定义B机器keepalived配置文件,内容获取地址,更改虚拟IP和主同样的 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf
首先清空B机器keepalived里面自带的配置文件 [root@localhost ~]# > /etc/keepalived/keepalived.conf 而后复制配置文件并粘贴进去,更改虚拟IP和主同样的 [root@localhost ~]# vi !$ vi /etc/keepalived/keepalived.conf global_defs { notification_email { aming@aminglinux.com } notification_email_from root@aminglinux.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/usr/local/sbin/check_ng.sh" interval 3 } vrrp_instance VI_1 { state BACKUP //这里 和master不同的名字 interface ens33 //网卡和当前机器一致,不然没法启动keepalived服务 virtual_router_id 51 //和主机器 保持一致 priority 90 //权重,要比主机器小的数值 advert_int 1 authentication { auth_type PASS auth_pass aminglinux>com } virtual_ipaddress { 192.168.5.100 //这里更改成192.168.5.100 } track_script { chk_nginx } } 保存退出
4.定义监控脚本,路径再keepalived里面已定义过,脚本内容地址 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh
[root@localhost ~]# vi /usr/local/sbin/check_ng.sh #时间变量,用于记录日志 d=`date --date today +%Y%m%d_%H:%M:%S` #计算nginx进程数量 n=`ps -C nginx --no-heading|wc -l` #若是进程为0,则启动nginx,而且再次检测nginx进程数量, #若是还为0,说明nginx没法启动,此时须要关闭keepalived if [ $n -eq "0" ]; then systemctl start nginx n2=`ps -C nginx --no-heading|wc -l` if [ $n2 -eq "0" ]; then echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log systemctl stop keepalived fi fi 保存退出
5.改动脚本的权限,设置为755权限
[root@localhost ~]# chmod 755 /usr/local/sbin/check_ng.sh
6.B机器启动keepalived服务
[root@localhost ~]# systemctl start keepalived [root@localhost ~]# ps aux |grep keepalived root 1499 0.0 0.1 118608 1388 ? Ss 23:27 0:00 /usr/sbin/keepalived -D root 1500 0.0 0.3 120732 3112 ? S 23:27 0:00 /usr/sbin/keepalived -D root 1501 0.0 0.2 120732 2532 ? S 23:27 0:00 /usr/sbin/keepalived -D root 1538 0.0 0.0 112676 984 pts/0 R+ 23:27 0:00 grep --color=auto keepalived
A机器,是源码包安装的nginx(PS:这是lnmp配置好的环境虚拟主机内容)
[root@xuexi-001 ~]# cat /usr/local/nginx/conf/vhost/ aaa.com.conf proxy.conf test.com.conf load.conf ssl.conf [root@xuexi-001 ~]# cat /usr/local/nginx/conf/vhost/aaa.com.conf server { listen 80 default_server; server_name aaa.com index index.html index.htm index.php; root /data/wwwroot/default; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/aming.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name; } } [root@xuexi-001 ~]# cat /data/wwwroot/default/index.html master This is the default site.
[root@localhost ~]# vi /usr/share/nginx/html/index.html backup.backup
1.模拟线上生产环境,主机器宕机环境,最简单直接的方法,就是直接关闭keepalived服务
2.关闭master机器(即A机器)上的keepalived服务关闭
[root@xuexi-001 ~]# systemctl stop keepalived
3.查看A机器上的VIP被已经释放掉了
[root@xuexi-001 ~]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:b3:a2:bf brd ff:ff:ff:ff:ff:ff inet 192.168.5.130/24 brd 192.168.5.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.5.150/24 brd 192.168.5.255 scope global secondary ens33:0 valid_lft forever preferred_lft forever inet6 fe80::9625:3e1d:12c7:4fe6/64 scope link valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:b3:a2:c9 brd ff:ff:ff:ff:ff:ff
4.查看backup机器(即B机器)在监听VIP
[root@localhost ~]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:36:a3:32 brd ff:ff:ff:ff:ff:ff inet 192.168.5.133/24 brd 192.168.5.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.5.100/32 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::cf14:5db2:1b49:f0c2/64 scope link valid_lft forever preferred_lft forever
5.查看B机器日志
[root@localhost ~]# tail /var/log/messages Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100
6.浏览器访问vip,会看到已经变成backup机器上的了
7.在master机器(即A机器)启动keepalived服务,会看到vip这个IP马上回来了
[root@xuexi-001 ~]# systemctl start keepalived [root@xuexi-001 ~]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:b3:a2:bf brd ff:ff:ff:ff:ff:ff inet 192.168.5.130/24 brd 192.168.5.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.5.100/32 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.5.150/24 brd 192.168.5.255 scope global secondary ens33:0 valid_lft forever preferred_lft forever inet6 fe80::9625:3e1d:12c7:4fe6/64 scope link valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:b3:a2:c9 brd ff:ff:ff:ff:ff:ff inet6 fe80::44c4:9bed:dd1f:6c01/64 scope link valid_lft forever preferred_lft forever
8.查看B机器日志变化
[root@localhost ~]# tail /var/log/messages Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 [root@localhost ~]# tail /var/log/messages Sep 3 23:46:52 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:46:57 localhost Keepalived_vrrp[1501]: Sending gratuitous ARP on ens33 for 192.168.5.100 Sep 3 23:50:01 localhost Keepalived_vrrp[1501]: VRRP_Instance(VI_1) Received advert with higher priority 100, ours 90 Sep 3 23:50:01 localhost Keepalived_vrrp[1501]: VRRP_Instance(VI_1) Entering BACKUP STATE Sep 3 23:50:01 localhost Keepalived_vrrp[1501]: VRRP_Instance(VI_1) removing protocol VIPs.
一、 LVS NAT模式
二、 LVS IP Tunnel模式
三、LVS DR模式
[root@xuexi-003 ~]# yum install -y iptables-services [root@xuexi-003 ~]# systemctl start iptables [root@xuexi-003 ~]# systemctl enable iptables Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service. [root@xuexi-003 ~]# iptables -F [root@xuexi-003 ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables: [ 肯定 ]
而后还须要关闭selinux 全部的机器都须要更改
[root@xuexi-003 ~]# getenforce Disabled [root@xuexi-003 ~]# setenforce 0 setenforce: SELinux is disabled [root@xuexi-003 ~]# vi /etc/selinux/config 更改配置文件关闭selinux
一、安装ipvsadm
[root@xuexi-001 ~]# yum install -y ipvsadm
二、在dir上编写脚本,vim /usr/local/sbin/lvs_nat.sh //内容以下
配置文件内容 #! /bin/bash # director 服务器上开启路由转发功能,不开启的话没有办法把数据传输到后面的rs上面 echo 1 > /proc/sys/net/ipv4/ip_forward # 关闭icmp的重定向 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects # 注意区分网卡名字,两个网卡分别为ens33和ens37 echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects # director 设置nat防火墙 iptables -t nat -F #清空iptables 规则 iptables -t nat -X #清空链 iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -j MASQUERADE #能够实现同网段的内网上网 # director设置ipvsadm IPVSADM='/usr/sbin/ipvsadm' $IPVSADM -C #清空规则 $IPVSADM -A -t 192.168.81.144:80 -s wlc -p 3 #设置一个规则 指定使用的什么规则(大规则) $IPVSADM -a -t 192.168.81.144:80 -r 192.168.5.133:80 -m -w 1 $IPVSADM -a -t 192.168.81.144:80 -r 192.168.5.134:80 -m -w 1 #具体的规则(小规则)
三、没有输出内容,说明配置没有问题
[root@xuexi-001 ~]# sh /usr/local/sbin/lvs_nat.sh [root@xuexi-001 ~]#
四、
#rs1 [root@xuexi-002 ~]# systemctl start nginx [root@xuexi-002 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 547/rpcbind tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1204/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 802/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1047/master tcp6 0 0 :::111 :::* LISTEN 547/rpcbind tcp6 0 0 :::80 :::* LISTEN 1204/nginx: master tcp6 0 0 :::22 :::* LISTEN 802/sshd tcp6 0 0 ::1:25 :::* LISTEN 1047/master tcp6 0 0 :::3306 :::* LISTEN 1045/mysqld
#rs2 [root@xuexi-003 ~]# systemctl start nginx [root@xuexi-003 ~]# ps aux |grep nginx root 1200 0.0 0.2 120752 2088 ? Ss 23:39 0:00 nginx: master process /usr/sbin/nginx nginx 1201 0.0 0.3 121136 3116 ? S 23:39 0:00 nginx: worker process root 1204 0.0 0.0 112676 980 pts/0 R+ 23:39 0:00 grep --color=auto nginx [root@xuexi-003 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 519/rpcbind tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1200/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 809/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1057/master tcp6 0 0 :::111 :::* LISTEN 519/rpcbind tcp6 0 0 :::80 :::* LISTEN 1200/nginx: master tcp6 0 0 :::22 :::* LISTEN 809/sshd tcp6 0 0 ::1:25 :::* LISTEN 1057/master tcp6 0 0 :::3306 :::* LISTEN 1015/mysqld
#rs1 [root@xuexi-002 ~]# curl localhost backup.backup [root@xuexi-002 ~]# vi /usr/share/nginx/html/index.html xuexi-002 192.168.5.133
#rs2 [root@xuexi-003 ~]# curl localhost backup.backup [root@xuexi-003 ~]# vi /usr/share/nginx/html/index.html xuexi-003 192.168.5.134
能够在dir上更改一下规则,编辑配置文件vim /usr/local/sbin/lvs_nat.sh 将$IPVSADM -A -t 192.168.81.144:80 -s wlc -p 3 后面的-p 3 去掉
查看ipvsadm 设置的规则
[root@xuexi-001 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.81.144:80 wlc -> 192.168.5.133:80 Masq 1 2 0 -> 192.168.5.134:80 Masq 1 0 4
[root@xuexi-001 ~]# curl 192.168.81.144 xuexi-003 192.168.5.134 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-003 192.168.5.134 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-002 192.168.5.133 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-003 192.168.5.134 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-002 192.168.5.133 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-003 192.168.5.134 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-002 192.168.5.133 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-003 192.168.5.134 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-002 192.168.5.133 [root@xuexi-001 ~]# curl 192.168.81.144 xuexi-003 192.168.5.134
测试结果
(dir)分发器上的配置
[root@xuexi-001 ~]# vi /usr/local/sbin/lvs_dr.sh #! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward ipv=/usr/sbin/ipvsadm vip=192.168.5.200 rs1=192.168.5.133 rs2=192.168.5.134 ifdown ens33 ifup ens33 #注意这里的网卡名字 ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip dev ens33:2 $ipv -C $ipv -A -t $vip:80 -s wrr $ipv -a -t $vip:80 -r $rs1:80 -g -w 1 $ipv -a -t $vip:80 -r $rs2:80 -g -w 1 [root@xuexi-001 ~]# sh /usr/local/sbin/lvs_dr.sh 成功断开设备 'ens33'。 链接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
rs1
[root@xuexi-002 ~]# vi /usr/local/sbin/lvs_rs.sh #/bin/bash vip=192.168.5.200 #把vip绑定在lo上,是为了实现rs直接把结果返回给客户端 ifdown lo ifup lo ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 #如下操做为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端 #参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
rs2
[root@xuexi-003 ~]# vi /usr/local/sbin/lvs_rs.sh #/bin/bash vip=192.168.5.200 #把vip绑定在lo上,是为了实现rs直接把结果返回给客户端 ifdown lo ifup lo ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 #如下操做为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端 #参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
1.准备三台机器,分别为
2.在dir分发器(A机器)上,清空ipvsadm规则,并查看ipvsadm规则,会发现已经清空
[root@xuexi-001 ~]# ipvsadm -C [root@xuexi-001 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
3.在分发器(即A机器)上编辑配置文件,在/etc/keepalived/keepalived.conf 配置,配置文件内容
[root@xuexi-001 ~]# vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { #备用服务器上为 BACKUP state MASTER #绑定vip的网卡为ens33,你的网卡和阿铭的可能不同,这里须要你改一下 interface ens33 virtual_router_id 51 #备用服务器上为90 priority 100 advert_int 1 authentication { auth_type PASS auth_pass aminglinux } virtual_ipaddress { 192.168.5.200 } } virtual_server 192.168.5.200 80 { #(每隔10秒查询realserver状态) delay_loop 10 #(lvs 算法) lb_algo wlc #(DR模式) lb_kind DR #(同一IP的链接60秒内被分配到同一台realserver) persistence_timeout 60 #(用TCP协议检查realserver状态) protocol TCP real_server 192.168.5.133 80 { #(权重) weight 100 TCP_CHECK { #(10秒无响应超时) connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.5.134 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } :wq
4.启动keepalived服务,查看keepalived服务
[root@xuexi-001 ~]# systemctl start keepalived [root@xuexi-001 ~]# ps aux |grep keepalived root 1678 0.0 0.0 118652 1396 ? Ss 07:44 0:00 /usr/sbin/keepalived -D root 1679 0.0 0.1 127520 3332 ? S 07:44 0:00 /usr/sbin/keepalived -D root 1680 0.0 0.1 127388 2616 ? S 07:44 0:00 /usr/sbin/keepalived -D root 1685 0.0 0.0 112720 976 pts/0 S+ 07:44 0:00 grep --color=auto keepalived
5.查看IP,会看到虚拟IP依然存在
[root@xuexi-001 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:b3:a2:bf brd ff:ff:ff:ff:ff:ff inet 192.168.5.130/24 brd 192.168.5.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.5.200/32 brd 192.168.5.200 scope global ens33:2 # 虚拟IP 依旧存在 valid_lft forever preferred_lft forever inet 192.168.5.150/24 brd 192.168.5.255 scope global secondary ens33:0 valid_lft forever preferred_lft forever inet6 fe80::9625:3e1d:12c7:4fe6/64 scope link valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:b3:a2:c9 brd ff:ff:ff:ff:ff:ff inet 192.168.81.144/24 brd 192.168.81.255 scope global ens37 valid_lft forever preferred_lft forever inet6 fe80::44c4:9bed:dd1f:6c01/64 scope link valid_lft forever preferred_lft forever
6.查看ipvsadm规则
[root@xuexi-001 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.5.200:80 wlc
7.这时关闭keepalived服务,再来查看ip,会看到虚拟IP停掉了
[root@xuexi-001 ~]# systemctl stop keepalived [root@xuexi-001 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:b3:a2:bf brd ff:ff:ff:ff:ff:ff inet 192.168.5.130/24 brd 192.168.5.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.5.150/24 brd 192.168.5.255 scope global secondary ens33:0 valid_lft forever preferred_lft forever inet6 fe80::9625:3e1d:12c7:4fe6/64 scope link valid_lft forever preferred_lft forever 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:b3:a2:c9 brd ff:ff:ff:ff:ff:ff inet 192.168.81.144/24 brd 192.168.81.255 scope global ens37 valid_lft forever preferred_lft forever inet6 fe80::44c4:9bed:dd1f:6c01/64 scope link valid_lft forever preferred_lft forever
8.再来查看规则,会发现没有启动规则
[root@xuexi-001 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
9.这时启动keepalived,再来查看规则
[root@xuexi-001 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.5.200:80 wlc -> 192.168.5.133:80 Route 100 2 0 -> 192.168.5.134:80 Route 100 1 1
10.注意事项:两点
echo 1 > /proc/sys/net/ipv4/ip_forward //打开端口转发
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端 ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 #如下操做为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce