ansible一键安装GreatSQL并构建MGR集群

青旅半醒 2022-08-31 13:26 238阅读 0赞

本文首发于 GreatSQL社区 微信公众号。

原创内容未经授权不得随意使用,转载请联系小编并注明来源。

内容提纲

    1. 安装ansbile
    1. 配置ansible
    1. 建立ssh信任
    1. 测试ansible
    1. 使用ansible自动安装GreatSQL
    • 5.1 修改 /etc/hosts 设置正确的主机名
    • 5.2 下载GreatSQL-ansible安装包并解压缩
    • 5.3 利用ansible安装GreatSQL
    • 5.4 检查运行过程输出
    • 5.5 检查安装结果

利用ansible一键安装GreatSQL并完成MGR部署。

本次介绍如何利用ansible一键安装GreatSQL并完成MGR部署。

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

  1. [root@greatsql ~]# cat /etc/redhat-release
  2. CentOS Linux release 7.9.2009 (Core)
  3. [root@greatsql ~]# uname -a
  4. Linux 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

1. 安装ansbile

直接用yum安装ansible即可:

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

查看版本号,确认安装成功:

  1. [root@greatsql ~]# ansible --version
  2. ansible 2.9.21
  3. config file = /etc/ansible/ansible.cfg
  4. configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  5. ansible python module location = /usr/lib/python2.7/site-packages/ansible
  6. executable location = /usr/bin/ansible
  7. 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加进去,例如:

  1. [greatsql_dbs:children]
  2. greatsql_mgr_primary
  3. greatsql_mgr_secondary
  4. [greatsql_mgr_primary]
  5. 172.16.16.10
  6. [greatsql_mgr_secondary]
  7. 172.16.16.11
  8. 172.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:

  1. [root@greatsql ~]# ssh-keygen

使用缺省值,提示输入passphrase时,敲回车使用空的passphrase。

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

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

按提示输入口令,完成后测试使用ssh登录不再提示输入口令。如果是在本机安装,那么ssh-copy-id也要对本机执行一遍。

或者手动将ssh key复制到远程主机上,写到 ~/.ssh/authorized_keys 文件中(注意不要折行、断行)。

4. 测试ansible

随意执行一个指令,测试ansibile可连接远程主机:

  1. [root@greatsql ~]# ansible greatsql_dbs -a "uptime"
  2. 172.16.16.10 | CHANGED | rc=0 >>
  3. 15:29:46 up 250 days, 19:40, 2 users, load average: 0.04, 0.08, 0.07
  4. 172.16.16.11 | CHANGED | rc=0 >>
  5. 15:29:46 up 303 days, 17:57, 3 users, load average: 0.10, 0.13, 0.13
  6. 172.16.16.12 | CHANGED | rc=0 >>
  7. 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 文件,加入正确的主机名配置:

  1. [root@greatsql ~]# cat /etc/hosts
  2. 172.16.16.10 mgr1
  3. 172.16.16.11 mgr2
  4. 172.16.16.12 mgr3

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

打开GreatSQL-Ansible项目主页:https://gitee.com/GreatSQL/GreatSQL-Ansible

找到页面右侧“发行版”,进入,选择 “ GreatSQL-8.0.23-14-Linux.x86_64-ansible-v0.1-alpha.tar.xz” 这个二进制包下载到服务器上:

  1. [root@greatsql ~]# cd /opt/greatsql/; wget -c "https://gitee.com/xxx/GreatSQL-8.0.23-14-Linux.x86_64-ansible-v0.1-alpha.tar.xz"
  2. [root@greatsql ~]# tar zxf GreatSQL-8.0.23-14-Linux.x86_64-ansible-v0.1-alpha.tar.xz

特别提醒:上述安装包是我的内部测试版本,不是正式发布的版本。

解压缩后,能看到除了 GreatSQL-8.0.23-14-Linux.x86_64.tar.xz 安装包之外,还有GreatSQL-ansible一键安装相关文件:

  1. [root@greatsql ~]# ls -la
  2. -rw-r--r-- 1 root root 327 Jul 13 11:26 check_mysql.yml
  3. -rw-r--r-- 1 root root 15431496 Jul 13 12:00 GreatSQL-8.0.23-14-Linux.x86_64-ansible-v0.1-alpha.tar.xz
  4. -rw-r--r-- 1 root root 15428212 Jul 7 12:43 GreatSQL-8.0.23-14-Linux.x86_64.tar.xz
  5. -rw-r--r-- 1 root root 4393 Jul 7 15:33 greatsql.yml
  6. -rw-r--r-- 1 root root 357 Jul 7 15:08 vars.yml

几个文件作用分别介绍下:

  • GreatSQL-8.0.23-14-Linux.x86_64.tar.xz,GreatSQL二进制安装包。
  • greatsql.yml,ansible一键安装脚本。
  • check_mysql.yml,MySQL进程、端口预检查脚本。
  • vars.yml,定义一些变量的脚本,里面的变量名有些需要修改以适应各自不同的安装环境。

5.3 利用ansible安装GreatSQL

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

  1. work_dir: /opt/greatsql
  2. extract_dir: /usr/local
  3. data_dir: /data/GreatSQL
  4. file_name: GreatSQL-8.0.23-14-Linux.x86_64.tar.xz
  5. base_dir: /usr/local/GreatSQL-8.0.23-14-Linux.x86_64
  6. my_cnf: /etc/my.cnf
  7. mysql_user: mysql
  8. mysql_port: 3306
  9. mgr_user: repl
  10. mgr_user_pwd: repl4MGR
  11. mgr_seeds: '172.16.16.7:33061,172.16.16.10:33061,172.16.16.16:33061'
  12. wait_for_start: 60

下面是关于这些参数的解释:







































































参数名 默认值 用途
work_dir /opt/greatsql 工作目录,将下载的安装包放在本目录,可根据需要自行调整
extract_dir /usr/local GreatSQL二进制包解压缩后放在 /usr/local下,【不建议调整】
data_dir /data/GreatSQL GreatSQL运行时的datadir,【不建议调整】
file_name GreatSQL-8.0.23-14-Linux.x86_64.tar.xz GreatSQL二进制包文件名,【不建议调整】
base_dir /usr/local/GreatSQL-8.0.23-14-Linux.x86_64 GreatSQL的basedir,【不建议调整】
my_cnf /etc/my.cnf my.cnf配置文件路径,【不建议调整】
mysql_user mysql 运行GreatSQL对应的user、group,【不建议调整】
mysql_port 3306 GreatSQL运行时的监听端口,【不建议调整】
mgr_user repl MGR账户
mgr_user_pwd repl4MGR MGR账户密码
mgr_seeds 172.16.16.10:33061,172.16.16.11:33061,172.16.16.12:33061 定义MGR运行时各节点的IP+端口列表,【需要自行调整】
wait_for_start 60 初次启动时,要先进行一系列数据文件初始化等工作,后面的MGR初始化工作要等待前面的先完成,如果第一安装失败,可以将这个时间加长

执行下面的命令一键完成GreatSQL的安装、初始化,加入systemd服务、以及MGR初始化等所有工作:

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

5.4 检查运行过程输出

安装时会先行检查是否已有mysqld进程在运行,或者3306端口上是否已有其他服务。

如果是的话,则输出内容可能会是这样的:

  1. PLAY [install GreatSQL] *****************************************************************************************************************************
  2. TASK [Gathering Facts] ******************************************************************************************************************************
  3. ok: [172.16.16.10]
  4. ok: [172.16.16.11]
  5. ok: [172.16.16.12]
  6. TASK [check mysql port] *****************************************************************************************************************************
  7. changed: [172.16.16.10]
  8. changed: [172.16.16.11]
  9. changed: [172.16.16.12]
  10. TASK [check mysql processor] ************************************************************************************************************************
  11. changed: [172.16.16.10]
  12. changed: [172.16.16.11]
  13. changed: [172.16.16.12]
  14. TASK [modify selinux config file] *******************************************************************************************************************
  15. skipping: [172.16.16.10]
  16. skipping: [172.16.16.11]
  17. skipping: [172.16.16.12]

看到有 skipping 以及 skipped=N 字样。而如果是正常安装,则会输出类似下面的内容:

  1. PLAY [install GreatSQL] *****************************************************************************************************************************
  2. TASK [Gathering Facts] ******************************************************************************************************************************
  3. ok: [172.16.16.10]
  4. ok: [172.16.16.11]
  5. ok: [172.16.16.12]
  6. TASK [check mysql port] *****************************************************************************************************************************
  7. changed: [172.16.16.10]
  8. changed: [172.16.16.11]
  9. changed: [172.16.16.12]
  10. ...
  11. PLAY RECAP ******************************************************************************************************************************************
  12. 172.16.16.10 : ok=26 changed=13 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
  13. 172.16.16.11 : ok=26 changed=13 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
  14. 172.16.16.12 : ok=26 changed=13 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

5.5 检查安装结果

ok 以及 skipped=0 字样,这就表示都被正常被执行了,此时应该已经安装成功了,检查一下:

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

检查MGR服务运行状态:

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

以上ansible脚本已上传到gitee仓库中,详见:https://gitee.com/GreatSQL/GreatSQL-Ansible

相应的测试版二进制包也可以在这里下载:https://gitee.com/GreatSQL/GreatSQL-Ansible/releases

搞定,收工。

水平有限,也请各位读者大人帮忙看看ansible安装脚本里有哪些可以优化的地方,感谢。

Enjoy GreatSQL & Ansible :)


文章推荐:

  • MGR最佳实践(MGR Best Practice)
  • 万里数据库MGR Bug修复之路
  • 在Docker中部署GreatSQL并构建MGR集群
  • 将GreatSQL添加到系统systemd服务
  • 金融应用场景下跨数据中心的MGR架构方案

  • InnoDB Cluster+GreatSQL快速部署MGR集群,并实现读写分离和故障自动转移

  • 利用GreatSQL部署MGR集群,并完成添加新节点 、滚动升级、切主
  • 《叶问》33期,MGR最佳配置参考,PFS里的监测指标要全开吗,mysqld进程占用内存过高怎么排查

扫码加入GreatSQL/MGR交流QQ群

a978a1e812154cbb9b76e4968e0f1d8f.png

点击文末“阅读原文”直达老叶专栏

发表评论

表情:
评论列表 (有 0 条评论,238人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysql MGR

    介绍 MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MySQL Group Re