Corosync+Pacemaker+Isici实现MySQL的高可用

Corosync+Pacemaker+Isici实现MySQL的高可用

ISICI简介:

  ISCSI(Internet SCSI):又称为IP-SAN,是一种基于因特网及SCSI-3协议下的存储技术。利用了TCP/IP的端口860和3260作为沟通的渠道。透过两部计算机之间利用ISCSI的协议来交换SCSI命令,让计算机可以透过高速的局域网集线来把SAN模拟成为本地的储存装置。

与传统的SCSI技术比较起来,ISCSI技术有以下三个革命性的变化:

1、把原来只用于本机的SCSI协义通过TCP/IP网络发送,使连接距离可作无限的地域延伸;

2、连接的服务器数量无限(原来的SCSI-3的上限是15);

3、由于是服务器架构,因此也可以实现在线扩容以至动态部署。

C/S架构:

Server:scsi-target-utils

Client:iscsi-initiator-utils

实验拓扑:

输入图片说明

实验环境:
OS:CentOS-6.7-x86_64

Node1:

IP:eth0,192.168.1.4
VIP:eth0:0,192.168.1.3

Node2:

IP:eth0,192.168.1.5
VIP:eth0:0,192.168.1.3

ISCSI+NTP:

IP:192.168.1.6

需要资源:VIP、mysqld、存储

实验流程:

配置高可用集群的前提:

1、时间必须保持同步:使用ntp服务器

[root@node2 ~]# yum install ntp
[root@node2 ~]# vim /etc/ntp.conf
restrict 192.168.1.0 mask 255.255.255.0 nomodify
server 127.127.1.0
fudge 127.127.1.0 stratum 1

启动服务:

[root@node2 ~]# chkconfig ntpd on
[root@node2 ~]# service ntpd start

各节点添加对时任务:

[root@node0 ~]# crontab -e
*/5 * * * *	/usr/sbin/ntpdate 192.168.1.6 &> /dev/null

2、节点必须名称互相通信:

编辑/etc/host 解析节点名称:

[root@node0 ~]# vim /etc/hosts
192.168.1.4	node0.chencer.org node0
192.168.1.5	node1.chencer.org node1

3、ssh密钥认证进行通信;

节点间ssh互信认证:

[root@node0 ~]# ssh-keygen -t rsa
[root@node0 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1

安装配置iscsi服务端:

提供硬盘分区:

[root@node2 ~]# fdisk -l /dev/sdb1
Disk /dev/sdb1: 10.7 GB, 10742183424 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

安装server端:

[root@node2 ~]# yum install iscsi-initiator-utils

查看安装生成文件:

[root@node2 ~]# rpm -ql scsi-target-utils
/etc/rc.d/init.d/tgtd    \\:服务启动脚本;
/etc/tgt/targets.conf    \\:主配置文件;
/usr/sbin/tgtadm    \\:配置工具;

启动服务:

[root@node2 ~]# chkconfig tgtd on
[root@node2 ~]# service tgtd start

有两种配置方式:

1、编辑主配置文件/etc/tgt/targets.conf;配置文件生成的iscsi target系统重启之后不会丢失

2、使用tgtadm配置工具;此命令配置的iscsi target系统重启之后会丢失

在此使用tgtadmin配置工具,顺便介绍命令使用方法:

服务端配置管理工具tgtadm的使用:

tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION]...

1、添加一个新的target且其ID为[id],名字为[name]:

--lld [driver] --op new --mode target --tid=[id] --targetname [name]

2、显示所有或某个特定的target:

--lld [driver] --op show --mode target [--tid=[id]]

3、向某ID为[id]的设备上添加一个新的LUN,其号码为[lun],且此设备提供给initiator使用;[path]是某“块设备”的路径,此块设备也可以是raid或lvm设备。lun0已经被系统预留;

--lld [driver] --op new --mode=logicalunit --tid=[id] --lun=[lun] --backing-store [path]

4、删除ID为[id]的target:

--lld [driver] --op delete --mode target --tid=[id]

5、删除target [id]中的LUN [lun]:

-lld [driver] --op delete --mode=logicalunit --tid=[id] --lun=[lun]

6、定义某target的基于主机的访问控制列表,其中,[address]表示允许访问此target的initiator客户端的列表:

--lld [driver] --op bind --mode=target --tid=[id] --initiator-address=[address]

7、解除target [id]的访问控制列表中[address]的访问控制权限:

--lld [driver] --op unbind --mode=target --tid=[id] --initiator-address=[address]

例如: 创建一个target:

[root@node2 ~]# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2015-10.org.chencer:tsan.disk1

创建LUN,号码为1:

[root@node2 ~]# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sdb1

开放给192.168.1.0/24网络中的主机访问:其中的-I相当于--initiator-address

[root@node2 ~]# tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.1.0/24

显示所有:

[root@node2 ~]# tgtadm --lld iscsi --op show --mode target

输入图片说明

安装client端:

[root@node0 ~]# yum install iscsi-initiator-utils

initiatorname重命名:

[root@node0 ~]# echo "InitiatorName=`iscsi-iname -p iqn.2015-10.org.chencer`" > /etc/iscsi/initiatorname.iscsi
iscsi-iname -p iqn.2015-10.org.chencer
[root@node0 ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2015-10.org.chencer:a02352b8395

[root@node1 ~]# echo "InitiatorName=`iscsi-iname -p iqn.2015-10.org.chencer`" > /etc/iscsi/initiatorname.iscsi
[root@node1 ~]# cat /etc/iscsi/initiatorname.iscsi
.InitiatorName=iqn.2015-10.org.chencer:6b2fe6ba80a3

启动服务:

[root@node0 ~]# service iscsi start
[root@node0 ~]# service iscsid start

客户端iscsiadm工具的使用:

  iscsiadm是个模式化的工具,其模式可通过-m或--mode选项指定,常见的模式有discovery、node、fw、session、host、iface几个,如果没有额外指定其它选项,则discovery和node会显示其相关的所有记录;session用于显示所有的活动会话和连接,fw显示所有的启动固件值,host显示所有的iSCSI主机,iface显示/var/lib/iscsi/ifaces目录中的所有ifaces设定。

iscsiadm -m discovery [ -d debug_level ] [ -P printlevel ] [ -I iface -t type -p ip:port [ -l ] ] 
iscsiadm -m node [ -d debug_level ] [ -P printlevel ] [ -L all,manual,automatic ] [ -U all,manual,automatic ] [ [ -T tar-getname -p ip:port -I iface ] [ -l | -u | -R | -s] ] [ [ -o operation ] 
-d,--debug=debug_level:显示debug信息,级别为0-8;
-l,--login
-t,--type=type:这里可以使用的类型为sendtargets(可简写为st)、slp、fw和isns,此选项仅用于discovery模式,且目前仅支持st、fw和isns;其中st表示允许每个target发送一个可用target列表给initiator;
-p,--portal=ip[:port]:指定target服务的IP和端口;
-m,--mode op:可用的mode有discovery、node、fw、host iface和session;
-T,--targetname=targetname:用于指定target的名字
-u,--logout 
-o,--op=OPEARTION:指定针对discoverydb数据库的操作,其仅能为new、delete、update、show和nonpersistent其中之一;
-I,--interface=[iface]:指定执行操作的iSCSI接口,这些接口定义在/var/lib/iscsi/ifaces中;

登陆查找到的设备:

# [root@node0 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.6
192.168.1.6:3260,1 iqn.2015-10.org.chencer:tsan.disk1
[root@node0 ~]# iscsiadm -m node -T iqn.2015-10.org.chencer:tsan.disk1 -p 192.168.1.6:3260 -l
Logging in to [iface: default, target: iqn.2015-10.org.chencer:tsan.disk1, portal: 192.168.1.6,3260] (multiple)
Login to [iface: default, target: iqn.2015-10.org.chencer:tsan.disk1, portal: 192.168.1.6,3260] successful.

查看客户端设备,多了一块设备;创建分区,并创建文件系统:

[root@node0 ~]# fdisk –l /dev/sdc1

输入图片说明

二进制格式安装Mysql-5.5:

解决软件依赖关系:

[root@node0 ]# yum install libaio

Iscsi设备挂载至/data目录,并创建mysql用户:

[root@node0 ~]# mkdir /data
[root@node0 ~]# mount /dev/sdc1 /data/
[root@node0 ~]# groupadd -g 306 -r mysql
[root@node0 ~]# useradd -u 306 -g 306 -r mysql
[root@node0 mysql]# mkdir /data/mydata
[root@node0 mysql]# chown -R mysql.mysql /data/

二进制安装设置:

[root@node0 ~]# tar xf mysql-5.5.47-linux2.6-x86_64.tar.gz -C /usr/local/
[root@node0 ~]# cd /usr/local/
[root@node0 local]# ln -sv mysql-5.5.47-linux2.6-x86_64 mysql
"mysql" -> "mysql-5.5.47-linux2.6-x86_64"
[root@node0 local]# cd mysql/
[root@node0 mysql]# chown -R root.mysql ./*
[root@node0 mysql]# scripts/mysql_install_db --user=mysql --datadir=/data/mydata/

导出头文件、库文件、man手册:

[root@node0 mysql]# ln -sv /usr/local/mysql/include /usr/include/mysql
"/usr/include/mysql" -> "/usr/local/mysql/include"
[root@node0 mysql]# vim /etc/ld.so.conf.d/mysql-5.5-x86_64.conf
/usr/local/mysql/lib
[root@node0 mysql]# ldconfig
[root@node0 mysql]# vim /etc/man.config
MANPATH /usr/local/mysql/man

添加并重读环境变量:

[root@node0 mysql]# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
[root@node0 mysql]# source /etc/profile.d/mysql.sh

提供配置文件和服务启动脚本:

[root@node0 mysql]# mkdir /etc/mysql
[root@node0 mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf
[root@node0 mysql]# vim /etc/mysql/my.cnf
[mysqld]
datadir = /data/mydata
thread_concurrency = 2
[root@node0 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@node0 mysql]# chmod +x /etc/rc.d/init.d/mysqld

加入服务列表,保证开机不自动启动:

[root@node0 mysql]# chkconfig --add mysqld
[root@node0 mysql]# chkconfig mysqld off

node1测试启动数据库:

[root@node0 mysql]# service mysqld start
Starting MySQL... SUCCESS!

为数据库创建并授权测试用户:

[root@node0 mysql]# mysql
mysql> create database testdb;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on *.* to root@'192.168.1.%' identified by 'rootroot';
Query OK, 0 rows affected (1.65 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

切换至另一节点测试:

[root@node0 mysql]# service mysqld stop
Shutting down MySQL. SUCCESS!
[root@node0 mysql]# umount /data/

登陆查找到的设备:

[root@node1 dev]# iscsiadm -m discovery -t sendtargets -p 192.168.1.6
192.168.1.6:3260,1 iqn.2015-10.org.chencer:tsan.disk1
[root@node1 dev]# iscsiadm -m node -T iqn.2015-10.org.chencer:tsan.disk1 -p 192.168.1.6:3260 -l
Logging in to [iface: default, target: iqn.2015-10.org.chencer:tsan.disk1, portal: 192.168.1.6,3260] (multiple)
Login to [iface: default, target: iqn.2015-10.org.chencer:tsan.disk1, portal: 192.168.1.6,3260] successful.

[root@node1 dev]# fdisk -l /dev/sdc

输入图片说明

挂载并启动服务:

[root@node1 mysql]# mkdir /data
[root@node1 mysql]# mount /dev/sdc1 /data/
[root@node1 mysql]# service mysqld start
Starting MySQL... SUCCESS!

连接测试数据库:

[root@node1 mysql]# mysql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| testdb             |
+--------------------+
5 rows in set (0.34 sec)

停止服务,并卸载存储:

[root@node1 mysql]# service mysqld stop
Shutting down MySQL. SUCCESS! 
[root@node1 mysql]# umount /data/

安装配置corosync+pacemaker+crmsh:

[root@node0 ~]# cat /etc/yum.repos.d/networkha-clusteringStable.repo 
[network_ha-clustering_Stable]
name=Stable High Availability/Clustering packages (CentOS_CentOS-6)
type=rpm-md
baseurl=http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/
enabled=1
gpgcheck=0
gpgkey=http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/repodata/repomd.xml.key

[root@node0 ~]# yum install corosync pacemaker crmsh

生成认证文件:

[root@node0 corosync]# corosync-keygen

编辑配置文件:

[root@node0 ~]# cd /etc/corosync/
[root@node0 corosync]# cp corosync.conf.example.udpu corosync.conf
[root@node0 corosync]# vim corosync.conf
compatibility: whitetank
totem {
    version: 2
    secauth: off
    interface {
        member {
            memberaddr: 192.168.1.4
        }
        member {
            memberaddr: 192.168.1.5
        }
        ringnumber: 0
        bindnetaddr: 192.168.1.0
        mcastaddr: 239.255.1.1
        mcastport: 5405
        ttl: 1
    }
    transport: udpu
}
logging {
    fileline: off
    to_logfile: no
    to_syslog: yes
    logfile: /var/log/cluster/corosync.log
    debug: off
    timestamp: on
    logger_subsys {
        subsys: AMF
        debug: off
    }
}

为pacemaker提供配置文件:

[root@node0 corosync]# vim service.d/pcmk
service {
    # Load the Pacemaker Cluster Resource Manager
    name: pacemaker
    ver: 1
}

将以上文件复制给另一节点:

[root@node0 corosync]# scp -r authkey corosync.conf service.d node1:/etc/corosync/

两节点启动corosync和pacemaker服务:

[root@node0 corosync]# service corosync start;service pacemaker start;ssh node1 'service corosync start;service pacemaker start'

查看当前状态:

[root@node0 corosync]# crm status
Last updated: Sun Jan 24 17:36:46 2016
Last change: Sun Jan 24 17:36:34 2016
Stack: classic openais (with plugin)
Current DC: node1.chencer.org - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
0 Resources configured

Online: [ node0.chencer.org node1.chencer.org ]

配置集群的工作属性:

而当前集群并没有相应的stonith设备,因此此默认配置目前尚不可用;并且因为双节点,所以忽略法定数:

[root@node0 ~]# crm    \\:进入交互式命令界面;
crm(live)# configure    \\:进入configure模式;
crm(live)configure# property stonith-enabled=false    \\:禁用stonith
crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# verify    \\:检查配置;
crm(live)configure# commit    \\:保存配置;

添加资源:VIP、Filesystem、mysqlserver

crm(live)configure# primitive vip ocf:heartbeat:IPaddr params ip=192.168.1.3 op monitor interval=10s timeout=20s
crm(live)configure# primitive data ocf:heartbeat:Filesystem params device="/dev/sdc1" directory="/data" fstype="ext4" op monitor interval=20s timeout=40s op start timeout=60s op stop timeout=60s
crm(live)configure# primitive mysql lsb:mysqld op monitor interval=20s timeout=30s
crm(live)configure# verify

定义各种资源约束:

crm(live)configure# colocation vip_with_data inf: vip data
crm(live)configure# colocation mysql_with_data inf: mysql data
crm(live)configure# order data_after_vip inf: vip data
crm(live)configure# order mysql_after_data inf: data mysql
crm(live)configure# verify
crm(live)configure# commit

查看所有资源:

crm(live)configure# show
node node0.chencer.org
node node1.chencer.org
primitive data Filesystem \
	params device="/dev/sdc1" directory="/data" fstype=ext4 \
	op monitor interval=20s timeout=40s \
	op start timeout=60s interval=0 \
	op stop timeout=60s interval=0
primitive mysql lsb:mysqld \
	op monitor interval=20s timeout=30s
primitive vip IPaddr \
	params ip=192.168.1.3 \
	op monitor interval=10s timeout=20s
colocation mysql_with_data inf: mysql data
colocation vip_with_data inf: vip data
order data_after_vip inf: vip data
order mysql_after_data inf: data mysql
property cib-bootstrap-options: \
	dc-version=1.1.11-97629de \
	cluster-infrastructure="classic openais (with plugin)" \
	expected-quorum-votes=2 \
	stonith-enabled=false \
	no-quorum-policy=ignore

启动资源组,查看资源状态:

crm(live)# status
Last updated: Sun Jan 24 17:48:20 2016
Last change: Sun Jan 24 17:46:45 2016
Stack: classic openais (with plugin)
Current DC: node1.chencer.org - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
3 Resources configured

Online: [ node0.chencer.org node1.chencer.org ]

 vip	(ocf::heartbeat:IPaddr):	Started node0.chencer.org 
 data	(ocf::heartbeat:Filesystem):	Started node0.chencer.org 
 mysql	(lsb:mysqld):	Started node0.chencer.org

连接数据库测试:

[root@node2 ~]# mysql -h192.168.1.3 -uroot -p
Enter password:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| testdb             |
+--------------------+
5 rows in set (0.06 sec)

mysql> create database tdb;
Query OK, 1 row affected (0.00 sec)

转移资源,测试链接数据库:

crm(live)# node standby
crm(live)# status
Last updated: Sun Jan 24 17:52:01 2016
Last change: Sun Jan 24 17:51:56 2016
Stack: classic openais (with plugin)
Current DC: node1.chencer.org - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
3 Resources configured

Node node0.chencer.org: standby
Online: [ node1.chencer.org ]

 vip	(ocf::heartbeat:IPaddr):	Started node1.chencer.org 
 data	(ocf::heartbeat:Filesystem):	Started node1.chencer.org 
 mysql	(lsb:mysqld):	Started node1.chencer.org 

[root@node2 ~]# mysql -h192.168.1.3 -uroot -p
Enter password:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| tdb                |
| test               |
| testdb             |
+--------------------+
6 rows in set (0.06 sec)

数据同步成功。

转载于:https://my.oschina.net/masachencer/blog/636449

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值