首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

lvs+keepalived+tomcat+mysql集群

2023-11-12 来源:华拓网

. /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

显示全文