MariaDB数据库双主N从复制高可用实现-MMM架构的实现
一.MMM概述
MMM(Master-Master replication manager for Mysql)是一套灵活的脚本程序,用来监控和故障切换,管理mysql Master-Master复制的配置 (同一时间只有一个节点是可写的)。附带的工具套件可以实现多个slaves的read负载均衡,因此你可以使用这个工具移除一组服务器中复制延迟较高的服务器的虚拟IP,它还可以备份数据,两节点之间再同步等等。
MMM主要的功能通过下面三个脚本来实现:
mmm_mond
监控进程,负责所有的监控工作,决定和处理所有节点角色活动
mmm_agentd
运行在每个mysql服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置
mmm_control
一个简单的脚本,提供管理mmm_mond进程的命令
二.实验环境介绍
最基本的MMM安装必须至少需要2个数据库服务器和一个监控服务器,下面要配置的MySQL Cluster环境包含三台数据库服务器和一台监控服务器。
实验架构如下:
主机规划表
虚拟VIP规划表:
高可用性实现的前提:
1.时间同步,尽量使用NTP服务器;
2.hosts文件解析;
[root@node3 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.0.1 server.magelinux.com server
172.16.31.20 node3.stu31.com node3
172.16.31.21 node4.stu31.com node4
172.16.31.22 node5.stu31.com node5
172.16.31.23 node6.stu31.com node6
3.ssh无密钥通信;
node3,node4和node6节点之间需要实现ssh无密钥通信
# ssh-keygen -t rsa -P ""
# ssh-copy-id -i .ssh/id_rsa.pub root@node3
测试:
[root@node6 ~]# date ;ssh node4 date ; ssh node3 date;
Sun Jan 25 16:40:51 CST 2015
Sun Jan 25 16:40:52 CST 2015
Sun Jan 25 16:40:52 CST 2015
三.编译安装mariadb数据库过程略。
提供的my.cnf如下:
[root@node3 ~]# grep -v '^#' /etc/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 = 4
datadir = /mydata/data
innodb_file_per_table = on
skip_name_resolve = on
[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
我这里提供一个脚本,基本上可以实现mariadb编译安装自动化:
[root@node3 ~]# cat installmysql.sh
#!/bin/bash
#install mysql
mysql_dir="/usr/local/mysql"
mysql_datadir="/mydata/data"
mysql_logdir="/mydata/data/"
mysql_passwd="Oracle"
function install_mysql() {
yum groupinstall -y Development Tools
yum install -y cmake ncurses-devel openssl-devel openssl
cd /root/
useradd -M -s /sbin/nologin mysql
mkdir -p $mysql_datadir
chown mysql.mysql -R $mysql_datadir
tar zxf mariadb-10.0.12.tar.gz
cd mariadb-10.0.12
cmake . -DCMAKE_INSTALL_PREFIX=$mysql_dir/ \
-DMYSQL_DATADIR=$mysql_datadir \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_TCP_PORT=3306 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DCMAKE_THREAD_PREFER_PTHREAD=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DWITH_DEBUG=0
make && make install
rm -rf /etc/my.cnf
rm -rf /etc/init.d/mysqld
mkdir $mysql_logdir/relaylog
mkdir $mysql_logdir/binlog
cp /root/my.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
chown mysql.mysql -R $mysql_logdir
chown mysql.mysql -R $mysql_datadir
$mysql_dir/scripts/mysql_install_db --user=mysql --basedir=$mysql_dir --datadir=$mysql_datadir
/sbin/service mysqld start
echo 'export PATH=$PATH:'$mysql_dir'/bin' >> /etc/profile
source /etc/profile
$mysql_dir/bin/mysql -e "grant all privileges on *.* to root@'%' identified by '$mysql_passwd' with grant option;"
$mysql_dir/bin/mysql -e "flush privileges;"
$mysql_dir/bin/mysql -e "delete from mysql.user where password='';"
/sbin/service mysqld restart
echo "mysql install success!"
}
install_mysql
将数据库源码包和配置好的my.cnf文件放置在/root目录下后即可进行编译安装;
在node3,node4和node6编译安装完成后即可进行双主单从复制架构实现;