corosync+pacemaker+nfs提供mysql高可用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:
corosync/openais+pacemaker+nfs提供mariadb高可用

节点一, one, 172.16.249.122/16, 172.16.0.1, CentOS6.6, mariadb
节点二, two, 172.16.249.123/16, 172.16.0.1, CentOS6.6, mariadb
节点三, three, 172.16.249.124/16, 172.16.0.1, CentOS6.6, NFS
VIP: 172.16.249.121

节点一: one 172.16.249.122
setup #设定ip
hostname one.centos 
sed -i s@HOSTNAME=.*@HOSTNAME=one.centos@g /etc/sysconfig/network 
vim /etc/hosts
172.16.249.122    one.centos    one
172.16.249.123    two.centos    two
======
ssh-keygen -t rsa -P '' -f '/root/.ssh/id_rsa'
ssh-copy-id -i ./.ssh/id_rsa.pub root@two
ntpdate -u 202.112.10.60
date ; ssh two 'date'

节点二: two 172.16.249.123
setup #设定ip
hostname two.centos
sed -i s@HOSTNAME=.*@HOSTNAME=two.centos@g /etc/sysconfig/network 
vim /etc/hosts
172.16.249.122    one.centos    one
172.16.249.123    two.centos    two
======
ssh-keygen -t rsa -P '' -f '/root/.ssh/id_rsa'
ssh-copy-id -i ./.ssh/id_rsa.pub root@one
ntpdate -u 202.112.10.60
date ; ssh one 'date'


节点三: three 172.16.249.124
cfdisk -Ps /dev/sda
cfdisk /dev/sda 
创建两个大小为20G,类型为8e的分区,分区文件分别为/dev/sda3和/dev/sda4 (过程略)
partx -a /dev/sda  (执行两次)
pvcreate /dev/sda{3,4} 
pvs
vgcreate myvg /dev/sda{3,4}
lvcreate -L 20G -n mydata myvg 
mke2fs -j -L MYDATA /dev/myvg/mydata 
blkid /dev/myvg/mydata

mkdir -pv /sharedata
vim /etc/fstab
追加如下内容
LABEL=MYDATA      /sharedata   ext3    defaults  0 0  
mount -a
mount
>/dev/mapper/myvg-mydata on /sharedata type ext3 (rw)
df -h /sharedata/
/dev/mapper/myvg-mydata  20G  173M   19G   1% /sharedata

useradd -r -u 150 mysql 
chown -R mysql:mysql /sharedata/ 
vim /etc/exports 
/sharedata  172.16.249.122(rw,no_root_squash) 172.16.249.123(rw,no_root_squash)
==============
service nfs start 
chkconfig nfs on 
showmount -e localhost 
>Export list for localhost: 
>/sharedata 172.16.249.122,172.16.249.123


节点一: one 172.16.249.122
useradd -r -u 150 mysql 
mkdir -pv /data/mydata 
mount -t nfs 172.16.249.124:/sharedata /data/mydata 
ls /data/mydata/
>lost+found 
df -h /data/mydata/
>Filesystem                    Size  Used Avail Use% Mounted on
>172.16.249.124:/sharedata    20G  172M   19G   1% /data/mydata
su - mysql 
cd /data/mydata/    #确认mysql用户对改目录有读写权限
touch onefile   
rm onefile
exit


节点二: two 172.16.249.123
useradd -r -u 150 mysql 
mkdir -pv /data/mydata 
mount -t nfs 172.16.249.124:/sharedata /data/mydata 
ls /data/mydata/
>lost+found 
df -h /data/mydata/
>Filesystem                    Size  Used Avail Use% Mounted on
>172.16.249.124:/sharedata    20G  172M   19G   1% /data/mydata
su - mysql 
cd /data/mydata/    #确认mysql用户对改目录有读写权限
touch twofile   
rm twofile
exit



节点一: one 172.16.249.122
安装mariadb
ls
>mariadb-5.5.43-binary-linux-x86_64.tar.gz
tar xf mariadb-5.5.43-binary-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/ 
ln -sv mariadb-5.5.43-linux-x86_64 mysql
cd mysql
chown -R root:mysql . 
scripts/mysql_install_db --datadir=/data/mydata/ --user=mysql
\cp support-files/my-large.cnf /etc/my.cnf 
vim /etc/my.cnf 
thread_concurrency = 2    #修改
datadir = /data/mydata        #添加
=========
cp support-files/mysql.server /etc/rc.d/init.d/mysqld 
chkconfig --add mysqld 
service mysqld start 
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin/:$PATH
===========
export PATH=/usr/local/mysql/bin/:$PATH
mysql        #连接数据库
show databases;
quit           #退出数据库
service mysqld stop
chkconfig mysqld off 
chkconfig mysqld --list 
umount /data/mydata/ 


节点二: two 172.16.249.123
安装mariadb
ls
>mariadb-5.5.43-binary-linux-x86_64.tar.gz
tar xf mariadb-5.5.43-binary-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/ 
ln -sv mariadb-5.5.43-linux-x86_64 mysql
cd mysql
chown -R root:mysql . 
\cp support-files/my-large.cnf /etc/my.cnf 
vim /etc/my.cnf 
thread_concurrency = 2    #修改
datadir = /data/mydata        #添加
=========
cp support-files/mysql.server /etc/rc.d/init.d/mysqld 
chkconfig --add mysqld 
service mysqld start 
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin/:$PATH
===========
export PATH=/usr/local/mysql/bin/:$PATH
mysql        #连接数据库
show databases;
quit           #退出数据库
service mysqld stop
chkconfig mysqld off 
chkconfig mysqld --list    #确保开机不自启
umount /data/mydata/ 



节点一: one 172.16.249.122
准备yum源
wget -O /etc/yum.repos.d/epel6.repo http://mirrors.aliyun.com/repo/epel-6.repo
mount /dev/cdrom  /mnt/cdrom
cat /etc/yum.repos.d/c6cdrom.repo 
[CentOS6.6]
name=dvd1
baseurl=file:///mnt/cdrom
gpgcheck=0
cost=1
===========
yum repolist
yum -y install corosync corosynclib  pacemaker pacemaker-cts pacemaker-libs cluster-glue cluster-glue-libs resource-agents libesmtp heartbeat heartbeat-libs




节点二: two 172.16.249.123
准备yum源
wget -O /etc/yum.repos.d/epel6.repo http://mirrors.aliyun.com/repo/epel-6.repo
mount /dev/cdrom  /mnt/cdrom
cat /etc/yum.repos.d/c6cdrom.repo 
[CentOS6.6]
name=dvd1
baseurl=file:///mnt/cdrom
gpgcheck=0
cost=1
===========
yum repolist
yum -y install corosync corosynclib  pacemaker pacemaker-cts pacemaker-libs cluster-glue cluster-glue-libs resource-agents libesmtp heartbeat heartbeat-libs




节点一: one 172.16.249.122
cd /etc/corosync/
cp corosync.conf.example corosync.conf 
vim corosync.conf 
修改如下选项
secauth: on  
bindnetaddr: 172.16.249.121         #vip
mcastaddr: 226.100.7.1 
to_syslog: no 
添加如下内容:    这两段内容作用什么是?
service { 
ver:  0 
name: pacemaker 

aisexec { 
user:   root 
group:  root 

==============
corosync-keygen  
(如果卡住执行\cp /mnt/cdrom/Packages/c*.rpm /tmp/,磁盘读写可生成随机数)
mkdir -pv /var/log/cluster/ 
service corosync start 
查看corosync引擎是否正常启动: 
grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log 
查看初始化成员节点通知是否正常发出: 
grep  TOTEM  /var/log/cluster/corosync.log 
检查启动过程中是否有错误产生: 
grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
查看pacemaker是否正常启动: 
grep pcmk_startup /var/log/cluster/corosync.log 



ssh two 'mkdir -pv /var/log/cluster/' 
scp authkey corosync.conf two:/etc/corosync/ 
ssh two '/etc/rc.d/init.d/corosync start' 


节点一: one 172.16.249.122
下载三个和相关crmsh的rpm包
python-pssh-2.3.1-4.2.x86_64 
pssh-2.3.1-4.2.x86_64 
crmsh-2.1-1.6.x86_64
cd
wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/crmsh-2.1-1.6.x86_64.rpm
wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/pssh-2.3.1-4.2.x86_64.rpm
wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/python-pssh-2.3.1-4.2.x86_64.rpm
yum -y install *.rpm
crm status 
>Online: [ one.centos two.centos ]

scp *.rpm two
ssh two 'yum -y install *.rpm'




节点一: one 172.16.249.122
添加集群资源
禁用stonith: 
# crm configure property stonith-enabled=false 
修改忽略quorum不能满足的集群状态检查: 
# crm configure property no-quorum-policy=ignore 
为资源指定默认黏性值: 
# crm configure rsc_defaults resource-stickiness=100 

添加访问mariadb的ip资源
crm configure primitive vip ocf:heartbeat:IPaddr params ip=172.16.249.121 
添加nfs文件系统资源
crm configure primitive mynfs ocf:heartbeat:Filesystem params device="172.16.249.124:/sharedata" directory="/data/mydata" fstype="nfs" op start timeout=60s op stop timeout=60s 
查看定义的资源 
crm configure show
crm status
>vip    (ocf::heartbeat:IPaddr):    Started one 
>mynfs  (ocf::heartbeat:Filesystem):    Started two 

ip addr show
>inet 172.16.249.122/16
>inet 172.16.249.121/16
ssh two 'ls /data/mydata/'

ssh two 'crm node standby'    #必须滴,让两个资源运行在one.centos上

crm status  
>Node two.centos: standby
>Online: [ one.centos ]
> vip    (ocf::heartbeat:IPaddr):    Started one.centos 
> mynfs    (ocf::heartbeat:Filesystem):    Started one.centos


添加mysqld服务资源
crm configure primitive mysqld lsb:mysqld

vip、mynfs和mysqld资源的启动顺序为vip-->mynfs-->mysqld
定义排列约束 
crm configure collocation mysqld_with_mynfs_vip inf: vip mynfs mysqld

定义顺序约束 
crm configure order mysqld_after_mynfs_after_vip Mandatory: vip mynfs mysqld

crm configure show

查看集群信息库中定义的collocation和order约束 
crm configure show xml
    //collocation约束配置信息// 
     <rsc_colocation id="mysqld_with_mynfs_vip" score="INFINITY"> 
            <resource_set id="mysqld_with_mynfs_vip-0"> 
              <resource_ref id="vip"/> 
              <resource_ref id="mynfs"/> 
              <resource_ref id="mysqld"/> 
    //order约束配置信息// 
    <rsc_order id="mysqld_after_mynfs_after_vip" score="INFINITY">     #INFINITY=>Mandatory(强制的)
            <resource_set id="mysqld_after_mynfs_after_vip-0"> 
              <resource_ref id="vip"/> 
              <resource_ref id="mynfs"/> 
              <resource_ref id="mysqld"/> 



crm status
>Online: [ one.centos two.centos ]

> vip    (ocf::heartbeat:IPaddr):    Started two.centos 
> mynfs    (ocf::heartbeat:Filesystem):    Started two.centos 
> mysqld    (lsb:mysqld):    Started two.centos
===================

ssh two 'crm node online'
crm status
>Online: [ one.centos two.centos ]
crm node standby
crm status
>Node one.centos: standby
>Online: [ two.centos ]
> vip    (ocf::heartbeat:IPaddr):    Started two.centos 
> mynfs    (ocf::heartbeat:Filesystem):    Started two.centos 
> mysqld    (lsb:mysqld):    Started two.centos
=================




节点二: two 172.16.249.123
mysql
mysql> show databases; 
mysql> create database twodb;
mysql> quit;

ssh one 'crm node online'
crm status
>Online: [ one.centos two.centos ]
> vip    (ocf::heartbeat:IPaddr):    Started two.centos 
> mynfs    (ocf::heartbeat:Filesystem):    Started two.centos 
> mysqld    (lsb:mysqld):    Started two.centos
=============

crm node standby
>Node two.centos: standby
>Online: [ one.centos ]
> vip    (ocf::heartbeat:IPaddr):    Started one.centos 
> mynfs    (ocf::heartbeat:Filesystem):    Started one.centos 
> mysqld    (lsb:mysqld):    Started one.centos
===============



节点一: one 172.16.249.122
mysql
mysql> show databases; 
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| #mysql50#lost+found |
| mysql               |
| performance_schema  |
| test                |
| twodb               |                 ---看到此数据库,说明高可用服务配置成功
+---------------------+
mysql> quit;







本文转自 zhuhc1988 51CTO博客,原文链接:http://blog.51cto.com/changeflyhigh/1707492,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
10月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
796 3
Mysql高可用架构方案
|
7月前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
运维 容灾 关系型数据库
MySQL高可用方案--Xenon全解
MySQL高可用方案--Xenon全解
|
SQL 关系型数据库 MySQL
orchestrator搭建mysql高可用
orchestrator搭建mysql高可用
241 0
|
缓存 关系型数据库 MySQL
如何实现mysql高可用集群
如何实现mysql高可用集群
133 0
|
Kubernetes 关系型数据库 MySQL
k8s练习--通过NFS+PV+PVC+POD,部署一个MySQL服务,并将MySQL的数据进行持久化存储
本文档介绍了如何使用Kubernetes (K8s)、NFS、PersistentVolume (PV)、PersistentVolumeClaim (PVC)和Pod来部署并实现MySQL服务的数据持久化存储。Kubernetes是一个用于自动化部署、扩展和管理容器化应用的强大平台。NFS作为一种网络文件系统协议,能够使Kubernetes集群中的Pod跨节点访问共享文件。PV和PVC机制则提供了持久化的存储解决方案,确保数据即使在Pod生命周期结束后仍得以保留。
726 0
|
安全 关系型数据库 MySQL
【MySQL】Orchestrator最简单的 mysql 高可用方案最细细细细~
【MySQL】Orchestrator最简单的 mysql 高可用方案最细细细细~
|
3月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
634 1
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
245 62

推荐镜像

更多