MySQL NDB 集群搭建(KeepAlived双活)

一、环境和部署架构

1.1  MySQL集群安装包

MySQL Router:https://dev.mysql.com/downloads/router/

MySQL Shell:https://dev.mysql.com/downloads/shell/

MySQL Server:https://dev.mysql.com/downloads/mysql/

都选择Linux Generic版本,具体版本号为:

mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz、

mysql-router-8.0.11-linux-glibc2.12-x86-64bit.tar.gz

mysql-shell-8.0.11-linux-glibc2.12-x86-64bit.tar.gz

1.2 集群架构图

备注:上图为网上搜索的截图,其中MySQLRouter为单节点,这里我们通过keepalive的虚拟vip做双活,MySQL-Router做负载均衡,这样可以达到整体高可用的集群的效果,上图没有体现,下面搭建过程有所体现。

1.3 服务器分配

操作系统均为为Centos7,这里提供5台服务器,集群环境至少3台服务器让MySQL-Router和MySQL服务器共存,MySQL集群是通过投票的机制选取主节点,所以所需要的是(2n+1)台服务器,n>=1,为了清晰表达这里做5台服务器,具体服务器安装环境详细信息如下:

192.168.1.151(node01) MySQL Shell、MySQL Router 

192.168.1.152(node02)  MySQL Shell、MySQL Server

192.168.1.153(node03)  MySQL Shell、MySQL Server

192.168.1.154 (node04) MySQL Shell、MySQL Server

192.168.1.155 (node05) MySQL Shell、MySQL Router 

二、MySQL安装(3台需要安装MySQL服务器的机子上都要执行相同的步骤)

2.1 服务器配置

在每台服务器配置hosts,当前环境下配置如下:

192.168.1.151  node01

192.168.1.152  node02

192.168.1.153  node03

192.168.1.154  node04

192.168.1.155  node05

执行:sourcehosts

重启:reboot –f

执行命令:hostnamectl 进行查看,如下所示:

2.2  解压安装包mysql

tar –xzvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz

mv mysql-5.7.17-linux-glibc2.5-x86_64 /usr/local/mysql

2.3  创建data数据库目录

cd /usr/local/mysql

mkdir data

2.4  初始化数据库

./mysqld --user=root --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize

注意:等执行结束之后,控制台会出现一个随机生成的密码,该密码就是当前数据库的root登录密码,临时保存,以便修改。

2.5  配置my.cnf

cp -a /usr/local/mysql/support-files/my-default.cnf/etc/my.cnf   #会有一个选择是否覆盖原有文件,直接按 y回车选择是就可以

cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld #把mysql放到本地系统服务中

配置my.cnf的基本配置如下:

[mysqld]

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

port=3306

character-set-server=utf8

lower_case_table_names=1

sql_mode=NO_ENGINE_SUBSTITUTION

log-error = /usr/local/mysql/data/mysql_error.log

skip-name-resolve

2.6 修改密码

service mysql start #启动MySQL

bin/mysql -uroot –p #登录mysql,此时需要输入刚才生成的随机密码

SET authentication_string FOR 'root'@localhost=PASSWORD(‘新密码’); #设置root的新密码,密码设置最好复杂一点,因为有密码策略,例如:Joymysql_123456。注意:此时所有数据库的密码最好保持一致,貌似有人说不一样可能会有问题,我没有测试过不一样的密码。

2.7 设置远程访问


update user set host=’%’ where user=’root’ limit 1;

flush privileges;

四、配置/etc/my.cnf

在每台安装过MySQL的服务器上的/etc/my.cnf文件末尾添加:

#高可用 

server_id=2 #每台服务器修改为自己的id,例如:151为1、152为2、153为3

gtid_mode=ON 

enforce_gtid_consistency=ON 

master_info_repository=TABLE 

relay_log_info_repository=TABLE 

binlog_checksum=NONE 

log_slave_updates=ON 

log_bin=binlog 

binlog_format=ROW 

transaction_write_set_extraction=XXHASH64 

#主从复制配置 

loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" 

loose-group_replication_local_address=

"192.168.1.152:24901" #每台服务器修改为自己的ip或者node02

loose-group_replication_group_seeds="192.168.1.152:24901,192.168.1.153:24901,192.168.1.154:24901" #或者node02、node03、node04

loose-group_replication_single_primary_mode=TRUE 

#loose-group_replication_bootstrap_group=off 

#loose-group_replication_enforce_update_everywhere_checks=FALSE 

#loose-group_replication_start_on_boot=off 

disabled_storage_engines= MyISAM,BLACKHOLE,FEDERATED,CSV,ARCHIVE 

report_port =3306 

group_replication_allow_local_disjoint_gtids_join=on

每台服务器重启MySQL。

五、MySQL-Shell配置集群(MySQL-Shell是一个配置工具,最好每台都解压,以便后续维护每台都可以进行集群的配置)

tar -zxf mysql-shell-8.0.11-linux-glibc2.12-x86-64bit.tar.gzmysql-shell

mv mysql-shell-8.0.11-linux-glibc2.12-x86-64bit.tar.gzmysql-shell mysql-shell

进入mysql-shell/bin并且执行./mysqlsh

连接到151服务器的MySQL,执行如下命令:

# 连接,需要输入密码(mysql的密码)

mysql-js> shell.connect('root@192.168.1.152:3306');或者node02@3306;输入密码:Joysuccess_123

# 执行配置命令,也需要密码

mysql-js> dba.configureLocalInstance();

# 创建一个 cluster,命名为'myCluster'

mysql-js> var cluster = dba.createCluster('myCluster');

# 创建成功后,查看cluster状态

mysql-js> cluster.status();

查看结果为:

添加其他节点实例

# 添加实例其它服务器节点

cluster.addInstance('root@151.168.1.153:3306'); #或者node03

cluster.addInstance('root@151.168.1.154:3306');#或者node04

在一次查看:cluster.status();

结果如下则为正常(注意三台服务器的"status": "ONLINE"):

{

    "clusterName": "joyCluster",

    "defaultReplicaSet": {

        "name": "default",

        "primary": "192.168.1.152:3306",

        "ssl": "DISABLED",

        "status": "OK",

        "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",

        "topology": {

            "192.168.1.152:3306": {

                "address": "192.168.1.152:3306",

                "mode": "R/W",

                "readReplicas": {},

                "role": "HA",

                "status": "ONLINE"

            },

            "192.168.1.153:3306": {

                "address": "192.168.1.153:3306",

                "mode": "R/O",

                "readReplicas": {},

                "role": "HA",

                "status": "ONLINE"

            },

            "192.168.1.154:3306": {

                "address": "192.168.1.154:3306",

                "mode": "R/O",

                "readReplicas": {},

                "role": "HA",

                "status": "ONLINE"

            }

        }

    },

    "groupInformationSourceMember": "mysql://root@192.168.1.152:3306"

}

如果一台服务器的MySQL停止现在需要重新加入到集群,首先启动MySQL,然后在mysql-shell里面重新rejoin,脚本如下:

cluster.rejoinInstance(root@192.168.1.152:3306);#或者node02

六、MySQL-Router安装(2台服务器151和155都做同样的步骤)

# 直接解压即可

tar –zxf mysql-router-8.0.11-linux-glibc2.12-x86-64bit.tar.gz

mv mysql-router-8.0.11-linux-glibc2.12-x86-64bit.tar.gz mysql-router

cd mysql-router

./bin/mysqlrouter --bootstrap root@node02:3306 -d myrouter --user=root

这里会在mysql-router目录生成myrouter/myrouter.cnf配置文件。

执行:./bin/mysqlrouter --config ./myrouter/myrouter.conf &

此时MySQL-Router启动,可以通过当前服务器的ip地址访问,端口号默认为:6446。

七、KeepAlived配置

7.1 安装keepalivded(网上搜索安装)

yum -y install keepalived

7.2 配置keepalived.conf

mkdir /etc/keepalived/keepalived.conf

chmod 777 /etc/keepalived/keepalived.conf

keepalived.conf的内容如下所示:

! Configuration File for keepalived

global_defs {

    notification_email {

        itsection@example.com

    }

    notification_email_from itsection@example.com

    smtp_server mail.example.com

    smtp_connect_timeout 30

    router_id LVS_DEVEL

}

vrrp_script chk_mysqlrouter {

    script "/etc/keepalived/mysqlrouter_check.sh" #此文件为判断mysqlrouter的进程是否存在的脚本,循环判断是否存在,如果不存在则视为mysqlrouter已经停止,此时运行命令:systemctl stop keepalived命令,来切换ip地址,也称为地址漂移。

    interval 2

    weight -5

    fall 3 

    rise 2

}

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    mcast_src_ip 192.168.1.151

    virtual_router_id 51

    priority 101 #注意点当前值越大,则为主机,否则为备机

    advert_int 2

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.1.200 #注意点:此为虚拟IP,在设置IP的时候请保证局域网中没有该ip,先ping一下,ping不同说明可以用

    }

    track_script {

      chk_mysqlrouter

    }

}

7.3 mysql-router.sh脚本

#!/bin/sh

ps -fe|grep mysqlrouter |wc -l

if [ $? -ne 2 ]

then

systemctl stop keepalived

else

echo "runing....."

fi

安装完成之后,可通过ip addr查看是否虚拟出192.168.1.200地址,如果两台服务器都出现192.168.1.200地址,说明安装成功,这样可通过192.168.1.200地址去访问数据库了。

注意:此文档为安装之后整理,有部分命令是事后手动敲的,如果运行的脚本和命令不成功,有可能是我手误而成,整理之后没有验证里面的每一个命令。大部分命令、步骤和逻辑是按照试验过而总结出来的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容