设为首页 收藏本站
查看: 3187|回复: 0

[经验分享] 基于amoeba+keepalived+mmm实现mysql读写分离高可用架构

[复制链接]

尚未签到

发表于 2018-12-29 10:04:10 | 显示全部楼层 |阅读模式
  
  

  更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn)
     

        在上一篇已经通过mysql-mmm实现对mysql数据库的动态监控,这一篇我们将结合amoeba实现对数据库访问的读写分离,通过keepalived来实现amoeba的高可用[keepalived用于监控主机心跳,软件是否宕掉无法监测,我们默认如果出问题就是amoeba的主机崩溃]



一、本次环境拓扑图如下:

二、环境描述
   系统:red hat linux 6(2.6.32)   数据库:mysql 5.1.61(这里直接使用rpm包安装,也不使用最新版本数据库)
   MMM:mysql-mmm  2.2.21
   DB server地址分配:
          192.168.1.100(master)
          192.168.1.101(master)
          192.168.1.102(slave)
          192.168.1.103(slave)
   MMM地址:
          192.168.1.104(monitor)
   虚拟IP地址(vip):
          192.168.1.12(write)
          192.168.1.13(read)
          192.168.1.14(read)
          192.168.1.15(read)

  amoeba1:192.168.1.112
  amoeba1:192.168.1.113
  amoeba vip:192.168.1.17(对外的ip地址)
  本次环境软件下载:http://www.kuaipan.cn/file/id_119710994921422893.htm
我们这里的配置是基于上一篇的环境,也就是说mysql-mmm和mysql的主从复制都配置好了,下面主要描述amoeba和keepalived


三、配置演示:
      Keepalived简介:KeepalivedLinux下面实现VRRP备份路由的高可靠性运行件,基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接,从而提高系统的可用性
1.将需要的包传送到服务器并解压[我这里默认安装包已经上传到服务器家目录]
# 在192.168.1.112/192.168.1.113上分别解压如下几个包
[root@client112 ~]# tar -xf keepalived-1.2.9.tar.gz
[root@client112 ~]# tar -xf jdk-7u15-linux-x64.tar.gz -C /usr/local/
# 在192.168.1.113
[root@client113 ~]# tar -xf keepalived-1.2.9.tar.gz
[root@client113 ~]# tar -xf jdk-7u15-linux-x64.tar.gz -C /usr/local/2.分别到192.168.1.112/192.168.1.113上配置java环境[这里只演示在112上的操作,113上重复此操作即可]
[root@client112 ~]# cd /usr/local/
[root@client112 local]# mkdir java
# 将解压出来的内容移到java目录
[root@client112 local]# mv jdk1.7.0_15/*  java
# 设置java环境变量
[root@client112 local]# echo $JAVA_HOME
[root@client112 local]# vim /etc/profile
# 在末尾添加
JAVA_HOME=/usr/local/java
AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
# 使变量生效
[root@centos local]# source /etc/profile3.分别到192.168.1.112/192.168.1.113上配置amoeba[这里只演示在112上的操作,113上重复此操作即可]
(1).配置amoeba中的dbServer.xml(后端mysql 服务器连接配置)
# 建立相应amoeba目录
[root@client112 local]# mkdir /usr/local/amoeba
# 将压缩包解压到指定目录
[root@client112 local]# tar -xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
[root@client112 local]# cd /usr/local/amoeba/
[root@client112 local]# cd conf/
# 配置后端mysql 服务器连接[dbServer.xml]
[root@client112 conf]# vim dbServers.xml
.........................(省略)


${defaultManager}
64
128
# 设置 mysql 数据库的端口

3306
# 设置缺省的数据库,当连接amoeba时,操作表必须显式的指定数据库名,即采用dbname.tablename的方式,
# 不支持 use dbname指定缺省库,因为操作会调度到各个后端dbserver

kongzhong
# 设置amoeba连接后端数据库服务器的账号和密码,需在后端数据库器上创建该用户,并授权amoeba连接
# 此处需要特别注意:**** 密码默认是注释掉,需要去掉注释!!!

kongzhong

kongzhong


# 最大连接数[默认]
500
# 最大空闲连接数[默认]
500
10
600000
600000
true
true
true


# 设置一个后端的dbServer,名为master ,这个可以随便取,但是为了明确其含义,最好给予特殊含义的单词
# 下面指定的数据库IP地址,为mmm提供给对外访问的虚拟IP地址



192.168.1.12





192.168.1.13





192.168.1.14





192.168.1.15





192.168.1.16


# 指定一个虚拟的dbServer,将上面定义的dbserver加入这个虚拟的dbserver,相当于组成一个组[这里我们将读的数据库组成一个组]
# 这里 需要将 name="mul..." 改成自己想要取的名字,这个名字也需要有含义,后面会用到



# 选择调度算法 1 是轮询 2 是权重 3 是HA 这里选择1 轮询
1

# 负载均衡,slave1,slave2当成2个服务器进行调度,这模拟量加权的调度算法。
# 注意这里使用的dbserver必须是已经定义了的,可以写多个,如slave1,slave2
slave1,slave2,slave3,slave4




(2).配置 Amoeba 监听端口[amoeba.xml]
[root@client112 conf]# vim amoeba.xml
.........................(省略)




# 设置amoeba监听的端口(这里如果默认,后面测试需要指定端口,就是这里的端口)
3306


.........................(省略)


# 提供客户端连接amoeba时需要使用这里设定的账号 (这里的账号密码和amoeba连接后端数据库服务器的密码无关)
kongzhong123
# 提供客户端连接amoeba时需要使用这里设定的密码
kongzhong123


${amoeba.home}/conf/access_list.conf





.........................(省略)



${amoeba.home}/conf/rule.xml
${amoeba.home}/conf/ruleFunctionMap.xml


${amoeba.home}/conf/functionMap.xml
1500
master

# 把默认注释掉的读写分离选项,把注释去掉并readpool修改成virtualslave(这个名字,我们前面在dbServer.xml里设置一个读数据库组,这里是作为只读池)
master
virtualslave
true
(3).配置amoeba及JAVA的环境变量[这个上面配置java时配置过,如果没有配置参照下面]
[root@client112 local]# vim /etc/profile
# 在末尾添加
JAVA_HOME=/usr/local/java
AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
# 使变量生效
[root@centos local]# source /etc/profile

(4)登陆数据库授权相应用户权限
#  登陆任意一个主master,授权amoeba用到登陆用户(kongzhong需要授权,kongzhong123用于给前端登陆的不需要授权)
mysql> create database kongzhong;
mysql> grant all privileges on kongzhong.* to 'kongzhong'@'192.168.1.%' identified by 'kongzhong';
mysql> flush privileges;(5).启动amoeba测试
# 如果确认能够正常启动,就加>>/dev/null 否则还是看一下提示信息
[root@centos conf]# amoeba start & >>/dev/null
# 检测启动情况
[root@centos conf]# netstat -tulnp |grep java
# 停止amoeba测试指令是否可用
[root@centos conf]# amoeba stop(6).利用amoeba登陆测试[任何一台具有mysql客户端,出现以下提示即为正常]
[root@client100 ~]# mysql -h192.168.1.112 -ukongzhong123 -pkongzhong123
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1201340161
Server version: 5.1.45-mysql-amoeba-proxy-2.2.0 Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| kongzhong          |
| test               |
+--------------------+(7).在192.168.1.113配置amoeba,这里就不再延迟,重复上面配置amoeba的操作


4.安装和配置keepalived
# keepalived需要openssl依赖包
[root@client112 ~]# yum -y install openssl* gcc make
# 建立keepalived安装目录
[root@client112 ~]# mkdir /usr/local/keepalived
[root@client112 ~]# cd keepalived-1.2.9
[root@client112 keepalived-1.2.9]# ./configure  --prefix=/usr/local/keepalived
[root@client112 keepalived-1.2.9]# make
[root@client112 keepalived-1.2.9]# make install
# 复制相应文件到指定目录
[root@client112 keepalived-1.2.9]# cp /usr/local/keepalived/sbin/keepalived  /usr/sbin/
[root@client112 keepalived-1.2.9]# cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/
[root@client112 keepalived-1.2.9]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/
[root@client112 keepalived-1.2.9]# mkdir /etc/keepalived
[root@client112 keepalived-1.2.9]# cd /etc/keepalived/
# 以上的关于keepalived操作,请重复在192.168.1.113操作一遍
# 以下操作,根据提示操作
# 编辑配置文件[192.168.1.112上的配置文件]
[root@client112 keepalived]# vim keepalived.conf
bal_defs {
notification_email
{
# 设置报警邮件地址,每行一个
#  需开启本机sendmail服务[这里可以暂时忽略]
cloud_data@163.com
}
#设置邮件发送地址
notification_email_fromcloud_data@163.com
#设置smtp server 地址
smtp_server 127.0.0.1
#设置连接 smtp server超时时间
smtp_connect_timeout 30
#运行Keepalived服务器的一个标志,邮件主题中显示
router_id  client112
}
# vrrp实例定义部分
vrrp_instance VI_1 {
# 指定keepalived的角色,MASTER表示此主机是主服务器
# BACKUP表示是备用服务器
state MASTER
# 指定HA监测网络的接口
interface eth0
# 虚拟路由标志,同一个vrrp实例使用一个唯一标志
# 即同一个vrrp_instance下,MASTER和BACKUP一致
virtual_router_id 51
# 优先级,数字越大优先级越高,MASTER必须大于BACKUP
priority 100
# MASTER和BACKUP同步检查间隔,秒
advert_int 1
smtp_alert
# 设定验证类型和密码
authentication {
# 验证类型,PASS和HA
auth_type PASS
# 验证密码,MASTER和BACKUP密码相同才能进行通信
auth_pass kongzhong
}
# 虚拟ip地址
virtual_ipaddress
{
192.168.1.17
}
}
# 编辑配置文件[192.168.1.113上的配置文件]
[root@client113 keepalived]# vim keepalived.conf
bal_defs {
notification_email
{
cloud_data@163.com
}
notification_email_from cloud_data@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id client113
}
vrrp_instance VI_1 {
# 这里和192.168.1.112上不同,修改为BACKUP
state BACKUP
interface eth0
virtual_router_id 51
# 这里和192.168.1.112上不同,修改为80
priority 80
advert_int 1
smtp_alert
authentication {
# 这里需要和192.168.1.112上的一样,不然,无法切换的
auth_type PASS
auth_pass kongzhong
}
virtual_ipaddress
{
192.168.1.17
}
}
# 分别在192.168.1.112和192.168.1.113上启动keepalived
[root@client112 keepalived]# /etc/init.d/keepalived start
Starting keepalived: [  OK  ]
# 检查虚拟ip是否绑定网卡[这里ip默认会在优先级比较高的机器上,就是刚才设置的100和80]
[root@client112 keepalived]# ip add | grep 192.168.1.17
inet 192.168.1.17/32 scope global eth0
# 192.168.1.113上启动keepalived
[root@client113 keepalived]# /etc/init.d/keepalived start
Starting keepalived: [  OK  ]
# 113上如果需要看到ip需要关闭keepalived,也就是模拟112宕机
[root@client113 keepalived]# ip add | grep 192.168.1.17
# 停掉192.168.1.112的keepalived,看看虚拟IP192.168.1.17会不会自动切换到192.168.1.113上

5.现在就可以测试了:
简单测试:
(1).使用amoeba的真实ip登陆
[root@client100 ~]# mysql -h192.168.1.112 -ukongzhong123 -pkongzhong123
[root@client100 ~]# mysql -h192.168.1.113 -ukongzhong123 -pkongzhong123(2).使用keepalived提供的虚拟ip访问
[root@client100 ~]# mysql -h192.168.1.17 -ukongzhong123 -pkongzhong123
(3).模拟宕掉一台amoeba[即关闭keepalived],看还能否使用keepalived提供的虚拟ip访问
# 这时虚拟ip应该切换到另外一台好的amoeba上
[root@client100 ~]# mysql -h192.168.1.17 -ukongzhong123 -pkongzhong123







  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657130-1-1.html 上篇帖子: LVS DR模式搭建、keepalived+LVS搭建介绍 下篇帖子: keepalived配置参数官方文档中文翻译版
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表