. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
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 $SNS_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 Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
授权
chmod 750 realserver
启动
service realserver start
再次ifconfig查询虚拟IP是否配置成功
2台服务器安装keepalived
yum –y install keepalived
配置keepalived.conf文件,安装的位置可能不能,本实例采用默认安装文件(/etc/keepalived/keepalived.conf)
global_defs {
# notification_email {
# admin@gool.com
# }
# notification_email_from master@gool.com
# smtp_server smtp.exmail.qq.com
# smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER ##备份LVS服务器设置为BACKUP
interface eth0 # #设置对外服务的接口
virtual_router_id 51
priority 100 #设置优先级,数值越大,优先级越高,backup设置为99,这样就能实现当master宕机后自动将backup变为master,而当原master恢复正常时,则现在的master再次变为backup。
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.110.200 ##设置VIP,可以多个,每个占一行。 此 IP也是对外映射的IP
}
}
virtual_server 192.168.110.200 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.110.5 80 {
weight 6
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.110.6 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
对于udp的监听,由于keepalived不直接支持,需要使用MISC_CHECK健康检查,MISC_CHECK此方法根据shell脚本的返回值做判断,具体参考keepalived手册
启动keepalived
service keepalived start
3台MySQL数据库安装,数据库的安装请参考http://blog.51cto.com/9695005/2054161
1,mysql主服务器的配置
配置my.cnf
设置server-id和log-bin,主服务器和从服务器server-id不能一样,
可以使用查看
SHOW VARIABLES LIKE 'server_id';
重启mysql服务器
service mysqld restart
1) Mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 106 | | | +------------------+----------+--------------+------------------+
2) 记录下 FILE 及 Position 的值,在后面进行从服务器操作的时候需要用到。
添加一个用户,给从服务器使用
grant replication slave on *.* to 'gool'@'192.168.110.25' identified by 'gool'2配置从服务器
change master to
master_host='主服务器ip',
master_user='gool',
master_password='gool',
master_log_file='mysql-bin.000001',
master_log_pos=106;
1) 正确执行后启动Slave同步进程
2) 启动slave
mysql> start slave;
3) 查看slave状态
mysql> show slave statusG
4) 其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常。
测试主从复制1:先确定主,从库上没有任何自定义表
2:主服务器上的操作 在主服务器上创建数据库gool_db mysql> create database gool_db;
在主服务器上创建表itcast_tb mysql> create table gool_tb(id int(3),name char(9));
在主服务器上的表itcast_tb中插入记录 mysql> insert into gool_tb values(01,'gool1');
3:从服务器上查看是否已经同步?
总结:搭建过程中可能引起失败的原因1:server_id 配置的一样或是配置的没有更新到Mysql数据中来
2:防火墙拦截了3306端口
3:用户与密码不正确
4:Mysql不允许其它机器访问
mysql-proxy服务器配置
查看lua是否安装
rpm-qa | grep lua
安装依赖
yum -y install gcc* gcc-c++*autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool*flex* pkgconfig* libevent* glib* readline*
tar xzvfmysql-proxy-**.tar.gzcd mysql-proxy-**cp lib/rw-splitting.lua /opt/mysql-proxy/scripts --此目录自己创建
修改默认连接,进行快速测试,不修改的话要达到连接数为4时才启用读写分离
vim /opt/mysql-proxy/scripts/rw-splitting.lua=============================-- connection poolif not proxy.global.config.rwsplit thenproxy.global.config.rwsplit = {min_idle_connections = 1, //默认为4max_idle_connections = 1, //默认为8is_debug = false}
启动mysql-proxy
./mysql-proxy --proxy-backend-addresses="IP:数据库端口" --proxy-read-only-backend-addresses="IP:数据库端口" --proxy-lua-script=/opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
最后:
配置web项目,启动,测试环境
lvs+keepalived+tomcat+mysql集群
标签:架构 主从复制 集群 lvs+keepalived
小编还为您整理了以下内容,可能对您也有帮助:
LVS+keepalived配置
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RendancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
注意
1.配置时不要把主从IP弄混淆。(我做的蠢事是,明明是配置两个机器,结果在xshell中把一个IP设置为两个登录名,结果就很尴尬,好似见鬼了)
2.做高可用时应注意几台机器必须有一台是MASTER,否则会出现虚拟IP获取不到的现象。
3.配置启动时,应先启动master,如果先启动backup,backup不会有虚拟IP,只有master获取到虚拟IP后vrrp的通讯才会开始,之后再关闭master,backup 就会获取到虚拟IP了。
负载均衡的配置主从配置是一样的,本次事例配置lvs的DR模式,DR模式是互联网使用最多的形式。
特点
配置脚本
配置时的注意事项
1.lsof无法检测配置是否成功,因为director不会开启响应端口。
2.director要直接能转发到(直连)real-server,不要经过路由器或其他服务器跳转。
keepalived+lvs+mysql集群VIPping不通
因为交换机上没配相关路由吧,跨网段的时候是会存在路由问题的,如果你把VIP也设置为192.168.2.*应该就没这个问题了。
因为其他机器放问192.168.100.100的时候会默认去192.168.100.*的网段去寻找主机,所以就招不到具体的物理地址了。
还有个办法就是在2.x的主机上都配置静态路由,add route , 把192.168.100.100的路由配置到192.168.2.254(貌似这个是网关?)
建议还是换成2.x的地址更合理。
我们一般做地址规划的时候,200以内都是物理ip,200以上都给VIP预留,就是为了避免这种问题。
LVS+Keepalived
LVS负载集群:
IPVS:工作在内核
ipvsadm:管理IPVS
keepalived和ipvsadm并行的,都可以直接管理内核ipvs。
keepalived和LVS亲密无间,keepalived就是为LVS诞生。
LVS技术小结:
1.真正实现调度的工具是IPVS,工作在linux内核层面。
2.LVS自带的IPVS管理工具是ipvsadm。
3.keepalived实现管理IPVS及负载均衡器的高可用。
4.Red hat工具Piranha WEB管理实现调度的工具IPVS。
LVS术语:
VIP:虚拟IP;
RIP:真是IP;
DIP:Director IP;
CIP:客户端主机IP;
LVS集群的四种模式:
NAT
DR ***
TUN
FULLNAT
ARP协议:
全称"Address Resolution Protocol":地址解析协议;IP地址转换成相应的物理地址(MAC地址);
ARP小结:
1.ARP全称
2.实现局域网把IP地址转换为MAC地址
3.MAC 48位主机的物理地址,局域网内唯一
4.ARP协议和DNS有点相似之处。不同点是:DNS是在域名和IP之间的解析,另外,ARP协议不需要配置服务
,而DNS要配置服务才行。
5.ARP协议是三层协议
LVS DR模式:
1.通过更改数据包的目标MAC地址实现数据包转发的。注意源IP地址仍是CIP,目的IP地址仍是VIP。
2.请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此,并发访问量大时使用效率很高(和NAT模式比)
3.因DR模式是通过MAC地址的改写机制实现的转发,所有节点和LVS要处于一个局域网
4.需要注意RS节点的VIP的绑定(lo:vip/32,lo1:vip/32)和ARP抑制问题
5.RS节点的默认网关不需要是调度器LB的DIP,而直接是IDC机房分配的上级路由器的IP(这是RS带有IP
地址的情况),理论讲:只要RS可以出网即可,不是必须要配置IP。
6.目的MAC地址的改写,调度器LB无法该变请求的报文的目的端口(和NAT的区别)
7.调度器LB支持几乎所有的UNIX,LINUX系统,不支持WINDOWS系统。真实服务器RS节点可以是WINDOWS系统。
8.DR模式效率高,配置麻烦,访问量不大的情况,可以用haproxy、nginx,日1000-2000w PV或1万以下
9.直接对外的访问业务,例如:web服务做RS节点,RS最好用公网IP地址。如果不直接对外的业务,例如:MySQL,
存储系统RS节点,最好用内部IP地址。
NAT模式:入站DNAT,出站SNAT,入站出站都经过LVS,可以修改端口
DR模式:修改数据包的目的MAC地址,入站经过LVS,出站不经过LVS,直接返回客户,不能改端口,适合局域网LAN。
TUN模式:不改变数据包内容,数据包外部封装一个IP头,入站经过LVS,出站不经过LVS,直接返回客户,不能改端口,适合局域网LAN/WAN。
LVS和节点之间通过隧道通信。
LVS调度算法:
固定算法: rr(轮询), wrr(权重轮询),dh(目标地址哈希),sh(源地址哈希)
动态算法:*wlc(加权最小连接),lc(最小连接),lblc,lblcr,SED,NQ
WEB
LB01(nginx+keepalived) 10.0.1.3
VIP:10.0.1.31
LB02(nginx+keepalived) 10.0.1.5
VIP:10.0.1.32
WEB1 10.0.1.6 LAMP RS1(真实服务器)
WEB2 10.0.1.9 LNMP RS2(真实服务器)
安装LVS
安装准备命令:lsmod|grep ip_vs(验证keepalived是否安装)
安装LVS:①yum install ipvsadm -y3、②命令:ipvsadm(有则安装成功)
配置IP
1.ping IP,起初选的IP是ping不通。以10.0.1.31为例(IP随意分配),添加这个IP
2.lb01:添加一个IP-->ip addr add 10.0.1.31/24 dev eth0 label eth0:1
LB01(LVS的配置过程)
第一步:
新安装,清除列表,重头再来
ipvsadm -C
第二步:
添加IP(虚拟服务)/V server
指定IP:
ipvsadm -A -t 10.0.1.31:80 -s rr
查看IP:
ipvsadm -LN
// TCP 10.0.1.31:80 rr(V server,但没有节点)
添加RS1节点:
ipvsadm -a -t 10.0.1.31:80 -r 10.0.1.6:80 -g
查看:
ipvsadm -Ln
// TCP 10.0.1.31:80 rr
// --> 10.0.1.6:80 Route 1 0 0 *(新增加了一个节点)
添加RS2节点:
ipvsadm -a -t 10.0.1.31:80 -r 10.0.1.9:80 -g
查看:
ipvsadm -Ln
// TCP 10.0.1.31:80 rr
// --> 10.0.1.6:80 Route 1 0 0
// --> 10.0.1.9:80 Route 1 0 0 *(新增加了一个节点)
##如果节点导错了,可以删除,重新导
ipvsadm -d -t 10.0.1.31:80 -r 10.0.1.9:80
ipvsadm -Ln
// TCP 10.0.1.31:80 rr
// --> 10.0.1.6:80 Route 1 0 0
&&可以增加会话保持
-p (会话保持时间)
ipvsadm -A -t 10.0.1.31:80 -s rr -p 300
&&设置超时参数
ipvsadm --set 30 5 60
第三步:
在负载均衡上做一个host解析:
vi /etc/hosts
10.0.1.6 www.etiantian.org bbs.etiantian.org( 以此为例,对其他的IP也要验证)
测试VIP,RIP1,RIP2能不能访问:
①ping www.etiantian.org
②curl www.etiantian.org
注意:对VIP测试,要特别注意,一般不要再负载均衡器上测试,要选择别的客户端(真正的客户端)来验证。
第四步
RS绑定VIP
ip addr add 10.0.1.31/32 dev lo label lo:1 *临时生效
route add -host 10.0.1.31 dev lo
第五步
对RS抑制ARP响应方法如下:
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
LVS缺点:只能手工配置,没有健康检查
健康检查功能:
如果其中一台服务器停止了,LVS没有健康检查功能,所以ipvsadm -Ln列表中还有这台服务器。
LVS裂脑问题???
LVS故障排查:
熟悉LVS的工作原理
1.调度器上LVS调度规则及IP的正确性
2.RS节点上VIP绑定和arp抑制的检查
生产处理思路:
1)对RS绑定的VIP做实时监控;
2)RS绑定的VIP做成配置文件
keepalived解决了几个问题:a.管理的问题;b.健康检查的问题;c.LVS的高可用
Keepalived配置
1.vi keepalived.conf
2.ip addr del 10.0.1.32/24 dev eth0
3.ipvsadm -C