编译安装mysql实现corosync+pacemaker+drbd+mysql高可用 实验拓扑图: 实验节点:节点一: ip : 172.16.249.248 host: node1.stu11.com node1 节点二: ip : 172.16.249.122 host: node3.stu11.com node3 650) this.width=650; src=http://www.68idc.cn/
编译安装mysql实现corosync+pacemaker+drbd+mysql高可用
实验拓扑图:
实验节点:节点一:ip:172.16.249.248 host: node1.stu11.com node1
节点二:ip:172.16.249.122 host: node3.stu11.com node3
650) this.width=650; src=http://www.68idc.cn/help/uploads/allimg/151111/121430o23-0.jpg title=1.png alt=wkiom1s58bcwx945aadehitb-sy859.jpg>
节点二的配置前准备:
##########下载安装drbd,以及依赖的包########[root@node3 ~ ]# rpm -ivh drbd84-utils-8.9.1-1.el6.elrepo.x86_64.rpm kmod-drbd84-8.4.5-504.1.el6.x86_64.rpm [root@node3 ~ ]# yum install corosync pacemaker -y ####安装corosync和pacemaker[root@node3 .ssh ]#fdisk /dev/sda ####创建用作drbd的磁盘,我这里使用分区模拟了command (m for help): ncommand action e extended p primary partition (1-4) ppartition number (1-4): 3first cylinder (7859-15665, default 7859):using default value 7859last cylinder,+cylinders or +size{k,m,g} (7859-15665, default 15665): +2g ##2g同步快一点,实际大小看生产需要command (m for help): w[root@node3 .ssh ]#partx -a /dev/sda
节点一配置:
[root@node1 ~ ]# rpm -ivh drbd84-utils-8.9.1-1.el6.elrepo.x86_64.rpm kmod-drbd84-8.4.5-504.1.e[root@node1 ~ ]# yum install corosync pacemaker -y[root@node1 ~ ]#fdisk /dev/sdacommand (m forhelp): ncommand action e extended p primary partition (1-4) ppartition number(1-4): 3first cylinder(7859-15665, default 7859):using default value7859last cylinder,+cylinders or +size{k,m,g} (7859-15665, default 15665): +2g command (m forhelp): w[root@node1 ~ ]#partx -a /dev/sda
##############################编辑corosync配置文件##############################
[root@node1 corosync]# cp corosync.conf.example corosync.conf[root@node1 corosync]# vim corosync.conf ##仅显示的是在使用的部分 2 compatibility: whitetank 3 4 totem { 5 version: 2 10 secauth: on 12 threads: 0 17 interface { 19 ringnumber: 0 25 bindnetaddr: 172.16.0.0 39 mcastaddr: 239.22.11.123 ##指定组播地址 44 mcastport: 5405 49 ttl: 1 50 } 51 } 53 logging { 57 fileline: off 60 to_stderr: no 63 to_logfile: yes 64 logfile: /var/log/cluster/corosync.log 66 to_syslog: yes 68 debug: off 72 timestamp: on 73 logger_subsys { 74 subsys: amf 75 debug: off 76 } 77 } 78 service { ####将pacemaker以模块方式和corosync结合工作 79 ver: 0 80 name: pacemaker 81 }
##########################################生成密钥########################################
[root@node1 yum.repos.d ]# corosync-keygenwriting corosync keyto /etc/corosync/authkey.[root@node1 drbd.d]# lsglobal_common.conf global_common.conf.bak mydisk.res[root@node1 corosync]# lltotal 24-r-------- 1 rootroot 128 jan 17 09:38 authkey ###保证权限是600或400-rw-r--r-- 1 rootroot 2701 jan 17 09:38 corosync.conf[root@node1 corosync]# scp corosync.conf authkey node3:/etc/corosync/corosync.conf 100% 2701 2.6kb/s 00:00 authkey 100% 128 0.1kb/s 00:00 [root@node3 corosync ]# ll //查看各节点密钥文件权限都是600,默认是不需要修改的。total 24-r-------- 1 rootroot 128 jan 17 09:38 authkey
############################配置各节点drbd配置文件配置##############################################
[root@node1 drbd.d]# vim global_common.conf 5 global { 6 usage-count no; 7 #minor-count dialog-refresh disable-ip-verification 8 } 10 common { 11 handlers { 17 pri-on-incon-degr /usr/lib/drbd/notify-pri-on-incon-degr.sh;/usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot-f; 18 pri-lost-after-sb /usr/lib/drbd/notify-pri-lost-after-sb.sh;/usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot-f; 19 local-io-error /usr/lib/drbd/notify-io-error.sh;/usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc /sysrq-trigger ; halt -f; 25 } 26 27 startup { 28 # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb 29 } 30 31 options { 32 # cpu-mask on-no-data-accessible 33 } 35 disk { 36 on-io-error detach; ###磁盘故障直接拆除 41 } 42 43 net { 44 protocol c; ###最稳妥的协议 45 cram-hmac-alg sha1; 46 shared-secret test; 54 } 56 syncer { 57 rate 100m; 58 59 } 60 } //一定要注意最后一个引号,是全局段的。
##################################配值drbd资源文件##################################################
[root@node1 drbd.d ]#vim mydisk.res 1 resource mydisk { 2 on node1.stu11.com { 3 device /dev/drbd0; 4 disk /dev/sda3; 5 address 172.16.249.248:7789; 6 meta-disk internal; 7 } 8 on node3.stu11.com { 9 device /dev/drbd0; 10 disk /dev/sda3; 11 address 172.16.249.122:7789; 12 meta-disk internal; 13 } 14 }
#################################同步两个节点的配置文件###########################################
[root@node1 drbd.d]# scp global_common.conf mydisk.res node3:/etc/drbd.d/global_common.conf 100% 2101 2.1kb/s 00:00 mydisk.res 100% 257 0.3kb/s 00:00
##################################各节点资源初始化#################################################
[root@node1 corosync]# drbdadm create-md mydiskinitializingactivity lognot initializingbitmapwriting meta data...new drbd meta datablock successfully created.
[root@node3 drbd.d]# drbdadm create-md mydiskinitializingactivity lognot initializingbitmapwriting meta data...new drbd meta datablock successfully created.[root@node3 corosync]# service drbd startstarting drbdresources:
##########################################启动各节点drbd###########################################
[root@node1 corosync]# service drbd startstarting drbdresources:
650) this.width=650; src=http://www.68idc.cn/help/uploads/allimg/151111/1214304240-1.jpg title=2.png alt=wkiom1s5-p-yt5ifaadhfsb3q2u098.jpg />
[root@node1 corosync ]# drbd-overview //查看节点状态
0:mydisk/0 connected secondary/secondary inconsistent/inconsistent
##########################提升一个节点为主节点:并且查看数据在同步######################################
[root@node1 corosync]# drbdadm primary --force mydisk[root@node1 corosync]# drbd-overview 0:mydisk/0 syncsource primary/secondary uptodate/inconsistent[>...................]sync'ed: 7.1% (1959028/2103412)k
650) this.width=650; src=http://www.68idc.cn/help/uploads/allimg/151111/1214302564-2.jpg title=3.png alt=wkiol1s5-zlrwazuaagtm_9o4nw385.jpg />
##################################对drbd格式化####################################################
[root@node1 corosync ]# mke2fs -t ext4 /dev/drbd0 //对主节点格式化
650) this.width=650; src=http://www.68idc.cn/help/uploads/allimg/151111/1214302602-3.jpg title=4.png alt=wkiom1s5-soy7yq9aaddfnfripc185.jpg />
#####################################挂载创建测试文件############################################
[root@node1 corosync ]# mount /dev/drbd0 /mnt/ [root@node1 corosync]# cd /mnt/[root@node1 mnt ]#lslost+found[root@node1 mnt ]#touch test.txt[root@node1 mnt ]#lslost+found test.txt
##################### ##降为从节点把另一个节点升为主节点挂载查看测试文件########################
[root@node1 ~ ]# umount /mnt/ [root@node1 ~ ]#drbddrbdadm drbdmeta drbd-overview drbdsetup [root@node1 ~ ]#drbdadm secondary mydisk[root@node1 ~ ]#drbd-overview 0:mydisk/0 connected secondary/secondary uptodate/uptodate
#####################节点二升级主节点,查看测试文件#################################
650) this.width=650; src=http://www.68idc.cn/help/uploads/allimg/151111/1214305h8-4.jpg title=5.png alt=wkiom1s5-_ihlcntaaevrvgonog788.jpg />
至此:两个节点的drbd已经建成同步完成。开始布置两个节点的mysql。
######################准备各节点的mysql############################################# 准备编译环境及安装:
[root@node3 /]# yum groupinstall development tools -y[root@node3 /]# yum install server platform developmnet[root@node3 ~ ]# yum install cmake -y //mariadb是使用cmake的编译安装的[root@node3 ~ ]# tar xf mariadb-10.0.13.tar.gz -c /usr/local/[root@node3 local ]#groupadd -g 306 mysql[root@node3 local ]#useradd -u 306 -g 306 mysql[root@node3 local ]#id mysqluid=306(mysql) gid=306(mysql) groups=306(mysql)[root@node3 local ]#mkdir /mydata[root@node3 ~ ]#umount /mnt/ [root@node3 local ]#chown -r mysql:mysql /mydata[root@node3 ~ ]#mount /dev/drbd0 /mydata [root@node3 mariadb-10.0.13 ]#cmake . -dcmake_install_prefix=/usr/local/mysql \##指定安装路径 -dmysql_datadir=/mydata \ ##指定库位置 -dwith_innobase_storage_engine=1 \ ##指定存储引擎 -dwith_archive_storage_engine=1\ -dwith_blackhole_storage_engine=1\ -dwith_readline=1\ -dwith_ssl=system\ ##定制ssl功能 -dwith_zlib=system\ ##定制zlib功能 -dwith_libwrap=0\ -dmysql_unix_addr=/tmp/mysql.sock\ ##sock位置 -ddefault_charset=utf8 \ ##默认字符集 -ddefault_collation=utf8_general_ci #make #make之后linking cxxexecutable my_safe_process[100%] built targetmy_safe_process[root@node3 mysql ]#ls /mydata/aria_log.00000001 aria_log_control ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema test[root@node3support-files ]# cp my-large.cnf /etc/mysql/my.cnf[root@node3support-files ]# cd /etc/mysql[root@node3 mysql ]#lsmy.cnf[root@node3 mysql ]#vim my.cnf #####在mysqld添加如下innodb_file_per_table = ondatadir = /mydata[root@node3 mysql ]#service mysqld startstartingmysql... [ ok ][root@node3 mysql ]# mysql //登陆已经正常了welcome to the mysqlmonitor. commands end with ; or \g.your mysqlconnection id is 4server version: 5.5.5-10.0.13-mariadb-log sourcedistributioncopyright (c) 2000,2013, oracle and/or its affiliates. all rights reserved.
650) this.width=650; src=http://www.68idc.cn/help/uploads/allimg/151111/12143055n-5.jpg title=6.png alt=wkiol1s6akibdzmaaacoj8rberu363.jpg />
注意:同样的步骤部署第二个节点mysql但是,不要初始化。因为共享磁盘已经初始化过了。
########################下面,就可以使用crmsh配置资源了。###########################
下面,就可以使用crmsh配置资源了。
首先:保证我们两个节点的服务不会开机自动启动。
650) this.width=650; src=http://www.68idc.cn/help/uploads/allimg/151111/12143033x-6.jpg title=7.png alt=wkiol1s6ahcjifplaadgdv1gzts642.jpg />
650) this.width=650; src=http://www.68idc.cn/help/uploads/allimg/151111/1214303016-7.jpg title=8.png alt=wkiom1s6av3biyk6aaebu0s2hyq789.jpg />
##################启动两个节点的corosync##########################################################
[root@node3 ~ ]#service corosync startstarting corosynccluster engine (corosync): [ ok ]
[root@node3 ~ ]# service mysqld stop ##停掉我们使用的所有资源stoppingmysqld: [ ok ][root@node3 ~ ]#umount /mydata/[root@node3 ~ ]#drbd-overview 0:mydisk/0 connected primary/secondary uptodate/uptodate[root@node3 ~ ]#drbdadm secondary mydisk[root@node3 ~ ]#drbd-overview 0:mydisk/0 connected secondary/secondary uptodate/uptodate[root@node3 ~ ]#service drbd stopstopping all drbdresources: .
650) this.width=650; src=http://www.68idc.cn/help/uploads/allimg/151111/1214301141-8.jpg title=9.png alt=wkiol1s6av7xurf-aae6ae3fg9i709.jpg />
安装crmsh ##安装并且定义
[root@node3 ~ ]# yum install crmsh-2.1-1.6.x86_64.rpm[root@node3 ~ ]# crmcrm(live)# configure#####################第一步:定义前提属性#############################crm(live)configure# property stonith-enabled=false //禁用stonishcrm(live)configure# property no-quorum-policy=ignore //定义无票策略#####################第二步:定义drbd主资源###########################crm(live)configure#primitive mydrbd ocf:linbit:drbd params drbd_resource=mydisk opmonitor role=master timeout=20 interval=10 op monitor role=slave timeout=20interval=10 op start timeout=240 op stop timeout=100####################第三步:定义drbd主从资源##########################crm(live)configure#ms ms_mydrbd mydrbd meta master-max=1 master-node-max=1clone-max=2 clone-node-max=1 notify=true####################第四步:定义文件系统资源##########################crm(live)configure#primitive myfs ocf:heartbeat:filesystem params device=/dev/drbd0directory=/mydata fstype=ext4 op monitor timeout=40 interval=20 op start timeout=60 op stop timeout=60####################第五步:定义协同约束##############################crm(live)configure#colocation mydrbd-master_with_myfs inf: ms_mydrbd:master myfscrm(live)configure#####################第六步:定义顺序约束##############################crm(live)configure#order ms_mydrbd-master_before_myfs inf: ms_mydrbd:promote myfs:start#################第七步:定义流动ip###################################crm(live)configure#primitive myvip ocf:heartbeat:ipaddr params ip=172.16.11.11 op monitortimeout=20 interval=10 op start timeout=20 op stop timeout=20###################第八步:定义mysql服务资源############################crm(live)configure#primitive myservice lsb:mysqld op monitor timeout=20 interval=20crm(live)configure####################第九步:定义他们为一个组资源########################crm(live)configure#group mygroup myvip myfs ms_mydrbd:master myservice####################第十步:定义他们的协同约束#########################crm(live)configure#order myfs_before_myservice inf: myfs:start myservice:startcrm(live)configure# commit ##提交interval in monitor_master must be uniquecrm(live)configure#show ##查看我们定义的所有资源
650) this.width=650; src=http://www.68idc.cn/help/uploads/allimg/151111/1214305433-9.jpg title=10.png alt=wkiom1s6a5azjlkoaavvzvgpk14762.jpg>
切换测试结果:
650) this.width=650; src=http://www.68idc.cn/help/uploads/allimg/151111/12143051r-10.jpg title=11.png alt=wkiom1s6a_cj3mheaacrw42jb6g335.jpg>
650) this.width=650; src=http://www.68idc.cn/help/uploads/allimg/151111/1214302q6-11.jpg title=12.png alt=wkiom1s6bbvrhunuaacjcpld-me589.jpg>
至此高可用全部完成!