Keepalived
实验环境:
Server1|Server2实现高可用
Server3|Server4定义后端RS
安装服务
[root@server1 ~]# ls
keepalived-1.3.6.tar.gz
[root@server1 ~]# tar zxf keepalived-1.3.6.tar.gz
[root@server1 ~]# cd keepalived-1.3.6
[root@server1 keepalived-1.3.6]# yum install gcc openssl-devel -y
[root@server1 keepalived-1.3.6]# ./configure --prefix=/usr/local/keepalived --with-init=SYSV
.....
Use IPVS Framework : Yes
IPVS use libnl : No
IPVS syncd attributes : No
.....
[root@server1 keepalived-1.3.6]# make && make install
[root@server1 etc]# chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived
[root@server1 etc]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@server1 etc]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@server1 etc]# ln -s /usr/local/keepalived/etc/keepalived/ /etc/
[root@server1 etc]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
主备模式
[root@server1 etc]# vim /etc/keepalived/keepalived.conf
1 ! Configuration File for keepalived
2
3 global_defs {
4 notification_email {
5 root@localhost
6 }
7 notification_email_from Alexandre.Cassen@firewall.loc
8 smtp_server 172.0.0.1
9 smtp_connect_timeout 30
10 router_id LVS_DEVEL
11 vrrp_skip_check_adv_addr
12 #vrrp_strict
13 vrrp_garp_interval 0
14 vrrp_gna_interval 0
15 }
16
17 vrrp_instance VI_1 {
18 state MASTER #备节点为BACKUP
19 interface eth1
20 virtual_router_id 117 #0-255
21 priority 100 #定义优先级:主高于备(数字越大优先级越高)
22 advert_int 1
23 authentication {
24 auth_type PASS
25 auth_pass 1111
26 }
27 virtual_ipaddress { #定义VIP
28 172.25.66.100/24
29 }
30 }
31
32 virtual_server 172.25.66.100 80 { #定义后端RS
33 delay_loop 6
34 lb_algo rr #定义调度算法
35 lb_kind DR #定义工作模式
36 #persistence_timeout 50 #持续链接:定义每次访问不同的后端
37 protocol TCP
38
39 real_server 172.25.66.3 80 {
40 weight 1
41 TCP_CHECK {
42 connect_timeout 3
43 nb_get_retry 3
44 delay_before_retry 3
45 }
46 }
47 real_server 172.25.66.4 80 {
48 weight 1
49 TCP_CHECK {
50 connect_timeout 3
51 nb_get_retry 3
52 delay_before_retry 3
53 }
54 }
55 }
56
[root@server1 etc]# /etc/init.d/keepalived start
**此时VIP已经自动添加
测试:
在Server3|Server4上安装appache服务,添加VIP
ip addr add 172.25.66.100 dev eth1
/etc/init.d/httpd start
[root@foundation66 Desktop]# for i in range {1..10};do curl 172.25.66.100;done
Server4
Server3
Server4
Server3
Server4
Server3
Server4
Server3
Server4
Server3
Server4
[root@foundation66 Desktop]#
备
[root@server1 etc]# scp -r /usr/local/keepalived/ root@172.25.66.2:/usr/local/
[root@server2 keepalived]# chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived
[root@server2 keepalived]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@server2 keepalived]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@server2 keepalived]# ln -s /usr/local/keepalived/etc/keepalived/ /etc/
[root@server2 keepalived]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
[root@server2 keepalived]# vim /etc/keepalived/keepalived.conf
.....
MASTER--->BACKUP
定义优先级
.....
[root@server2 keepalived]# /etc/init.d/keepalived start
Starting keepalived: [ OK ]
[root@server2 keepalived]# ip addr
*此时还没有VIP,但是当主宕机之后,马上实现VIP接管
Server1停止keeepalived,VIP迁移
[root@server2 keepalived]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.66.100:http rr
-> server3:http Route 1 0 6
-> server4:http Route 1 0 5
[root@server2 keepalived]#
[root@server3 ~]# sysctl -a | grep ipv4
ftp工作原理:利用持续链接参数
VRRP:虚拟路由冗余协议
keepaalived:不适合做有状态服务的高可用
IO复用
Apache为什么比Nginx慢
lvs 内核编译
Fnat+keepalived
[root@server4 ~]# ls
kernel-2.6.32-220.23.1.el6.src.rpm newt-devel-0.52.11-3.el6.x86_64.rpm
Lvs-fullnat-synproxy.tar.gz slang-devel-2.2.1-1.el6.x86_64.rpm
asciidoc-8.4.5-4.1.el6.noarch.rpm
[root@server4 ~]# rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm
****很多wraning
[root@server4 ~]# cd rpmbuild/
[root@server4 rpmbuild]# ls
SOURCES SPECS
[root@server4 rpmbuild]# yum install rpm-build -y
[root@server4 rpmbuild]# ls
SOURCES SPECS
[root@server4 rpmbuild]# cd SPECS/
[root@server4 SPECS]# ls
kernel.spec
[root@server4 SPECS]# rpmbuild -bp kernel.spec
***报错
[root@server4 SPECS]# yum install gcc redhat-rpm-config patchutils xmlto asciidoc elfutils-libelf-devel zlib-devel binutils-devel newt-devel python-devel perl-ExtUtils-Embed
[root@server4 SPECS]# rpmbuild -bp kernel.spec
[root@server4 ~]# yum install newt-devel-0.52.11-3.el6.x86_64.rpm slang-devel-2.2.1-1.el6.x86_64.rpm -y
[root@server4 ~]# rpm -ivh asciidoc-8.4.5-4.1.el6.noarch.rpm
[root@server4 SPECS]# yum install hmaccalc -y
[root@server4 SPECS]# rpmbuild -bp kernel.spec
***再连一个ssh生成随机数
[root@server4 ~]# yum install rng-too*
[root@server4 ~]# rngd -r /dev/urandom
[root@server4 SPECS]# cd
[root@server4 ~]# ls
asciidoc-8.4.5-4.1.el6.noarch.rpm newt-devel-0.52.11-3.el6.x86_64.rpm
kernel-2.6.32-220.23.1.el6.src.rpm rpmbuild
Lvs-fullnat-synproxy.tar.gz slang-devel-2.2.1-1.el6.x86_64.rpm
[root@server4 ~]# tar zxf Lvs-fullnat-synproxy.tar.gz
[root@server4 ~]# cd lvs-fullnat-synproxy/
[root@server4 lvs-fullnat-synproxy]# ls
lvs-2.6.32-220.23.1.el6.patch README
lvs-tools.tar.gz toa-2.6.32-220.23.1.el6.patch
[root@server4 lvs-fullnat-synproxy]# cd
[root@server4 ~]# cd rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/
[root@server4 linux-2.6.32-220.23.1.el6.x86_64]# pwd
/root/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64
[root@server4 linux-2.6.32-220.23.1.el6.x86_64]# cp ~/lvs-fullnat-synproxy/lvs-2.6.32-220.23.1.el6.patch .
[root@server4 linux-2.6.32-220.23.1.el6.x86_64]# patch -p1 < lvs-2.6.32-220.23.1.el6.patch
[root@server4 linux-2.6.32-220.23.1.el6.x86_64]# make
拉伸硬盘
[root@server4 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root 7853764 7834672 0 100% /
tmpfs 961188 0 961188 0% /dev/shm
/dev/vda1 495844 33469 436775 8% /boot
[root@server4 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 VolGroup lvm2 a-- 8.51g 0
[root@server4 ~]# pvcreate /dev/vdc
Physical volume "/dev/vdc" successfully created
[root@server4 ~]# vgextend VolGroup /dev/vdc
Volume group "VolGroup" successfully extended
[root@server4 ~]# lvextend -L +8G /dev/VolGroup/lv_
lv_root lv_swap
[root@server4 ~]# lvextend -L +8G /dev/VolGroup/lv_root
Extending logical volume lv_root to 15.61 GiB
Insufficient free space: 2048 extents needed, but only 2047 available
[root@server4 ~]# lvextend -l +2047 /dev/VolGroup/lv_root
Extending logical volume lv_root to 15.61 GiB
Logical volume lv_root successfully resized
[root@server4 ~]# resize2fs /dev/VolGroup/lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/VolGroup/lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/VolGroup/lv_root to 4090880 (4k) blocks.
The filesystem on /dev/VolGroup/lv_root is now 4090880 blocks long.
[root@server4 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 16G 7.5G 7.2G 52% /
tmpfs 939M 0 939M 0% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot
[root@server4 ~]#
编译内核
[root@server4 linux-2.6.32-220.23.1.el6.x86_64]# make
[root@server4 linux-2.6.32-220.23.1.el6.x86_64]# make modules_install
[root@server4 linux-2.6.32-220.23.1.el6.x86_64]# make install
Cgi和Fastcgi的区别