• GreatSQL社区原创内容未经受权不得随便应用,转载请分割小编并注明起源。

[toc]

本次介绍如何利用ansible一键装置GreatSQL并实现MGR部署。

本文介绍的运行环境是CentOS 7.9:

[root@greatsql ~]# cat /etc/redhat-releaseCentOS Linux release 7.9.2009 (Core)[root@greatsql ~]# uname -aLinux greatsql 3.10.0-1160.11.1.el7.x86_64 #1 SMP Fri Dec 18 16:34:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

筹备好上面三台服务器:

IP端口角色
172.16.16.103306Primary
172.16.16.113306Secondary
172.16.16.123306Secondary

1. 装置ansbile

间接用yum装置ansible即可:

[root@greatsql ~]# yum install -y ansible

查看版本号,确认装置胜利:

[root@greatsql ~]# ansible --versionansible 2.9.21  config file = /etc/ansible/ansible.cfg  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']  ansible python module location = /usr/lib/python2.7/site-packages/ansible  executable location = /usr/bin/ansible  python version = 2.7.5 (default, Apr  2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

这就OK了。

2. 配置ansible

批改 /etc/ansible/hosts 文件,把要装置GreatSQL的服务器IP加进去,例如:

[greatsql_dbs:children]greatsql_mgr_primarygreatsql_mgr_secondary[greatsql_mgr_primary]172.16.16.10[greatsql_mgr_secondary]172.16.16.11172.16.16.12

如果是在本机装置,间接填写本机的内网IP地址或回环地址(127.0.0.1)均可。

下面这个主机列表,分为两个组,一个是抉择作为MGR PRIMARY节点的组 greatsql_mgr_primary,只有一个主机。另一组抉择作为SECONDARY节点 greatsql_mgr_secondary,有两个主机。两个组也能够合并一起,成为一个新的组 greatsql_dbs

3. 建设ssh信赖

为了简略起见,间接建设ssh信赖,不便ansible一键装置。

首先生成ssh key

[root@greatsql ~]# ssh-keygen

应用缺省值,提醒输出passphrase时,敲回车应用空的passphrase。

将ssh key复制到指标服务器上:

[root@greatsql ~]# ssh-copy-id root@172.16.16.10

按提醒输出口令,实现后测试应用ssh登录不再提醒输出口令。如果是在本机装置,那么ssh-copy-id也要对本机执行一遍。或者手动将ssh key复制到近程主机上,写到 ~/.ssh/authorized_keys 文件中(留神不要折行、断行)。

4. 测试ansible

随便执行一个指令,测试ansibile可连贯近程主机:

[root@greatsql ~]# ansible greatsql_dbs -a "uptime"172.16.16.10 | CHANGED | rc=0 >> 15:29:46 up 250 days, 19:40,  2 users,  load average: 0.04, 0.08, 0.07172.16.16.11 | CHANGED | rc=0 >> 15:29:46 up 303 days, 17:57,  3 users,  load average: 0.10, 0.13, 0.13172.16.16.12 | CHANGED | rc=0 >> 15:29:47 up 194 days, 18:08,  2 users,  load average: 0.07, 0.13, 0.10

这就示意能够失常运行了。

5. 应用ansible主动装置GreatSQL

5.1 批改 /etc/hosts 设置正确的主机名

批改几个服务器上的 /etc/hosts 文件,退出正确的主机名配置:

[root@greatsql ~]# cat /etc/hosts172.16.16.10 mgr1172.16.16.11 mgr2172.16.16.12 mgr3

5.2 下载GreatSQL-ansible安装包,解压缩

关上GreatSQL-Ansible我的项目主页:https://gitee.com/GreatSQL/GreatSQL-Ansible

找到页面右侧“发行版”,进入,抉择 GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal-centos7-ansible.tar.xz 这个二进制包下载到服务器上:

[root@greatsql ~]# cd /opt/greatsql/[root@greatsql ~]# tar xf GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal-centos7-ansible.tar.xz

解压缩后,能看到除了 GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal.tar.xz 安装包之外,还有GreatSQL-ansible一键装置相干文件:

[root@greatsql ~]# ls -la-rw-------. 1 root root      333 Aug 11 15:22 check_mysql.yml-rw-------. 1 root root 41817748 Aug 24 22:05 GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal.tar.xz-rw-------. 1 root root       91 Aug 25 10:43 GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal.tar.xz.md5-rw-------. 1 root root     5348 Aug 11 16:14 greatsql.ymldrwxr-xr-x. 3 root root      103 Aug 25 10:43 mysql-support-files-rw-------. 1 root root      394 Aug 25 10:43 vars.yml

几个目录文件作用别离介绍下:

  • GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal.tar.xz,GreatSQL二进制安装包。
  • greatsql.yml,ansible一键装置脚本。
  • check_mysql.yml,MySQL过程、端口预查看脚本。
  • vars.yml,定义一些变量的脚本,外面的变量名有些须要批改以适应各自不同的装置环境。
  • mysql-support-files,寄存my.cnf模板,systemd服务文件等多个文件。

5.3 利用ansible装置GreatSQL

开始执行前,须要确认 vars.yml 文件中上面这些相干参数是否要调整:

work_dir: /opt/greatsqlextract_dir: /usr/localdata_dir: /data/GreatSQLfile_name: GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal.tar.xzbase_dir: /usr/local/GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimalmy_cnf: /etc/my.cnfmysql_user: mysqlmysql_port: 3306mgr_user: replmgr_user_pwd: repl4MGRmgr_seeds: '172.16.16.10:33061,172.16.16.11:33061,172.16.16.12:33061'wait_for_start: 60

上面是对于这些参数的解释

参数名默认值用处
work_dir/opt/greatsql工作目录,将下载的安装包放在本目录,可依据须要自行调整
extract_dir/usr/localGreatSQL二进制包解压缩后放在 /usr/local下,【不倡议调整】
data_dir/data/GreatSQLGreatSQL运行时的datadir,【不倡议调整】
file_nameGreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal.tar.xzGreatSQL二进制包文件名,【不倡议调整】
base_dir/usr/local/GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimalGreatSQL的basedir,【不倡议调整】
my_cnf/etc/my.cnfmy.cnf配置文件门路,【不倡议调整】
mysql_usermysql运行GreatSQL对应的user、group,【不倡议调整】
mysql_port3306GreatSQL运行时的监听端口,【不倡议调整】
mgr_userreplMGR账户
mgr_user_pwdrepl4MGRMGR账户明码
mgr_seeds172.16.16.10:33061,172.16.16.11:33061,172.16.16.12:33061定义MGR运行时各节点的IP+端口列表,【须要自行调整】
wait_for_start60首次启动时,要先进行一系列数据文件初始化等工作,前面的MGR初始化工作要期待后面的先实现,如果因为期待的工夫不够导致装置失败,能够将这个工夫加长

执行上面的命令一键实现GreatSQL的装置、初始化,退出systemd服务、以及MGR初始化等所有工作:

[root@greatsql ~]# ansible-playbook ./greatsql.yml

5.4 查看Ansible运行过程输入

装置时会后行查看是否已有mysqld过程在运行,或者3306端口上是否已有其余服务,如果是的话,则输入内容可能会是这样的:

PLAY [install GreatSQL] *****************************************************************************************************************************TASK [Gathering Facts] ******************************************************************************************************************************ok: [172.16.16.10]ok: [172.16.16.11]ok: [172.16.16.12]TASK [check mysql port] *****************************************************************************************************************************changed: [172.16.16.10]changed: [172.16.16.11]changed: [172.16.16.12]TASK [check mysql processor] ************************************************************************************************************************changed: [172.16.16.10]changed: [172.16.16.11]changed: [172.16.16.12]TASK [modify selinux config file] *******************************************************************************************************************skipping: [172.16.16.10]skipping: [172.16.16.11]skipping: [172.16.16.12]

看到有 skipping 以及 skipped=N 字样。而如果是失常装置,则会输入相似上面的内容:

PLAY [install GreatSQL] *****************************************************************************************************************************TASK [Gathering Facts] ******************************************************************************************************************************ok: [172.16.16.10]ok: [172.16.16.11]ok: [172.16.16.12]TASK [check mysql port] *****************************************************************************************************************************changed: [172.16.16.10]changed: [172.16.16.11]changed: [172.16.16.12]...PLAY RECAP ******************************************************************************************************************************************172.16.16.10               : ok=27   changed=14   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0172.16.16.11               : ok=27   changed=14   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0172.16.16.12               : ok=27   changed=14   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

5.5 查看GreatSQL装置后果

ok 以及 skipped=0 字样,这就示意都被失常被执行了,此时应该曾经装置胜利了,检查一下:

[root@greatsql ~]# systemctl status greatsql● greatsql.service - GreatSQL Server   Loaded: loaded (/usr/lib/systemd/system/greatsql.service; disabled; vendor preset: disabled)   Active: active (running) since Tue 2021-07-06 20:55:33 CST; 45s ago     Docs: man:mysqld(8)           http://dev.mysql.com/doc/refman/en/using-systemd.html  Process: 31320 ExecStartPre=/usr/local/GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 31348 (mysqld)   Status: "Server is operational"   CGroup: /system.slice/greatsql.service           └─31348 /usr/local/GreatSQL-8.0.25-15-Linux-glibc2.17-x86_64-minimal/bin/mysqldJul 06 20:55:31 greatsql systemd[1]: Starting GreatSQL Server...Jul 06 20:55:33 greatsql systemd[1]: Started GreatSQL Server.

查看MGR服务运行状态:

[root@GreatSQL][(none)]> select * from performance_schema.replication_group_members;+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+| group_replication_applier | ac24eab8-def4-11eb-a5e8-525400e802e2 |      mgr3   |        3306 | ONLINE       | SECONDARY   | 8.0.25         || group_replication_applier | ac275d97-def4-11eb-9e49-525400fb993a |      mgr2   |        3306 | ONLINE       | SECONDARY   | 8.0.25         || group_replication_applier | ac383458-def4-11eb-bf1a-5254002eb6d6 |      mgr1   |        3306 | ONLINE       | PRIMARY     | 8.0.25         |+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+

这就实现MGR集群的构建了。

6. 小结

本问介绍了如何利用Ansible疾速装置GreatSQL并构建MGR集群,以上ansible脚本已上传到gitee仓库中,详见:https://gitee.com/GreatSQL/GreatSQL-Ansible ,欢送大家提出更多改良倡议。

参考资料、文档

  • MySQL 8.0 Reference Manual
  • 数据库内核开发 - 温正湖
  • Group Replication原理 - 宋利兵

免责申明

因集体程度无限,专栏中不免存在错漏之处,请勿间接复制文档中的命令、办法间接利用于线上生产环境。请读者们务必先充沛了解并在测试环境验证通过前方可正式施行,防止造成生产环境的毁坏或侵害。

Enjoy GreatSQL :)

文章举荐:

GreatSQL季报(2021.12.26)

https://mp.weixin.qq.com/s/FZ...

技术分享|sysbench 压测工具用法浅析

https://mp.weixin.qq.com/s/m1...

故障剖析 | linux 磁盘io利用率高,剖析的正确姿态

https://mp.weixin.qq.com/s/7c...

技术分享|闪回在MySQL中的实现和改良

https://mp.weixin.qq.com/s/6j...

万答#20,索引下推如何进行数据过滤

https://mp.weixin.qq.com/s/pt...

对于 GreatSQL

GreatSQL是由万里数据库保护的MySQL分支,专一于晋升MGR可靠性及性能,反对InnoDB并行查问个性,是实用于金融级利用的MySQL分支版本。

Gitee:

https://gitee.com/GreatSQL/Gr...

GitHub:

https://github.com/GreatSQL/G...

Bilibili:

https://space.bilibili.com/13...

微信&QQ群:

可搜寻增加GreatSQL社区助手微信好友,发送验证信息“加群”退出GreatSQL/MGR交换微信群

QQ群:533341697

微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 公布!