1、mysql+lvs+keepalived 复制负载配置1. MySQL-VIP:192.168.1.10 2. 2. MySQL-master1:192.168.1.4 3. 3. MySQL-master2:192.168.1.9 4. 4. lvs_server master 192.168.1.5 5. 5. lvs_server backup 192.168.1.6 6. 6. liunx版本:Linux version 2.6.18-164.el5 7. 7. MySQL版本:5.0.56 8. 8. Keepalived版本:1.1.17实施步骤实施步骤实施步骤实施步骤: _ 在r
2、ealserver主机上实行脚本realserver,为lo:0绑定VIP地址192.168.1.10,这步分别在二个mysql主机上192.168.1.4、192.168.1.9实施。这步提前做,是因为以后的过程中这一步是不会发生更改的Vim /usr/local/bin/lvs_real.sh#!/bin/bash #description : start realserver VIP=192.168.1.10 source /etc/rc.d/init.d/functions case $1 in start) echo start LVS of realserver /sbin/ifc
3、onfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up echo1/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 ;stop) /sbin/ifconfig lo:0 down echo close LVS directorser
4、ver 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 Usage: $0 start|stop exit 1 Esac完成运行此脚本: . Lvs_real.sh start(or stop)简单说明下上述脚本的作用: 1)vip(virtual ip)
5、。直接路由模式的vip必须跟服务器对外提供服务的ip地址在同一个网段,并且lvs 负载均衡器和其他所有提供相同功能的服务器都使用这个vip; 2)vip被绑定在环回接口lo0:0上,其广播地址是其本身,子网掩码是255.255.255.255。这与标准的网络地址设置有很大的不同。采用这种可变长掩码方式把网段划分成只含一个主机地址的目的是避免ip地址冲突; 3)echo这段的作用是抑制arp广播。如果不做arp抑制,将会有众多的机器向其他宣称:“嗨!我是奥巴马,我在这里呢!”,这样就乱套了。 为二台lvs主机安装lvs+keepalived软件。安装lvs软件是必须做的,因为keepalived
6、是运行在lvs之上的,因此lvs及keepalived必须装在一个系统里面。过程如下:1. #mkdir /usr/local/src/lvs 2. #cd /usr/local/src/lvs 3. #wget http:/www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz 4. #ln -s /usr/src/kernels/2.6.18-53.el5PAE-i686/ /usr/src/linux 5. #tar zxvf ipvsadm-1.24.tar.gz 6. #cd ipvsadm-1.24 7.
7、#make 8.#make install 9.执行ipvsadm,10查看当前加载的内核模块:lsmod|grep ip_vs 11.运行ipvsadmrootlvs ipvsadm-1.24#lsmod|grep ip_vsIp_vs 77569 0 编辑keepalived.conf文件,直接用keepalived实现负载均衡及高可用性1. a)Keepalived的安装 2. 3. #wget http:/www.keepalived.org/software/keepalived-1.1.15.tar.gz 4. 5. #tar zxvf keepalived-1.1.15.tar.
8、gz 6. 7. #cd keepalived-1.1.15 8. 9. #./configure 10. 显示出以下结果: Keepalived configuration - Keepalived version : 1.1.17 Compiler : gcc Compiler flags : -g -O2 Extra Lib : -lpopt -lssl -lcrypto Use IPVS Framework : YeIPVS sync daemon support : Yes Use VRRP Framework : Yes Use LinkWatch : No Use Debug f
9、lags : No 11. #make 12. 13. #make install 将keepalived做成启动脚务,方便管理: 1. #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 2. 3. #cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ 4. 5. #mkdir /etc/keepalived 6. 7. #cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ 8. 9. #cp /
10、usr/local/sbin/keepalived /usr/sbin/ 10. 11. #service keepalived start|stop 12. 配置主lvs 1. ! Configuration File for keepalived 2. 3. global_defs 4. 6. 7. yuhongchun027 8. 9. 10. 11. notification_email_from sns-lvs 12. 13. smtp_server 127.0.0.1 14. 15. router_id LVS_DEVEL_1 16. 17. 18. 19. vrrp_instan
11、ce VI_1 20. 21. state MASTER 22. 23. interface eth0 24. 25. virtual_router_id 51 26. 27. priority 100 28. 29. advert_int 1 30. 31. authentication 32. 33. auth_type PASS 34. 35. auth_pass 1111 36. 37. 38. 39. virtual_ipaddress 40. 41. 192.168.1.10 42. 43. 44. 45. 46. 47. virtual_server 192.168.1.10 3
12、360 48. 49. delay_loop 6 50. notification_email 51. lb_algo wrr 52. lb_kind DR 54. 55. persistence_timeout 60 56. 57. protocol TCP 58. 59. real_server 192.168.1.4 3306 60. 61. weight 3 62. 63. TCP_CHECK 64. 65. connect_timeout 10 66. 67. nb_get_retry 3 68. 69. delay_before_retry 3 70. 71. connect_po
13、rt 3306 72. 73. 74. 75. 76. 77. real_server 192.168.1.9 3306 78. 79. weight 3 80. 81. TCP_CHECK 82. 83. connect_timeout 10 84. 85. nb_get_retry 3 86. 87. delay_before_retry 3 88. 89. connect_port 3306 90. 91. 92. 93. 94. 95. 96. 配置备份lvs 1. ! Configuration File for keepalived 2. 3. global_defs 4. 5.
14、notification_email 6. 7. yuhongchun027 8. 9. 10. 11. notification_email_from sns-lvs 12. 13. smtp_server 127.0.0.1 14. 15. router_id LVS_DEVEL_2 注意与主不一样的地方 16. 17. 18. 19. vrrp_instance VI_1 20. 21. state BACKUP 注意与主不一样的地 3. 22. 23. interface eth0 24. 25. virtual_router_id 51 26. 27. priority 99 注意与
15、主不一样的地 28. 29. advert_int 1 30. 31. authentication 32. 33. auth_type PASS 34. 35. auth_pass 1111 36.37. 38. 39. virtual_ipaddress 40. 41. 192.168.1.10 42. 43. 44. 45. 46. 47. virtual_server 192.168.1.10 3306 48. 49. delay_loop 6 50. 51. lb_algo wrr 52. 53. lb_kind DR 54. 55. persistence_timeout 60 5
16、6. 57. protocol TCP 58. 59. real_server 192.168.1.4 3306 60. 61. weight 3 62. 63. TCP_CHECK 64. 65. connect_timeout 10 66. 67. nb_get_retry 3 68. 69. delay_before_retry 3 70. 71. connect_port 3306 72. 73. 74. 75. 76. 77. real_server 192.168.1.9 3306 78. 79. weight 3 80. 81. TCP_CHECK 82. 83. connect
17、_timeout 10 84. 85. nb_get_retry 3 86. 87. delay_before_retry 3 88. 89. connect_port 3306 90. 91. 92. 93. 94. 95. 96. 分别在二台lvs机上启动servcie keepalived start就可实现负载均衡及高可用集群;keepalived.conf内容说明如下: 全局定义块全局定义块全局定义块全局定义块 1、email通知。作用:有故障,发邮件报警。 2、Lvs负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。 3、花括号“”。用来分隔定义块,因此必须成对出现。如
18、果写漏了,keepalived运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。 VRRPVRRPVRRPVRRP定义块定义块定义块定义块 1、同步vrrp组vrrp_sync_group。作用:确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪些? 2、实例组group。至少包含一个vrrp实例。 3、Vrrp实例vrrp_instance。实例名出自实例组group所包含的那些名字。 (1)实例状态state。只有MASTER和BACKUP两种状
19、态,并且需要大写这些单词。其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的系统会自动把它的状态有BACKUP变换成MASTER;当失效的MASTER所在的系统恢复时,BACKUP从MASTER恢复到BACKUP状态(2)通信接口interface。对外提供服务的网络接口,如eth0,eth1.当前主流的服务器都有2个或2个以上的接口,在选择服务接口时,一定要核实清楚。 (3)lvs_sync_daemon_inteface。负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线。但它的机制优于Heartbeat,因为它没有“裂脑
20、”这个问题,它是以优先级这个机制来规避这个麻烦的。在DR模式中,lvs_sync_daemon_inteface 与服务接口interface 使用同一个网络接口。 (3)(4)虚拟路由标识virtual_router_id。这个标识是一个数字,并且同一个vrrp实例使用唯一的标识。即同一个vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同时在整个vrrp内是唯一的。 (5)优先级priority。这是一个数字,数值愈大,优先级越高。在同一个vrrp_instance里,MASTER 的优先级高于BACKUP。若MASTER的priority值为
21、150,那么BACKUP的priority只能是140或更小的数值。 (6)同步通知间隔advert_int。MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位为秒(7)验证authentication。包含验证类型和验证密码。类型主要有PASS、AH两种,通常使用的类型为PASS,据说AH使用时有问题。验证密码为明文,同一vrrp实例MASTER与BACKUP 使用相同的密码才能正常通信。 4、 虚拟ip地址virtual_ipaddress。可以有多个地址,每个地址占一行,不需要指定子网掩码。注意:这个ip必须与我们在lvs客户端设定的vip相一致! 虚拟服务器虚拟服务器虚拟
22、服务器虚拟服务器virtual_servervirtual_servervirtual_servervirtual_server定义块定义块定义块定义块 虚拟服务器定义是keepalived框架最重要的项目了,是keepalived.conf必不可少的部分。 1、虚拟服务器virtual_server。这个ip来自于vrrp定义块的第“4”步,后面一个空格,然后加上端口号。定义一个vip,可以实现多个tcp端口的负载均衡功能。 (1)delay_loop。健康检查时间间隔,单位是秒。 (2)lb_algo。负载均衡调度算法,互联网应用常使用wlc或rr。 (3)lb_kind。负载均衡转发规则
23、。一般包括DR、NAT、TUN3种,在我的方案中,都使用DR的方式。 (4)persistence_timeout。会话保持时间,单位是秒。这个选项对动态网站很有用处:当用户从远程用帐号进行登陆网站时,有了这个会话保持功能,就能把用户的请求转发给同一个应用服务器。在这里,我们来做一个假设,假定现在有一个lvs环境,使用DR转发模式,真实服务器有3个,负载均衡器不启用会话保持功能。当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了-登陆不能成功。因为没有会话保持,负载均衡器
24、可能会把第2次的请求转发到其他的服务器。 (5)转发协议protocol。一般有tcp和udp两种。实话说,我还没尝试过udp协议类的转发。 2、真实服务器real_server,也即服务器池。Real_server的值包括ip地址和端口号,多个连续的真实ip。 (1)权重weight,权重值是一个数字,数值越大,权重越高。使用不同的权重值的目的在于为不同性能的机器分配不同的负载,性能较好的机器,负载分担大些;反之,性能差的机器,则分担较少的负载,这样就可以合理的利用不同性能的机器资源。 (2)Tcp检查tcp_check。 附注:以上就是lvs+keepalived的基本配置步骤,有兴趣的同
25、学建议可做下lvs的1+2的基本架构实验,即不需要keepalived,采用单lvs的方式,其lvs_dr脚本如下#vim /usr/local/sbin/lvs-dr.sh 1. 2. #!/bin/bash 3. 4. #website director vip. 5. 6. SNS_VIP=192.168.1.188 7. 8. SNS_RIP1=192.168.1.104 9. 10. SNS_RIP2=192.168.1.105 11. 12. ./etc/rc.d/init.d/functions 13. 14. logger $0 called with $1 15. 16. c
26、ase $1 in 17. 18. start) 19. 20. # set squid vip 21. 22. /sbin/ipvsadm -set 30 5 60 23. 24. /sbin/ifconfig eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP up 25. 26. /sbin/route add -host $SNS_VIP dev eth0:0 27. 28. /sbin/ipvsadm -A -t $SNS_VIP:80 -s wrr -p 3 29. 30. /s
27、bin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1 31. 32. /sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1 33. 34. touch /var/lock/subsys/ipvsadm /dev/null 2&1 35. 36. ; 37. 38. stop) 39. 40. /sbin/ipvsadm -C 41. 42. /sbin/ipvsadm -Z 43. 44. ifconfig eth0:0 down 45. 46. route del $SNS_VIP
28、 47.48. rm -rf /var/lock/subsys/ipvsadm /dev/null 2&1 49. 50. echo ipvsadm stoped 51. 52. ; 53. 54. status) 55. 56. if ! -e /var/lock/subsys/ipvsadm ;then 57. 58. echo ipvsadm stoped 59. 60. exit 1 61. 62. else 63. 64. echo ipvsadm OK 65. 66. fi 67. 68. ; 69. 70. *) 71. 72. echo Usage: $0 start|stop
29、|status 73. 74. exit 1 75. 76. esac 77. 78. exit 0 79.最新版更新内容如下最新版更新内容如下最新版更新内容如下最新版更新内容如下: 每台服务器都有二块网卡,分别连接内外网;后端的mysql数据库与web连接采用内网方式,整个网络环境采用内网; 增加了keepalivedyiyyy .conf语法内容; 删除了lvs.sh脚本内容,直接让keepalived内容更直接明了,新增加了单lvs的配置脚本lvs_dr.sh; lvs主从机上的keepalived.conf文件我直接从生产服务器上download下来了,可方便大家使用。值得注意的是值得注意的是值得注意的是值得注意的是: 1、你必须向你的服务器所在机房IDC多申请一个IP供VIP使用;多关注/var/log/messages和ipvsadm -ln,利用其有效信息排错。 2、服务器的iptables、Selinux均关闭;在生产环境中,我就遇到了iptables的NAT转发问题,导致了lvs失败。 3、keepalived的启动
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1