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

[经验分享] RedHat5下实现Mysql集群+Lvs+Keepalived实现高可用HA负载均衡

[复制链接]

尚未签到

发表于 2015-11-20 09:24:15 | 显示全部楼层 |阅读模式
  

0.  "NDB" 是什么意思?
  

它的意思是: "网络数据库".NDB(也叫NDB Cluster或者NDBCLUSTER),使用它才能让MySQL支持集群.




1. 什么是mysql集群?
  Mysql Cluster(集群)是Mysql适合于分布式计算环境的高实用,高冗余版本(其实是Mysql发布的一个版本)。它采用了NDB Cluster存储引擎,允许在一个集群中运行多个Mysql服务器。在mysql5.0及以上的的二进制版本中,以及与最新的Linux版本兼容RPM包中提供了该存储引擎。
  Mysql Cluster是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的Cluster(集群).通过无共享体系结构,系统能够使用低廉的硬件,而且对软硬件无特殊要求。此外每个组件有自己的内存和硬盘,不存在单点故障。
  Mysql Cluster由一组计算机组成,每台计算机上均运行着多种进程,包括Mysql服务器,NDB Cluster的数据节点,管理服务器,以及(可能)专门的数据访问程序,关于Cluster中这些组件的关系图如下:
DSC0000.gif





  图一
  名词解释:
  A:冗余:通常指通过多重备份来增加系统的可靠性。
  


  Mysql cluster的一些概念:

1-1 . NDB Management Server(NDB_MGMD)
  
  这里节点的作用是管理Mysql Cluster内的其他节点,如提供配置数据,启动并停止节点,运行备份等。由于这里节点负责管理其他节点的配置,应在启动其他节点前首先启动这类节点。启动命令是:“ndb_mgmd"。

1-2 .SQL Node(客户节点)
  
  这是用来访问Cluster数据的节点。对于Mysql Cluster,客户端节点是使用NDB Cluster存储引擎的传统Mysql服务器。通常,SQL节点是使用命令"mysqld -ndbcluster"启的,或将"ndbcluster"添加到"my.cnf"后使用"mysqld"启动。

1-3 .Data Node(数据节点)
  
  数据节点用于保存Cluster的数据。数据节点的数据与副本的数目有关,是片段的倍数。例如:对于两个副本,每个副本有两个片段,那么就有四个数据节点。不过没有必要设置多个副本。数据节点是用命令"ndbd"启动的。
  


  管理服务器负责管理Cluster配置文件和Cluster日志。Cluster中的每个节点从管理服务器检索配置数据,并请求确定管理服务器所在的位置的方式。当数据节点内出现新的事件时,节点奖关于这类事件的信息传输到管理服务器,然后将这里信息写入Cluster日志。
  


  1-4 . 如果上面的描述还不是太清晰,请参见下面的连接,应该可以了解的更清晰
  http://dev.mysql.com/doc/refman/5.1/zh/ndbcluster.html#mysql-cluster-overview


  



2. 为什么要实现高可用的mysql集群
  对于外部应用来说,访问ndb,还是要使用ip地址的方式来连接sql节点来使用数据库。如果只有一个sql节点,当该节点宕机后,外部应用将无法使用ndb,也就是对外部应用程序的单节点故障。解决sql的单点故障的方法就是引入多个sql节点,再透过lvs技术给外部应用提供统一的ip地址来实现负载均衡。为了负载均衡器的宕机不影响使用,又引入了多台负载均衡器,再透过keepalived技术来实现高可用性。当某一个sql节点和负载均衡节点宕机后不影响外部应用程序的使用。

3. mysql集群实现的步骤



3-1. 规划
  
  
  在MySql集群中分3类,5个节点
  管理节点(mgm)-------------------ip:192.168.1.52
  SQL节点1(sql1)------------------ip:192.168.1.53
  SQL节点2(sql2)------------------ip:192.168.1.54
  数据节点1(ndbd1)---------------ip:192.168.1.55

数据节点2(ndbd2)---------------ip:192.168.1.57
3-2.软件包下载与安装
  
  下载地址:
  http://ftp.ntu.edu.tw/pub/MySQL/Downloads/MySQL-Cluster-7.1/
  下载包如下:
  
  下载的时候注意os版本以及是否是64位,因为我的redhat5是64位的,所以,我下载了如下包:
  MySQL-Cluster-gpl-client-7.1.14-1.rhel5.x86_64.rpm #sql节点安装
  MySQL-Cluster-gpl-management-7.1.14-1.rhel5.x86_64.rpm #管理节点安装
  MySQL-Cluster-gpl-server-7.1.14-1.rhel5.x86_64.rpm #sql节点安装
  MySQL-Cluster-gpl-storage-7.1.14-1.rhel5.x86_64.rpm # ndbd节点安装
  MySQL-Cluster-gpl-tools-7.1.14-1.rhel5.x86_64.rpm #管理节点安装
  


  安装命令如下:
  安装管理节点
  

#rpm –ivh MySQL-Cluster-gpl-management-7.1.14-1.rhel5.x86_64.rpm
#rpm –ivh MySQL-Cluster-gpl-tools-7.1.14-1.rhel5.x86_64.rpm
  
  安装sql节点
  

#rpm –ivh MySQL-Cluster-gpl-server-7.1.14-1.rhel5.x86_64.rpm
#rpm –ivh MySQL-Cluster-gpl-client-7.1.14-1.rhel5.x86_64.rpm
  
  安装ndb节点
  

#rpm –ivh MySQL-Cluster-gpl-storage-7.1.14-1.rhel5.x86_64.rpm
  


3-3. 配置管理(mgm)节点
  

#mkdir /etc/mysql-cluster
#vi /etc/mysql-cluster/config.ini

内容如下:  
  

[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
#TCP/IP options:
[tcp default]
portnumber=2202
#Management process options:
[ndb_mgmd]
id=1
hostname=192.168.1.52
datadir=/var/lib/mysql-cluster
#Options for data node
[ndbd]
id=2
hostname=192.168.1.55
datadir=/var/lib/mysql
[ndbd]
id=3
hostname=192.168.1.57
#Set SQL node
[mysqld]
id=4
hostname=192.168.1.53
[mysqld]
id=5
hostname=192.168.1.54
  
  创建目录

#mkdir/var/lib/mysql-cluster

3-4.启动管理节点
  

#ndb_mgmd -f /etc/mysql-cluster/config.ini
  
  启动成功后的提示:
  MySQL Cluster Management Servermysql-5.1.56 ndb-7.1.14
  查看启动后的端口号
  

#netstat –ntlp
  

3-5 .配置NDB节点
  
  

#vi /etc/my.cnf
  
  在文件的末尾加入下面两行:
  

[mysql_cluster]
nbd-connectstring=192.168.1.52   #管理节点的ip
  
  
  创建目录

#mkdir/var/lib/mysql #如已存在,则放弃

3-6. 启动NDB节点
  
  

#ndbd –initial
  

3-7.配置sql节点
  
  

#vi /etc/my.cnf
内容如下:
#The MySQL server
[mysqld]
port=3306
socket=/var/lib/mysql/mysql.sock
ndbcluster
default-storage-engine=NDBCLUSTER
[mysql_cluster]
ndb-connectstring=192.168.1.52
  
  



3-8. 启动sql节点
  
  

#servicemysql start
  

3-9.在管理节点中查看mysql Cluster的状态
  
  

#ndb_mgm
Ndb_mgm>show
  
  Connected to Management Server at:localhost:1186
  Cluster Configuration
  ---------------------
  [ndbd(NDB)]     2 node(s)
  id=2    @192.168.1.55  (mysql-5.1.56 ndb-7.1.14, Nodegroup: 0,Master)
  id=3 (not connected, accepting connect from 192.168.1.57)
  
  [ndb_mgmd(MGM)] 1 node(s)
  id=1    @192.168.1.52  (mysql-5.1.56 ndb-7.1.14)
  
  [mysqld(API)]   2 node(s)
  id=4 (not connected, accepting connect from 192.168.1.53)
  id=5    @192.168.1.54  (mysql-5.1.56 ndb-7.1.14)
  
  上面红色的都是正常的,成功的ok

浅绿色的都是ng的,需要重新处理的,具体处理,视具体情况而定。比如说重新配置节点,重启等。
  



3-10 . 注意各节点的启动顺序
  
  注意启动顺序:(不能乱)
  启动管理节点
  启动ndb节点

启动sql节点
  



3-11. 以上mysql集群的安装完毕。



4. 高可用性的加入

4-1 . 在Mysql cluster集群完成后,现在加入lvs和keepalived软件来实现高可用性,规划如下:
  
  建立两台新的物理主机,作为调度器.
  调度器(Mysql-ha-lb1)----Ip:192.168.1.59
  调度器(Mysql-ha-lb2)----Ip:192.168.1.60

Vip设置为192.168.1.58
  



4-2. 下载软件
  
  ipvsadm-1.24-8.1.x86_64.rpm

keepalived-1.1.17.tar.gz  网上搜下就可以了,不再提供下载链接。

4-3. 在调度器上安装lvs
  #rpm  -ivh ipvsadm-1.24-8.1.x86_64.rpm



4-4.  在调度器上安装keepalived
  
  注意在安装去前需要执行如下语句:
  # ln -s /usr/src/kernels/2.6.18-92.el5-x86_64/ /usr/src/linux
  红色部分可以根据具体的os系统来指定。目的(keepalived默认编译时是在/usr/src/linux下找内核源代码。可是我的内核源代码都在:/usr/src/kernels/2.6.18-53.el5-x86_64/)
  

#tar zxvf keepalived-1.1.17.tar.gz
#cd keepalived-1.1.17
# ./configure  && make && make install
( #find / -name keepalived  # 查看keepalived位置  )   
  
  
  在屏幕中打印的安装log中查看,是否有如下内容:
  
  Keepalived configuration
  ------------------------
  Keepalived version       : 1.1.17
  Compiler                 : gcc
  Compiler flags           : -g -O2
  Extra Lib                : -lpopt -lssl -lcrypto
  Use IPVS Framework       : Yes
  IPVS sync daemon support: Yes
  Use VRRP Framework       : Yes
  Use LinkWatch            : No
  Use Debug flags          : No
  如果红色字体部分为yes,则表示ok.(# ln -s /usr/src/kernels/2.6.18-92.el5-x86_64/ /usr/src/linux有效了)
  继续配置keepalived
  
  

  # cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
#mkdir /etc/keepalived/
# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
# cp /usr/local/sbin/keepalived /usr/sbin/
  

4-5. 配置/etc/keepalived/keepalived.conf文件
  

#guration File for keepalived
#global define
global_defs {
router_id HaMySQL_1
}
vrrp_sync_group VGM {
group {
VI_MYSQL
}
}
vrrp_instance VI_MYSQL {
state MASTER  #副的设置为BACKUP
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 55
priority 100
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.58/24 dev eth0
}
################LVS MySQL Start#######################
virtual_server 192.168.1.58 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
#persistence_timeout 6
protocol TCP
real_server 192.168.1.53 3306 {
weight 100
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 192.168.1.54 3306 {
weight 100
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
#####################LVS MySQL END##########################

  


4-6. 配置lvs节点(Mysql Cluster的sql节点):
  

#vi /etc/init.d/lvsrsdr
内容如下:
#!/bin/bash
#description:start realserver
VIP=192.168.1.58
./etc/rc.d/init.d/functions
case "$1" in
start)
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $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 "start LVS of RealServer DR"
;;
stop)
/sbin/ifconfig lo:0 down
route del $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 "close LVS of RealServer DR"
;;
*)
echo "Usage:$0 {start|stop}"
exit 1
esac
给文件增加可执行权限
#chmod +x /etc/init.d/lvsrsdr


4-7. 启动lvs节点(Mysql Cluster的sql节点)
  

# service lvsrsdr start

4-8. 启动调度器
  

#service keepalived start
  可以在打开窗口上clone个新窗口,输入:
  #tail –f /var/log/messages

查看日志:
Feb 23 02:26:49 server1 last message repeated 4 times
Feb 23 02:27:58 server1 Keepalived: Starting Keepalived v1.1.17 (02/23,2012)
Feb 23 02:27:58 server1 Keepalived_healthcheckers: Using MII-BMSR NIC polling thread...
Feb 23 02:27:58 server1 Keepalived_healthcheckers: Registering Kernel netlink reflector
Feb 23 02:27:58 server1 Keepalived_healthcheckers: Registering Kernel netlink command channel
Feb 23 02:27:58 server1 Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'.
Feb 23 02:27:58 server1 Keepalived_healthcheckers: Configuration is using : 11807 Bytes
Feb 23 02:27:58 server1 Keepalived: Starting Healthcheck child process, pid=10289
Feb 23 02:27:58 server1 Keepalived_vrrp: Using MII-BMSR NIC polling thread...
Feb 23 02:27:58 server1 Keepalived_vrrp: Registering Kernel netlink reflector
Feb 23 02:27:58 server1 Keepalived_vrrp: Registering Kernel netlink command channel
Feb 23 02:27:58 server1 Keepalived_vrrp: Registering gratutious ARP shared channel
Feb 23 02:27:58 server1 Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'.
Feb 23 02:27:59 server1 Keepalived_vrrp: Configuration is using : 63643 Bytes
Feb 23 02:27:59 server1 Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(9,10)]
Feb 23 02:27:58 server1 Keepalived: Starting VRRP child process, pid=10292
Feb 23 02:27:59 server1 kernel: IPVS: [rr] scheduler registered.
Feb 23 02:27:59 server1 Keepalived_healthcheckers: Activating healtchecker for service [192.168.1.53:3306]
Feb 23 02:27:59 server1 Keepalived_healthcheckers: Activating healtchecker for service [192.168.1.54:3306]

Feb 23 02:28:04 server1 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Transition to MASTER STATE
Feb 23 02:28:09 server1 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Entering MASTER STATE
Feb 23 02:28:09 server1 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) setting protocol VIPs.
Feb 23 02:28:09 server1 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Sending gratuitous ARPs on eth0 for 192.168.1.58
Feb 23 02:28:09 server1 Keepalived_vrrp: VRRP_Group(VGM) Syncing instances to MASTER state
Feb 23 02:28:09 server1 avahi-daemon[5673]: Registering new address record for 192.168.1.58 on eth0.
Feb 23 02:28:14 server1 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Sending gratuitous ARPs on eth0 for 192.168.1.58
如果出现以上红色部分的内容,基本配置成功了

  红色字体内容是:
  
  Feb23 02:27:59 server1 Keepalived_healthcheckers: Activating healtchecker for service [192.168.1.53:3306]
  Feb 23 02:27:59 server1 Keepalived_healthcheckers: Activating healtchecker forservice [192.168.1.54:3306]
  Feb 23 02:28:09 server1 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Entering MASTER STATE
  Feb 23 02:28:09 server1 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) setting protocol VIPs.



4.9 在调度节点输入#ipvsadm,如果出现如下的内容,则配置Ok
  

# ipvsadm

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.58:mysql rr
-> 192.168.1.54:mysql           Route   100    0          0         
-> 192.168.1.53:mysql           Route   100    0          0        

  

5. 要远程应用程序访问mysql数据库,还需要一个远程访问的账号和密码,在mysql刚创建后,mysql是没有远程访问账号的,现在建立:
  
  在sql节点上增加远程认证客户
  

Mysql>:select user,host,password frommysql.user;
Mysql>:grant all privileges on *.* toadmin@”%” identified by ‘123123’ with grant option;


  



6、 测试省略。


  编辑中...

运维网声明 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-141360-1-1.html 上篇帖子: Mysql + LVS + KeepAlived 主主同步 下篇帖子: Redis主从复制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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