设为首页 收藏本站
查看: 643|回复: 0

[经验分享] Corosync + Pacemaker 搭建高可用MariaDB服务

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-4-11 09:45:10 | 显示全部楼层 |阅读模式
实验描述

1.本实验的目的是为了通过手动配置corosync配置文件,实现MariaDB服务的高可用,集群心跳传递使用组播方式。
2.三个节点的主机名分别为:node5.redhat.com、node6.redhat.com、node7.redhat.com。地址为172.16.100.5、172.16.100.6、172.16.100.7。
3.利用nfs做后端存储,NFS地址为172.16.0.254。
3.VIP地址为172.16.100.100
4.三个节点系统全部为CentOS7.2,NFS节点为CentOS6.5。
5.配置高可用集群的前三个步骤:节点时间同步、主机名解析和SSH互信这里就再演示了。
配置步骤
一、NFS节点的配置

1.首先在此节点安装NFS服务并创建共享目录

    [iyunv@centos6 ~]# yum install nfs-utils -y
    [iyunv@centos6 ~]# mkdir /data/{mydata,logs} -pv
    mkdir: created directory “data”
    mkdir: created directory “/data/mydata”
    mkdir: created directory “/data/logs”
    [iyunv@centos6 ~]# vim /etc/exports

/data   172.16.0.0/16(rw,no_root_squash)设置共享目录及其权限3.

配置完成之后启动NFS服务service nfs restart。

2.创建mysql用户和用户组,并赋予共享目录权限。注意:所有节点上的mysql用户和组的ID号一定要一样

    [iyunv@centos6 ~]# groupadd -r -g 240 mysql
    [iyunv@centos6 ~]# useradd -r -u 240 -g 240 mysql

    [iyunv@centos6 ~]# chmod -R 775 /data
    [iyunv@centos6 ~]# chown -R mysql.root /data

二、将MariaDB服务在三个节点都配置好

1.首先在node5.redhat.com节点上安装nfs-utils包,以支持挂载nfs格式的文件系统。

    [iyunv@node5 ~]# yum install nfs-utils -y

2.在node5.redhat.com节点上创建mysql用户和组。

    [iyunv@node5 ~]# groupadd -r -g 240 mysql
    [iyunv@node5 ~]# useradd -r -u 240 -g 240 mysql

3.创建/data目录并挂载NFS服务到/data。

    [iyunv@node5 ~]# mkdir /data
    [iyunv@node5 ~]# mount -t nfs 172.16.0.254:/data /data

4.解压mariadb的二进制程序包并创建链接。

    [iyunv@node5 ~]# tar xf mariadb-10.0.24-linux-x86_64.tar.gz -C /usr/local/
    [iyunv@node5 ~]# cd /usr/local/
    [iyunv@node5 local]# ln -sv mariadb-10.0.24-linux-x86_64 mysql
    ‘mysql’ -> ‘mariadb-10.0.24-linux-x86_64’

5.安装并配置mariadb服务。

    [iyunv@node5 local]# cd mysql/
    [iyunv@node5 mysql]# ./scripts/mysql_install_db –datadir=/data/mydata –user=mysql

    脚本安装过程这里就省略了。。。

    [iyunv@node5 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
    [iyunv@node5 mysql]# cp support-files/my-large.cnf /etc/my.cnf
    cp: overwrite ‘/etc/my.cnf’? y
    [iyunv@node5 mysql]# echo “export PATH=/usr/local/mysql/bin:$PATH” > /etc/profile.d/mysqld.sh
    [iyunv@node5 mysql]# . /etc/profile.d/mysqld.sh
    [iyunv@node5 mysql]# vim /etc/my.cnf

my.cnf文件示例。

[client]
port = 3306
socket = /tmp/mysql.sock


[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 2
datadir = /data/mydata
innodb_file_per_table = 1


log-bin=/data/logs/mysql-bin

binlog_format=mixed

server-id = 1



[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

6.启动mariadb服务并创建一个测试用户,方便最后我们测试使用。之后将mariadb服务关闭。并将NFS共享目录卸载。

    [iyunv@node5 mysql]# /etc/init.d/mysqld start
    Starting MySQL.. SUCCESS!
    [iyunv@node5 mysql]# mysql
    Welcome to the MariaDB monitor. Commands end with ; or g.
    Your MariaDB connection id is 4
    Server version: 10.0.24-MariaDB MariaDB Server

    Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

    Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the current input statement.

    MariaDB [(none)]> GRANT ALL ON *.* TO 'ha'@'%' IDENTIFIED BY 'redhat';
    Query OK, 0 rows affected (0.04 sec)

    MariaDB [(none)]> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.03 sec)

    MariaDB [(none)]> quit
    Bye
    [iyunv@node5 mysql]# /etc/init.d/mysqld stop
    Shutting down MySQL… SUCCESS!

    [iyunv@node5 ~]# umount /data

5.将my.cnf复制到其它节点,并在其它节点上配置上述1、2、3、4步骤.。注意:在执行第三步的时候只要创建目录即可、不需要再挂载了,并且需要再多执行一步:cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld#复制mariadb启动脚本。

    [iyunv@node5 ~]# scp /etc/my.cnf node6.redhat.com:/etc/my.cnf
    [iyunv@node5 ~]# scp /etc/my.cnf node7.redhat.com:/etc/my.cnf

node6.redhat.com

    [iyunv@node6 ~]# yum install nfs-utils -y
    [iyunv@node6 ~]# groupadd -r -g 240 mysql
    [iyunv@node6 ~]# useradd -r -u 240 -g 240 mysql
    [iyunv@node6 ~]# mkdir /data
    [iyunv@node6 ~]# tar xf mariadb-10.0.24-linux-x86_64.tar.gz -C /usr/local/
    [iyunv@node6 ~]# cd /usr/local/
    [iyunv@node6 local]# ln -sv mariadb-10.0.24-linux-x86_64 mysql
    [iyunv@node6 local]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

node7.redhat.com

    [iyunv@node7 ~]# yum install nfs-utils -y
    [iyunv@node7 ~]# groupadd -r -g 240 mysql
    [iyunv@node7 ~]# useradd -r -u 240 -g 240 mysql
    [iyunv@node7 ~]# mkdir /data
    [iyunv@node7 ~]# tar xf mariadb-10.0.24-linux-x86_64.tar.gz -C /usr/local/
    [iyunv@node7 ~]# cd /usr/local/
    [iyunv@node7 local]# ln -sv mariadb-10.0.24-linux-x86_64 mysql
    [iyunv@node7 local]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

三、配置corosync集群,实现MariaDB的高可用

1.在三个节点都安装上corosync+pacemaker服务

    [iyunv@node5 ~]# yum install corosync pacemaker -y

    [iyunv@node6 ~]# yum install corosync pacemaker -y

    [iyunv@node7 ~]# yum install corosync pacemaker -y

2.然后我们在一个节点上创建并配置corosync.conf文件,文件路径为/etc/corosync/corosync.conf(默认没有这个文件)。

配置文件示例:

totem {
version: 2

crypto_cipher: aes128
crypto_hash: sha1
secauth: on

interface {
ringnumber: 0
bindnetaddr: 172.16.0.0
mcastaddr: 239.255.1.1
mcastport: 5405
ttl: 1
}
}

nodelist {
node {
ring0_addr: 172.16.100.5
nodeid: 1
}
node {
ring0_addr: 172.16.100.6
nodeid: 2
}
node {
ring0_addr: 172.16.100.7
nodeid: 3
}
}

logging {
fileline: off
to_stderr: no
to_logfile: yes
logfile: /var/log/cluster/corosync.log
to_syslog: yes
debug: off
timestamp: on
logger_subsys {
subsys: QUORUM
debug: off
}
}

quorum {
provider: corosync_votequorum
}

3.之后使用corosync-keygen命令,会自动在/etc/corosync/目录下创建一个authkey文件。注意:如果遇到卡在生成随机数的地方,可以用如下方法解决:

    [iyunv@node5 corosync]# cd /dev/
    [iyunv@node5 dev]# mv random random.bak
    [iyunv@node5 dev]# ln -sv urandom random
    ‘random’ -> ‘urandom’

    [iyunv@node5 dev]# corosync-keygen
    Corosync Cluster Engine Authentication key generator.
    Gathering 1024 bits for key from /dev/random.
    Press keys on your keyboard to generate entropy.
    Writing corosync key to /etc/corosync/authkey.

    [iyunv@node5 dev]# rm -rf random
    [iyunv@node5 dev]# mv random.bak random

4.之后将corosync.conf和authkey都复制到另外的节点上去。

    [iyunv@node5 ~]# cd /etc/corosync/
    [iyunv@node5 corosync]# scp corosync.conf authkey node6.redhat.com:/etc/corosync/
    [iyunv@node5 corosync]# scp corosync.conf authkey node7.redhat.com:/etc/corosync/

5.在所有节点启动corosync和pacemaker服务。

    [iyunv@node5 ~]# systemctl start corosync.service
    [iyunv@node5 ~]# systemctl start pacemaker.service

    [iyunv@node6 ~]# systemctl start corosync.service
    [iyunv@node6 ~]# systemctl start pacemaker.service

    [iyunv@node7 ~]# systemctl start corosync.service
    [iyunv@node7 ~]# systemctl start pacemaker.service

使用crm_mon查看节点是否全部加了进来
1459954175384302.jpg

可以看到三个节点已经全部加进了集群里面。

6.,在node5.redhat.com上面安装crmsh,完成资源配置。注意:”CentOS 7以后默认不自带crmsh,需要自己去网上下载,这里我使用的是在网上找到的crmsh-scripts-2.2.0-7.1.noarch.rpm,crmsh-2.2.0-7.1.noarch.rpm,python-parallax-1.0.1-10.1.noarch.rpm。”

    [iyunv@node5 ~]# yum install crmsh-2.2.0-7.1.noarch.rpm crmsh-scripts-2.2.0-7.1.noarch.rpm python-parallax-1.0.1-10.1.noarch.rpm -y

    [iyunv@node5 ~]# crm configure
    关闭stonith
    crm(live)configure# property stonith-enabled=false
    配置VIP资源
    crm(live)configure# primitive mysqlip ocf:heartbeat:IPaddr params ip=’172.16.100.100’ op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=40s
    配置NFS资源
    crm(live)configure# primitive mysqlstore ocf:heartbeat:Filesystem params device=’172.16.0.254:/data’ directory=’/data’ fstype=’nfs’ op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=40s
    配置Mariadb资源,这里我们使用的是lsb脚本
    crm(live)configure# primitive mysqlserver lsb:mysqld params op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=40s
    将三个资源加入到同一组
    crm(live)configure# group mysqlservice mysqlip mysqlstore mysqlserver
    设置排序约束
    crm(live)configure# order mysqlip_before_mysqlstore Mandatory: mysqlip mysqlstore
    crm(live)configure# order mysqlstore_before_mysqlserver Mandatory: mysqlstore mysqlserver
    检测语法错误
    crm(live)configure# verify
    检测语法没有报错的话就可以提交配置了
    crm(live)configure# commit
    crm(live)configure# bye

这样我们整个集群的资源就配置好了。
测试步骤

1.首先使用crm status查看节点状态

显示没有问题.

2.这里将NFS服务器当作测试节点,在节点上安装mysql的客户端并进行测试。

[iyunv@centos6 ~]# yum install mysql -y
[iyunv@centos6 ~]# mysql -h172.16.100.100 -uha -predhat

能够正常访问,并且我们在里面创建了一个mydb库。

3.现在我们将node5设置为standby状态,测试资源是否能够迁移成功

[iyunv@node5 ~]# crm node standby node5.redhat.com
[iyunv@node5 ~]# crm status
可以看到资源迁移成功。

4.再次进行测试。

[iyunv@centos6 ~]# mysql -h172.16.100.100 -uha -predhat

还是访问我们的VIP172.16.100.100能够正常访问,并且成功的在之前创建的mydb库上又创建了一个测试表。

5.现在我们将node6也设置为standby状态,测试资源是否还能够迁移成功

[iyunv@node5 ~]# crm node standby node6.redhat.com
[iyunv@node5 ~]# crm status

可以看到资源被成功的迁移到了node7上。
现在我们将node5和node6全部设置回online状态。

[iyunv@node5 ~]# crm node online node5.redhat.com
[iyunv@node5 ~]# crm node online node6.redhat.com
[iyunv@node5 ~]# crm status

可以看到节点又成功的回来了,这样就成功的实现了MariaDB的高可用。

菜鸟一枚,以上配置如有问题,欢迎指正。谢谢!!!



1459954219865199.jpg
1459954213426130.jpg
1459954202604082.jpg
1459954197411998.jpg
1459954189880321.jpg
1459954183656560.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-202440-1-1.html 上篇帖子: MySQL5.6.29的安装 下篇帖子: MySQL知识理论篇
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表