🍁 作者:微枫
Micromaple
💒 主页:
📌 简介:Java程序员、android系统定制开发后端全栈工程师
🔗 点赞👍➕收藏⭐➕留言📝 android系统定制开发您的支持就是我前进的动力💪💪💪
大家好,我是微枫
Micromaple
,android系统定制开发下面是我的Mycat
系列专栏(持续更新ing),有喜欢的小伙伴欢迎订阅学习呀🚀 深入学习Mycat
✨ Mycat系列专栏:
🔥 Mycat主从搭建、读写分离:
🔥 Mycat实现分库分表:
🔥 Mycat实现单库水平分表、按月分表:
文章目录
一、概述
在实际项目中,Mycat
服务也需要考虑高可用性,如果Mycat
所在服务器出现宕机,或Mycat
服务故障,需要有备机提供服务,需要考虑Mycat
集群。
二、高可用方案
使用HAProxy
+ Keepalived
配合两台Mycat
搭起Mycat
集群,实现高可用性。HAProxy
实现了Mycat
多节点的集群高可用和负载均衡,而HAProxy
自身的高可用则可以通过Keepalived
来实现。
编号 | 角色 | IP 地址 |
---|---|---|
1 | Mycat1 | 192.168.110.145 |
2 | Mycat2 | 192.168.110.150 |
3 | HAProxy(master) | 192.168.110.151 |
4 | Keepalived(master) | 192.168.110.151 |
5 | HAProxy(backup) | 192.168.110.152 |
6 | Keepalived(backup) | 192.168.110.152 |
三、安装配置 HAProxy
各版本下载地址:
https://src.fedoraproject.org/repo/pkgs/haproxy/
- 1
本文使用版本为:1.5.18
下载地址:
https://src.fedoraproject.org/repo/pkgs/haproxy/haproxy-1.5.18.tar.gz/21d35f114583ef731bc96af05b46c75a/haproxy-1.5.18.tar.gz
- 1
安装步骤:
-
将下载好的
HAProxy
安装包传到/usr/local/src
目录下进行解压cd /usr/local/srcwget https://src.fedoraproject.org/repo/pkgs/haproxy/haproxy-1.5.18.tar.gz/21d35f114583ef731bc96af05b46c75a/haproxy-1.5.18.tar.gztar -zxvf haproxy-1.5.18.tar.gzcd /usr/local/src/haproxy-1.5.18
- 1
- 2
- 3
- 4
-
安装依赖插件
# Ubuntu 依次执行sudo apt-get install -y gccsudo apt-get install -y g++sudo apt-get install -y libssl-devsudo apt-get install -y daemonsudo apt-get install -y make# CentOSyum install -y gcc openssl-devel popt-devel
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
-
查看内核版本,进行编译
# 查看内核版本uname -r# 查看 haproxy README文件对应的系统内核版本cat /usr/local/haproxy/README
- 1
- 2
- 3
- 4
make TARGET=linux2628 PREFIX=/usr/local/haproxy ARCH=x86_64
- 1
ARGET
:内核版本,使用uname -r
查看内核,结合查看haproxy README
文件对应的系统内核版本ARCH
:系统位数PREFIX
:为haprpxy
安装路径
-
编译完成,进行安装
make install PREFIX=/usr/local/haproxy
- 1
-
安装完成
- 创建配置目录
mkdir -p /usr/data/haproxy/
- 1
- 创建
HAProxy
配置文件
vim /usr/local/haproxy/haproxy.conf
- 1
配置内容如下:
global log 127.0.0.1 local0 #log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 chroot /usr/local/haproxy pidfile /usr/data/haproxy/haproxy.pid uid 99 gid 99 daemon #debug #quietdefaults log global mode tcp option abortonclose option redispatch retries 3 maxconn 2000 timeout connect 5000 timeout client 50000 timeout server 50000# HAProxy 监听配置listen proxy_status # 监听代理端口 bind :48066 mode tcp balance roundrobin # 监听Mycat服务地址 server mycat_1 192.168.110.145:8066 check inter 10s server mycat_2 192.168.110.150:8066 check inter 10s# HAProxy 控制台配置frontend admin_stats bind :7777 mode http stats enable option httplog maxconn 10 stats refresh 30s stats uri /admin stats auth admin:123456 stats hide-version stats admin if TRUE
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
-
启动验证
-
启动
HAProxy
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf
- 1
-
查看
HAProxy
进程ps -ef|grep haproxy
- 1
-
打开浏览器访问
http://192.168.110.151:7777/admin
- 1
输入配置文件中的账号密码进行访问。
admin/123456
-
验证负载均衡,通过
HAProxy
访问Mycat
mysql -umycat -p123456 -h 192.168.110.151 -P 48066
- 1
-
HAProxy(backup) 192.168.110.152
如上配置
四、配置
各版本下载地址:
https://www.keepalived.org/download.html
- 1
本文使用版本为:1.4.2
下载地址:
https://www.keepalived.org/software/keepalived-1.4.2.tar.gz
- 1
安装步骤:
-
将下载好的
Keepalived
安装包传到/usr/local/src
目录下进行解压cd /usr/local/srcwget https://www.keepalived.org/software/keepalived-1.4.2.tar.gztar -zxvf keepalived-1.4.2.tar.gzcd /usr/local/src/keepalived-1.4.2
- 1
- 2
- 3
- 4
-
安装依赖插件
# Ubuntu 依次执行sudo apt-get install -y gccsudo apt-get install -y g++sudo apt-get install -y libssl-devsudo apt-get install -y daemonsudo apt-get install -y make# CentOSyum install -y gcc openssl-devel popt-devel
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
-
进入解压后的目录,进行配置
cd /usr/local/src/keepalived-1.4.2./configure --prefix=/usr/local/keepalived
- 1
- 2
-
进行编译,完成后进行安装
cd /usr/local/src/keepalived-1.4.2make && make install
- 1
- 2
-
运行前配置,将
keepalived
设置为系统服务-
Ubuntu
配置mkdir /etc/keepalivedmkdir /etc/sysconfigcp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/cp /usr/local/src/keepalived-1.4.2/keepalived/etc/init.d/keepalived /etc/init.d/cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/ln -s /usr/local/keepalived/sbin/keepalived /sbin/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
-
CentOS
配置mkdir /etc/keepalivedcp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/cp /usr/local/src/keepalived-1.4.2/keepalived/etc/init.d/keepalived /etc/init.d/cp /usr/local/src/keepalived-1.4.2/keepalived/etc/sysconfig/keepalived /etc/default/keepalivedcp /usr/local/keepalived/sbin/keepalived /usr/sbin/
- 1
- 2
- 3
- 4
- 5
-
-
修改配置文件
vim /etc/keepalived/keepalived.conf
- 1
配置文件内容如下:
! Configuration File for keepalivedglobal_defs { notification_email { xlcocoon@foxmail.com } notification_email_from keepalived@showjoy.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_garp_interval 0 vrrp_gna_interval 0}vrrp_instance VI_1 { #主机配MASTER,备机配BACKUP state MASTER #所在机器网卡 interface ens33 virtual_router_id 51 #数值越大优先级越高 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { #虚拟IP,在HAProxy之上设定一个虚拟IP,可以在该网段内任意指定未使用的IP 192.168.110.200 }}virtual_server 192.168.110.200 48066 { delay_loop 6 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP # HAProxy 地址 real_server 192.168.110.151 48066 { weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 } } real_server 192.168.110.152 48066 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
-
配置重载
systemctl daemon-reload
- 1
-
启动验证
-
启动
Keepalived
service keepalived start
- 1
-
启动后可以看到在
ens33
真实IP:192.168.110.151
下面挂载了一个虚拟IP:192.168.110.200
root@ubuntu:~# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:9b:eb:14 brd ff:ff:ff:ff:ff:ff inet 192.168.110.151/24 brd 192.168.110.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.110.200/32 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe9b:eb14/64 scope link valid_lft forever preferred_lft forever3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:c3:d3:e0:c7 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
-
查看
Keepalived
状态service keepalived status
- 1
-
登录验证
mysql -umycat -p123456 -h 192.168.110.200 -P 48066
- 1
-
-
测试高可用
-
关闭
Mycat1
-
通过虚拟
IP
查询数据# 通过Keepalived登录数据库mysql -umycat -p123456 -h 192.168.110.200 -P 48066# 切换数据库use TESTDB;# 执行SQL命令show tables;
- 1
- 2
- 3
- 4
- 5
- 6
root@ubuntu-mysql-master:~# mysql -umycat -p123456 -h 192.168.110.200 -P 48066mysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 2Server version: 5.6.29-mycat-1.6.7.6-release-20220524173810 MyCat Server (OpenCloudDB)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> use TESTDB;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> show tables;+------------------+| Tables_in_orders |+------------------+| customer || dict_order_type || login_info || orders || orders_detail || orders_ware_info || payment_info |+------------------+7 rows in set (0.00 sec)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
-