vivion32 发表于 2015-11-20 09:24:15

RedHat5下实现Mysql集群+Lvs+Keepalived实现高可用HA负载均衡

  

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中这些组件的关系图如下:






  图一
  名词解释:
  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

内容如下:  
  


NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
#TCP/IP options:

portnumber=2202
#Management process options:

id=1
hostname=192.168.1.52
datadir=/var/lib/mysql-cluster
#Options for data node

id=2
hostname=192.168.1.55
datadir=/var/lib/mysql

id=3
hostname=192.168.1.57
#Set SQL node

id=4
hostname=192.168.1.53

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
  
  在文件的末尾加入下面两行:
  


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

port=3306
socket=/var/lib/mysql/mysql.sock
ndbcluster
default-storage-engine=NDBCLUSTER

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
  ---------------------
     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)
  
   1 node(s)
  id=1    @192.168.1.52(mysql-5.1.56 ndb-7.1.14)
  
     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:
Feb 23 02:27:58 server1 Keepalived: Starting VRRP child process, pid=10292
Feb 23 02:27:59 server1 kernel: IPVS: scheduler registered.
Feb 23 02:27:59 server1 Keepalived_healthcheckers: Activating healtchecker for service
Feb 23 02:27:59 server1 Keepalived_healthcheckers: Activating healtchecker for service
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: 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
  Feb 23 02:27:59 server1 Keepalived_healthcheckers: Activating healtchecker forservice
  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
TCP192.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]
查看完整版本: RedHat5下实现Mysql集群+Lvs+Keepalived实现高可用HA负载均衡