版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、MySQL+lvs+keepalived集群环境搭建1 MySQL集群简介1.1 什么是MySQL集群MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高性能。数据更新使用读已提交隔离级别(read-committedisolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phasedcommit)保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败)。无共享的对等节点使得某台服务器上的更新操作在其他服务器上立即可见。传播更新使用一种复杂的通信机制,这一机制专用来提供跨网络的高吞吐量。通过多个MySQL服务
2、器分配负载,从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余。了解更多:/why-mysql/white-papers/guide-to-optimizing-performance-of-the-mysql-cluster/1.2 集群 MySQL中名称概念1) Sql 结点(SQL node下图对应为 mysqld):分布式数据库。包括自身数据和查询中心结点数据2) 数据结点(Data node ndbd):集群共享数据(内存中)3) 管理服务器(Management Server ndb_mgmd):集群管理 SQL node,Da
3、ta node详情见下图:1.3 环境配置1) 至少2台Linux服务器,后面的例子是3台Linux服务器A:79Management ServerB:36Data node、SQL nodeC:0Data node、SQL node如果只有2台的话,那么其中一台机器就要多一个角色:Management Server2) MySQL集群版本安装程序,分32位和64位版本,最新版本请在/downloads/里面下载2 安装不管是Management Server,还是Data node、SQL
4、 node,都需要先安装MySQL集群版本,然后根据不用的配置来决定当前服务器有哪几个角色。安装之前准备好mysql用户和mysql用户组,相关命令:groupadd mysqluseradd mysql -g mysql确定相关机器的防火墙已关闭(或者设置防火墙这几台机器之间的网络连接是畅通无阻的),相关命令:chkconfig iptables offservice iptables stop2.1 安装MySQL集群版本1) 把mysql-cluster-advanced-7.3.2-linux-glibc2.5-i686.tar.gz(这是32位安装版,64位安装版:mysql-clu
5、ster-advanced-7.3.2-linux-glibc2.5-x86_64.tar.gz)上传到/usr/local2) 解压:tar zxvf mysql-cluster-advanced-7.3.2-linux-glibc2.5-i686.tar.gz3) 重命名:mv mysql-cluster-advanced-7.3.2-linux-glibc2.5-i686 mysql4) 授权:chown -R mysql:mysql mysql5) 切换到mysql用户:su mysql6) 切换目录到mysql:/usr/local/mysql7) 安装mysql:scripts/m
6、ysql_install_db -user=mysql2.2 配置Management Server1) 使用root账号创建目录:mkdir /var/lib/mysql-cluster2) 新建文件config.ini然后上传到mysql-cluster里面:ndbd defaultNoOfReplicas=2DataMemory=80MIndexMemory=18Mndb_mgmdHostname=28datadir=/var/lib/mysql-clusterndbdHostname=29datadir=/usr/local/mysql/da
7、ta/ndbdHostname=4datadir=/usr/local/mysql/data/MYSQLDHostname=4MYSQLDHostname=29MYSQLD3) 授权:chown -R mysql:mysql /var/lib/mysql-cluster4) 切换到mysql用户:su mysql5) 启动管理服务:/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini6) 查看服务是否正常启动:netstat lntpu打印:tcp
8、0 0 :1186 :* LISTEN 2437/ndb_mgmd看到1186端口开放了说明启动是正常的2.3 配置Data Node1) 新建文件f然后上传到/etc里面:mysqldsql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #basedir = /usr/local/mysql/datadir = /usr/local/mysql/data#user = mysql#port = 3306#socket = /tmp/mysql.sockndbclusterndb-connectstring
9、=28mysql_clusterndb-connectstring=28(*网上有些资料是直接改/usr/local/mysql/f,我试了一下,无法启动,估计程序默认是读取/etc/f)2) 切换到mysql用户:su mysql3) 启动数据节点服务:/usr/local/mysql/bin/ndbd initial第一次启动需要加参数:initial,以后就不用加了,直接运行:/usr/local/mysql/bin/ndbd4) 查看服务是否正常启动:netstat lntpu打印:tcp 0 0 4
10、:56806 :* LISTEN 4949/ndbdtcp 0 0 4:44894 :* LISTEN 4949/ndbdtcp 0 0 4:50531 :* LISTEN 4949/ndbd看到ndbd了说明启动是正常的2.4 配置SQL Node1) 新建文件f然后上传到/etc里面,和上面的Data Node里面的配置一样,如果上面的步骤已经做了,略去此步骤。2) 切换到mysql用户:su mysql3) 设置管理员密码:/usr/local/mysql/bin/mysqladmin -u
11、root password 123/usr/local/mysql/bin/mysqladmin -u root -h LINUX129 password 123上面的命令行里面的123是新密码,LINUX129是机器名,这2条命令来自于安装mysql执行:scripts/mysql_install_db -user=mysql 后的打印日志4) 复制mysqld到系统服务里面去:cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld如果权限不够,可以先使用root用户授权:chown -R mysql:mysql /
12、etc/init.d/mysqld5) 启动SQL节点服务:service mysqld start或者/etc/init.d/mysqld start或者/usr/local/mysql/bin/mysqld_safe -user=mysql &6) 查看服务是否正常启动:netstat lntpu打印:tcp 0 0 :3306 :* LISTEN 2590/mysqld看到3306端口开放了说明启动是正常的3 常用命令或问题1) ndb_mgmd管理命令:/usr/local/mysql/bin/ndb_mgm执行之后就是管理控制台了,里面可以继续输入命令。查看集群里面的全部节点的状态:
13、show2) 停止集群服务器的命令:/usr/local/mysql/bin/ndb_mgm -e shutdown或者在 ndb_mgm 下查看服务ID show 看到相应的ID号 使用 ID STOP停止服务如果集群配置有更新了:rm /usr/local/mysql/mysql-cluster/ndb_1_config.bin.13) 停止SQL节点的命令:/usr/local/mysql/bin/mysqladmin -uroot shutdown4) SQL Node上连接MySQL:/usr/local/mysql/bin/mysql -u root p执行之后就是MySQL控制台
14、了,里面可以继续输入命令。测试集群环境:mysql show databases;打印:+-+| Database |+-+| information_schema | | mysql | | ndb_2_fs | | test | +-+mysql create database aa;mysql use aamysql CREATE TABLE ctest2 (i INT primary key) ENGINE=NDB; /1.每个MySQL集群表都需要主键.如果没有定义主键,则 NDB 存储引擎会自动创建一个,并且不是指定 USING HASH 的方式;2.这里必须指定数据库表的引擎为N
15、DB(或者NDBCLUSTER),否则同步失败mysql INSERT INTO ctest2 () VALUES (1);mysql SELECT * FROM ctest2;打印:+-+| i |+-+| 1 | +-+同样方式在另外一台SQL Node上连接MySQL,查看数据库、表、记录是否已同步过去。5) 解决MySQL客户端工具连接SQL Node出现1130的异常,在MySQL控制台下执行:l 如果你想myuser使用mypassword从任何主机连接到mysql服务器的话。GRANT ALL PRIVILEGES ON *.* TO myuser% IDENTIFIED BY
16、mypassword WITH GRANT OPTION;FLUSH PRIVILEGES;l 如果你想允许用户myuser从ip为的主机连接到mysql服务器,并使用mypassword作为密码GRANT ALL PRIVILEGES ON *.* TO myuser IDENTIFIED BY mypassword WITH GRANT OPTION;FLUSH PRIVILEGES;l 如果你想允许用户myuser从ip为的主机连接到mysql服务器的dk数据库,并使用mypassword作为密码GRANT ALL PRI
17、VILEGES ON dk.* TO myuser IDENTIFIED BY mypassword WITH GRANT OPTION;FLUSH PRIVILEGES;6) 使用MySQL客户端工具创建表时选择引擎:NDBCLUSTER,如下图:LVS配置lvs是在linux操作系统基础上建立虚拟服务器,实现服务节点之间的负载均衡。它是基于linux内核实现的。2.6.X内核默认集成了lvs模块。lvs常用负载均衡的实现是基于ip协议的,所以一般称为ipvs。ipvs有三种实现方式,最常用、性能最好的是Direct routing(简称DR)。Ubuntu9.10已经
18、用了2.6的内核,所以不需要再编译内核了,为了检测一下,可以在命令行执行:modprobe -l | grep ipvs会出现:kernel/net/netfilter/ipvs/ip_vs.kokernel/net/netfilter/ipvs/ip_vs_rr.kokernel/net/netfilter/ipvs/ip_vs_wrr.kokernel/net/netfilter/ipvs/ip_vs_lc.kokernel/net/netfilter/ipvs/ip_vs_wlc.kokernel/net/netfilter/ipvs/ip_vs_lblc.kokernel/net/ne
19、tfilter/ipvs/ip_vs_lblcr.kokernel/net/netfilter/ipvs/ip_vs_dh.kokernel/net/netfilter/ipvs/ip_vs_sh.kokernel/net/netfilter/ipvs/ip_vs_sed.kokernel/net/netfilter/ipvs/ip_vs_nq.kokernel/net/netfilter/ipvs/ip_vs_ftp.ko说明内核已经集成了ipvs模块我的机器三台机器分别是0,,36。虚拟IP为22其中1
20、作为负载均衡器使用,首先需要安装ipvsadm。执行:apt-get install ipvsadm安装完成后执行:ipvsadm会看到提示:IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags- RemoteAddress:Port Forward Weight ActiveConn InActConn说明已经安装成功。接下来就是配置lvs,其实很简单,就是在负载均衡器建一个虚拟ip,然后用ipvsadm建立转发规则配置虚拟IP:ifconfig eth0:0 1
21、22 netmask broadcast 22echo 1/proc/sys/net/ipv4/ip_forward (此指令暂没发现有啥用处)使用ipvsadm安装LVS服务:ipvsadm -A -t 22:3306 -s wrr #注意3306为MYSQL服务端口,如果是其它服务可修改端口号增加真实服务器:ipvsadm -a -t 22:3306 -r 0 -g -w 1 #最后面是数字“一”不是“L”ipvsadm -a -t
22、22:3306 -r 36 -g -w 1sudo ipvsadm -a -t 22:3306 -r 21 -g -w 3真实服务器的配置:ifconfig lo:0 22 netmask 55 broadcast 22route add -host 22 dev lo:0(此指令暂没发现有啥用处)echo 1/proc/sys/net/ipv4/ip_forward(此指令暂没发现有啥用处)我自己还尝试成功的指令:LBServer:if
23、config eth0:0 22 netmask broadcast 22真实服务器:ifconfig eth0:0 22 netmask broadcast 22我只需要建立一个eth0:0就可以了。与实际不同的在于子网掩码的第三段(255 vs 252)在负载均衡服务器用ipvsadm -list查看:IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Schedule
24、r Flags- RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 22:3306 wrr- 0:3306 Route 1 0 0 - 36:3306 Route 1 0 0 接着是做ARP Hidden,不同的linux系统指令有所区别,Ubuntu系统的指令为:echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/lo/arp_announceecho 1 /pro
25、c/sys/net/ipv4/conf/all/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/all/arp_announce这时就可以访问虚拟IP(22)端口还是3306,访问MYSQLCLUSTER,注意 ,使用的用户必需要在所有MYSQL节点建立并且密码一至,否则无法登陆。最后可以在负载均衡服务器上用ipvsadm -list查看:IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags- RemoteAddress:Port
26、 Forward Weight ActiveConn InActConnTCP 22:3306 wrr- 0:3306 Route 1 2 0 - 36:3306 Route 1 2 0 确实大功告成。不过如果机器重启的话,这些配置就没了,需要重新设置哦,另外还有个ipvsadm -C的指令是用于清除ipvsadm配置的,可能会有用处。Ubuntu下部署KeepalivedUbuntu下部署KeepalivedKeepalived是一种防止单点故障的高可用解决方案。首先下载:cd /usrwget http:/www.keepa
27、/software/keepalived-1.2.7.tar.gz解压: tar zxvf keepalived-1.2.7.tar.gz编译之前需要安装几个程序库plainapt-get install libssl-dev apt-get install openssl apt-get install libpopt-dev 然后运行./configure -prefix=/usr 得到如下结果:Keepalived configuration - Keepalived version : 1.2.7 Compiler : gcc Compiler flags : -g
28、-O2 Extra Lib : -lpopt -lssl -lcrypto Use IPVS Framework : Yes IPVS sync daemon support : Yes IPVS use libnl : No Use VRRP Framework : Yes Use VRRP VMAC : Yes SNMP support : No Use Debug flags : No 编译吧:makemake install程序安装到下面几个目录:/usr/sbin中包含可执行程序keepalived/usr/etc/keepalived/ 中包含了配置文件和例子/usr/etc/rc
29、.d/init.d/keepalived 是可以作为service的脚本文件,复制到/etc/init.d目录下修改三处:plain#. /etc/rc.d/init.d/functions . /lib/lsb/init-functions plain#. /etc/sysconfig/keepalived . /usr/etc/sysconfig/keepalived 因为redhat之外的Linux没有上面两处目录。 下面也要修改,将$. 直接用start替换。plainstart() echo -n $Starting $prog: #daemon keepalived $KEEPAL
30、IVED_OPTIONS daemon keepalived start RETVAL=$? echo $RETVAL -eq 0 & touch /var/lock/subsys/$prog 还要创建目录plainmkdir -p /var/lock/subsys 现在设置为系统服务plainupdate-rc.d keepalived default 安装daemon服务。apt-get install daemon配置keepalived.confvi /etc/keepalived/keepalived.conf添加如下内容:global_defsrouter_idHaMySQL_1v
31、rrp_sync_groupVGMgroupVI_MYSQLvrrp_instanceVI_MYSQLstateMASTERinterfaceeth0virtual_router_id100priority100advert_int1authenticationauth_typePASSauth_pass1111virtual_ipaddress22/24dev etholabeleth0:1virtual_server223306delay_loop6lb_algorrlb_kindDR#nat_mask#persistenc
32、e_timeout50protocolTCPreal_server03306weight3TCP_CHECKconnect_timeout3nb_get_retry3delay_before_retry3connect_port3306real_server363306weight3TCP_CHECKconnect_timeout3nb_get_retry3delay_before_retry3connect_port3306global_defs router_id HaMySQL_1vrrp_sync_group VGM group VI_MYS
33、QL vrrp_instance VI_MYSQL state MASTER interface eth1 virtual_router_id 100 priority 100 advert_int 1 authentication auth_type PASS auth_pass 1111 virtual_ipaddress 51/24 etho label eth0:1 virtual_server 51 3306 delay_loop 6 lb_algo rr lb_kind DR # nat_mask #pers
34、istence_timeout 50 protocol TCP real_server 06 3306 weight 3 TCP_CHECK connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 real_server 07 3306 weight 3 TCP_CHECK connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 real_server 0
35、8 3306 weight 3 TCP_CHECK connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 real_server 11 3306 weight 3 TCP_CHECK connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 4.sql服务节点的配置vi /etc/rc.d/init.d/realserver.sh 添加如下配置:#!/bin/bash#description:Con
36、figrealserverloandapplynoarpSNS_VIP=22/etc/rc.d/init.d/functionscase$1instart)ifconfiglo:0$SNS_VIPnetmask55broadcast$SNS_VIP/sbin/routeadd-host$SNS_VIPdevlo:0echo1/proc/sys/net/ipv4/conf/lo/arp_ignoreecho2/proc/sys/net/ipv4/conf/lo/arp_announceecho1/proc/sys/net/ipv4/conf/all
37、/arp_ignoreecho2/proc/sys/net/ipv4/conf/all/arp_announcesysctl-p/dev/null2&1echoRealServerStartOK;stop)ifconfiglo:0downroutedel$SNS_VIP/dev/null2&1echo0/proc/sys/net/ipv4/conf/lo/arp_ignoreecho0/proc/sys/net/ipv4/conf/lo/arp_announceecho0/proc/sys/net/ipv4/conf/all/arp_ignoreecho0/proc/sys/net/ipv4/
38、conf/all/arp_announceechoRealServerStoped;*)echoUsage:$0start|stopexit1esacexit0#!/bin/bash# description: Config realserver lo and apply noarpSNS_VIP=51/etc/rc.d/init.d/functionscase $1 instart) ifconfig lo:0 $SNS_VIP netmask 55 broadcast $SNS_VIP /sbin/route add -host $SNS
39、_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/n
40、ull 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 1esacexit 0添加加可执行的权限chmod +x /etc/rc.d/init.d/re
41、alserver.sh 注:四台sql节点都要进行此步操作五、启动LVS节点(mysql cluster中的sql节点)/etc/rc.d/init.d/realserver.sh start六、启动调度器(keepalived的服务器端启动)/etc/rc.d/init.d/keepalived start启动后可以用命令 tail -f /var/log/messages进行查看若看到如下提示,则表示配置成功。1. rootsg204mysql-cluster#tail-f/var/log/messages2. May2917:21:01sg204Keepalived_vrrp:Openi
42、ngfile/etc/keepalived/keepalived.conf.3. May2917:21:01sg204Keepalived_vrrp:Configurationisusing:63921Bytes4. May2917:21:01sg204Keepalived_healthcheckers:UsingLinkWatchkernelnetlinkreflector.5. May2917:21:01sg204Keepalived_vrrp:UsingLinkWatchkernelnetlinkreflector.6. May2917:21:01sg204Keepalived_heal
43、thcheckers:Activatinghealtcheckerforservice06:33067. May2917:21:01sg204Keepalived_healthcheckers:Activatinghealtcheckerforservice07:33068. May2917:21:01sg204Keepalived_healthcheckers:Activatinghealtcheckerforservice08:33069. May2917:21:01sg204Keepalived_healthchecker
44、s:Activatinghealtcheckerforservice11:330610. May2917:21:01sg204Keepalived_vrrp:VRRPsockpool:ifindex(3),proto(112),fd(10,11)11. May2917:21:02sg204Keepalived_vrrp:VRRP_Instance(VI_MYSQL)TransitiontoMASTERSTATE12. May2917:21:03sg204Keepalived_vrrp:VRRP_Instance(VI_MYSQL)EnteringMASTERSTATE13
45、. May2917:21:03sg204Keepalived_vrrp:VRRP_Instance(VI_MYSQL)settingprotocolVIPs.14. May2917:21:03sg204Keepalived_healthcheckers:NetlinkreflectorreportsIP51added15. May2917:21:03sg204Keepalived_vrrp:VRRP_Instance(VI_MYSQL)SendinggratuitousARPsoneth1for5116. May2917:21:03sg204Keepalive
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东珠海市香洲暨大幼教集团新城园区公开招聘志愿实习幼儿教师考试参考试题及答案解析
- 2026年3月广东广州市天河区长兴小学招聘编外聘用制专任教师1人考试参考试题及答案解析
- 2025-2026学年酸奶制作教学设计英语
- 2025-2026学年乘公共汽车教案
- 2026年山西管理职业学院单招综合素质考试题库有答案详细解析
- 2026云南红河州元阳县市场监督管理局公益性岗位、临聘人员招聘5人考试参考试题及答案解析
- 2026年福建省福州实验小学公开招聘教师1人考试参考试题及答案解析
- 2026年西南财经大学天府学院单招综合素质考试题库及答案详细解析
- 2026年云南经济管理学院单招综合素质考试题库附答案详细解析
- 2026上半年四川事业单位统考青神县考试招聘中小学教师11人笔试模拟试题及答案解析
- VDA6.3 2023 过程审核检查表-参考表单
- 历年中职高考《农业经营与管理》考试真题题库(含答案)
- 肿瘤患者心理抑郁的护理
- 初中数学知识树
- CPK-数据自动生成器
- 增材制造技术课件
- 大连周水子国际机场
- 第二章护理伦理学的理论基础课件
- 闽教版小学英语五年级下册校本作业
- 拜仁慕尼黑足球俱乐部
- 晚归检讨书阅读
评论
0/150
提交评论