59519751 发表于 2018-12-30 12:33:51

基于centos7上面搭建LVS+keepalived

基于centos7上面搭建LVS+keepalived
  地址规划调度服务器


[*]DR1 主服务器:192.168.10.173
[*]DR2 备份服务器:192.168.10.174
  调度服务器


[*]wed1:192.168.10.171
[*]web2:192.168.10.172
  虚拟ip


[*]vip:192.168.10.10
  客户机


[*]client:192.168.10.11
  1:配置调度服务器DR1,DR2

# yum install ipvsadm keepalived -y
  修改DR调度服务器ip地址


[*]DR1

# vim /etc/sysconfig/network-scripts/ifcfg-ens33
# ifconfig
ens33: flags=4163mtu 1500
inet 192.168.10.173netmask 255.255.255.0broadcast 192.168.10.255
inet6 fe80::4f55:9684:f902:826aprefixlen 64scopeid 0x20
ether 00:0c:29:a8:47:adtxqueuelen 1000(Ethernet)
RX packets 10547bytes 11417482 (10.8 MiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 4596bytes 318550 (311.0 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
device interrupt 19base 0x2000

  改调度服务器的主配置文件

# vim /etc/sysctl.conf
# cat /etc/sysctl.conf | grep net
net.ipv4.ip_forward=1 #路由转发功能
net.ipv4.conf.all.send_redirects = 0 #关闭proc里面的重定向
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
# sysctl -p #重启使之生效


[*]创建虚拟网卡

# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33:0
# vim /etc/sysconfig/network-scripts/ifcfg-ens33:0 #把拷贝里面的东西全部删除添加以下内容
# cat /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0 #虚拟网卡名称
ONBOOT=yes#虚拟网卡开启
IPADDR=192.168.100.10 #虚拟ip
NETMASK=255.255.255.0 #子网掩码
# ifup /etc/sysconfig/network-scripts/ifcfg-ens33:0 #启用虚拟网卡
# ifconfig
ens33: flags=4163mtu 1500
inet 192.168.10.173netmask 255.255.255.0broadcast 192.168.10.255
inet6 fe80::4f55:9684:f902:826aprefixlen 64scopeid 0x20
ether 00:0c:29:a8:47:adtxqueuelen 1000(Ethernet)
RX packets 11849bytes 11530565 (10.9 MiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 5254bytes 396894 (387.5 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
device interrupt 19base 0x2000
ens33:0: flags=4163mtu 1500
inet 192.168.100.10netmask 255.255.255.0broadcast 192.168.100.255
ether 00:0c:29:a8:47:adtxqueuelen 1000(Ethernet)
device interrupt 19base 0x2000


[*]在/etc/init.d/底下添加服务启动脚本

# vim /etc/init.d/fir.sh
# cat /etc/init.d/fir.sh
#!/bin/bash
GW=192.168.10.1 #网关
VIP=192.168.10.10 #虚拟ip
RIP1=192.168.10.172 #节点服务器ip
RIP2=192.168.10.171
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev ens33:0
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
echo "ipvsadm starting --------------------"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route del $VIP
echo "ipvsamd stoped----------------------"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped---------------"
exit 1
else
echo "ipvsamd Runing ---------"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
# chmod +x /etc/init.d/fir.sh
# service fir.sh start #启动脚本
ipvsadm starting -------------------- #执行成功
# systemctl status ipvsadm.service #查看状态
● ipvsadm.service - Initialise the Linux Virtual Server
Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
Active: active (exited) since 五 2018-06-22 10:09:34 CST; 1min 5s ago
Process: 7835 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited, status=0/SUCCESS)
Main PID: 7835 (code=exited, status=0/SUCCESS)
6月 22 10:09:33 localhost.localdomain systemd: Starting Initialise the Linux Virtual Server...
6月 22 10:09:34 localhost.localdomain systemd: Started Initialise the Linux Virtual Server.

[*]配置keepalived

# cd /etc/keepalived/
# vim keepalived.conf
smtp_server 127.0.0.1 #监听本地地址
vrrp_instance VI_1 {
state MASTER #从服务器改为BACKUP
router_id LVS_01       #从服务器改为02
virtual_router_id 10 #默认51组号根据需求更改 主服务器组号10从服务器也要改成10
priority 100 #优先级100 从服务器优先级小于100就行
auth_pass 951116 #密码改为自己的预定义密码
virtual_ipaddress {
192.168.10.10 #虚拟ip保留一个就行
}
virtual_server 192.168.10.10 80 { #对应着虚拟ip地址
delay_loop 6
lb_algo rr #rr轮询机制
lb_kind DR #NAT改为DR
persistence_timeout 50
protocol TCP
real_server 192.168.10.171 80 { #改为真实节点ip
weight 1
TCP_CHECK { #SSL_GET改为TCP_CHECK
connect_port 80 #申明连接端口
connect_timeout 3 #在这行上面添加
nb_get_retry 3
delay_before_retry 3
}   
}   
#中间8行删除
复制上面9行申明另一个节点服务器
real_server 192.168.10.172 80 {
weight 1
TCP_CHECK { #SSL_GET改为TCP_CHECK
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}   
}
# ip addr show dev ens33:0 #检查虚拟网卡
2: ens33:mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:a8:47:ad brd ff:ff:ff:ff:ff:ff
inet 192.168.10.173/24 brd 192.168.10.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.10.10/32 brd 192.168.10.10 scope global ens33:0
valid_lft forever preferred_lft forever
inet6 fe80::4f55:9684:f902:826a/64 scope link
valid_lft forever preferred_lft forever
# systemctl start keepalived.service#开启服务
# systemctl status keepalived.service#检查服务有没有开启
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since 五 2018-06-22 13:09:08 CST; 5s ago
Process: 9546 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 9547 (keepalived)
CGroup: /system.slice/keepalived.service
└─9547 /usr/sbin/keepalived -D

# systemctl stop firewalld.service#关闭防火墙
# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: inactive (dead) since 五 2018-06-22 13:11:18 CST; 2s ago
Docs: man:firewalld(1)
Main PID: 673 (code=exited, status=0/SUCCESS)
6月 20 22:04:32 localhost.localdomain systemd: Starting firewalld - dynamic firewall daemon...
6月 20 22:04:44 localhost.localdomain systemd: Started firewalld - dynamic firewall daemon.
6月 20 22:04:50 localhost.localdomain firewalld: WARNING: ICMP type 'beyond-scope' is not suppor...v6.
6月 20 22:04:50 localhost.localdomain firewalld: WARNING: beyond-scope: INVALID_ICMPTYPE: No sup...me.
6月 20 22:04:50 localhost.localdomain firewalld: WARNING: ICMP type 'failed-policy' is not suppo...v6.
6月 20 22:04:50 localhost.localdomain firewalld: WARNING: failed-policy: INVALID_ICMPTYPE: No su...me.
6月 20 22:04:50 localhost.localdomain firewalld: WARNING: ICMP type 'reject-route' is not suppor...v6.
6月 20 22:04:50 localhost.localdomain firewalld: WARNING: reject-route: INVALID_ICMPTYPE: No sup...me.
6月 22 13:11:07 localhost.localdomain systemd: Stopping firewalld - dynamic firewall daemon...
6月 22 13:11:18 localhost.localdomain systemd: Stopped firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.
# setenforce 0 #关闭安全模块


[*]DR2

# vim /etc/sysconfig/network-scripts/ifcfg-ens33
# ifconfig
ens33: flags=4163mtu 1500
inet 192.168.10.174netmask 255.255.255.0broadcast 192.168.10.255
inet6 fe80::dd16:ddab:ca60:3922prefixlen 64scopeid 0x20
ether 00:0c:29:39:91:0btxqueuelen 1000(Ethernet)
RX packets 10674bytes 11430615 (10.9 MiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 4643bytes 332468 (324.6 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
device interrupt 19base 0x2000

[*]修改内核文件在/etc/stsctl.conf

# vim /etc/sysctl.conf
# cat /etc/sysctl.conf | grep net
net.ipv4.ip_forward=1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
# sysctl -p #启动
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[*]配置虚拟ip

# cd /etc/sysconfig/network-scripts/
# cp ifcfg-ens33 ifcfg-ens33:0
# cat ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.10
NETMASK=255.255.255.0
# ifup ens33:0 #这直接启动会有个报错ip冲突
ERROR   : Error, some other host (00:0C:29:A8:47:AD) already uses address 192.168.10.10
# systemctl restart network #重启一下网卡再启动虚拟网卡
# ifup ens33:0
# ifconfig
ens33:0: flags=4163mtu 1500
inet 192.168.10.10netmask 255.255.255.0broadcast 192.168.10.255
ether 00:0c:29:39:91:0btxqueuelen 1000(Ethernet)
device interrupt 19base 0x2000

[*]做ipvsadm启动脚本

# vim ipvs.sh
# cat ipvs.sh
#!/bin/bash
GW=192.168.10.1
VIP=192.168.10.10
RIP1=192.168.10.171
RIP2=192.168.10.172
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev ens33:0
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
echo "ipvsadm starting --------------------"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route del $VIP
echo "ipvsamd stoped----------------------"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped---------------"
exit 1
else
echo "ipvsamd Runing ---------"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
# chmod +x ipvs.sh
# service ipvs.sh start
ipvsadm starting --------------------

[*]keepalived部署

# cd /etc/keepalived/
# vim keepalived.conf
global_defs {
...
smtp_server 127.0.0.1         #指向本地
router_id LVS_01   #指定名称,备份服务器不同名称
...            
}
vrrp_instance VI_1 {
state BACKUP   
priority 99            #优先级备份小于主服务器 主服务器优先级100 从就是100以下
virtual_router_id 10   #组号相同
auth_pass abc123         #验证密码
...
...
virtual_ipaddress {
192.168.10.10
}
...
...
virtual_server 192.168.10.10 80 {
...
real_server 192.168.10.10 {
weight 1
SSL_GET { #改为TCP_CHECK删除下列八行
connect_port 80 #加上本行
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}   
}   
#复制上列9行 添加另一个真实节点ip
real_server 192.168.10.172 {
weight 1
TCO_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}   
}
# systemctl start keepalived #启动keepalived
# ip addr show dev ens33:0 #查看虚拟ip
2: ens33:mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:39:91:0b brd ff:ff:ff:ff:ff:ff
inet 192.168.10.174/24 brd 192.168.10.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.10.10/32 brd 192.168.10.10 scope global ens33:0
valid_lft forever preferred_lft forever
inet6 fe80::dd16:ddab:ca60:3922/64 scope link
valid_lft forever preferred_lft forever
# systemctl stop firewalld.service#关闭防火墙
# setenforce 0#关闭安全模块
  2:配置节点服务器


[*]wed1
# yum instal httpd -y
# ifconfig
ens33: flags=4163mtu 1500
inet 192.168.10.171netmask 255.255.255.0broadcast 192.168.10.255
inet6 fe80::db6:37af:7ef1:189bprefixlen 64scopeid 0x20
inet6 fe80::1ad5:1879:acb3:d22prefixlen 64scopeid 0x20
ether 00:0c:29:40:c2:52txqueuelen 1000(Ethernet)
RX packets 1007027bytes 1415625529 (1.3 GiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 533224bytes 785105538 (748.7 MiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
# systemctl start httpd.service #开启http服务
# systemctl status httpd.service #查看状态
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since 三 2018-05-16 13:33:03 CST; 1 months 6 days ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 57260 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
# cd /var/www/html/
# echo "this is accp web" > index.html #添加网站首页
# cd /etc/sysconfig/network-scripts/ #配置虚拟网卡
# cp ifcfg-lo ifcfg-lo:0 #复制回环网卡文本
# vim ifcfg-lo:0 #添加一下四句话
# cat ifcfg-lo:0 #暂时不开启因为一开启xshell就断掉了
DEVICE=lo:0 #回环网卡子接口名称
IPADDR=192.168.10.10 #虚拟ip
NETMASK=255.255.255.0 #子网掩码
ONBOOT=yes
[*]控制服务启动脚本

# cd /etc/init.d/
# vim wed.sh
# chmod +x wed.sh
# cat wed.sh
#!/bin/bash
VIP=192.168.10.10
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0 #启用虚拟ip vip 添加网段
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
sysctl -p >/dev/null 2>&1 #加载内核优化
echo "RealServer Start OK " #提示启动成功语句
;;
stop)
ifconfig lo:0 down
route del $VIP /dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stopd"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
# service wed.sh start
RealServer Start OK
# ifup lo:0 #开启回环网卡
# systemctl stop firewalld.service #关闭防火墙
# setenforce 0
# firefox "http://127.0.0.1/" & #自测
  自测(web1,web2)
http://i2.运维网.com/images/blog/201806/22/9ed9d4d1210338042b721558f8f6b08c.png
http://i2.运维网.com/images/blog/201806/22/c276f32cb9253e425a054ae2c8c368eb.png


[*]wed2 (与节点服务器wed1同样配置)

# ifconfig
ens33: flags=4163mtu 1500
inet 192.168.10.172netmask 255.255.255.0broadcast 192.168.10.255
inet6 fe80::1ad5:1879:acb3:d22prefixlen 64scopeid 0x20
ether 00:0c:29:03:24:0btxqueuelen 1000(Ethernet)
RX packets 1518bytes 133795 (130.6 KiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 813bytes 86276 (84.2 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0


[*]用192.168.10.10IP地址测试一下
http://i2.运维网.com/images/blog/201806/22/e0a8fbeceaa56e9c493b4a4e9811ca1f.png
http://i2.运维网.com/images/blog/201806/22/fac2fd84cb998e554c1b38b81e0915b1.png
[*]down掉主调度服务器看能不能正常访问
[*]测试 (down掉了7-3主调度服务器)依然能访问
http://i2.运维网.com/images/blog/201806/22/e5da92f69aa04787f3effc08cca61f0e.png



页: [1]
查看完整版本: 基于centos7上面搭建LVS+keepalived