• MHA非root用户搭建测试


             最近一直在瞎搬砖,最大的感触是运维工作难做。不过废话不多说,最近被分配了一项比较有意思的task,尝试着非root用户搭建MHA并测试下能否成功漂移,以下是两天测试和文档编写的成果,分享给各位看客,欢迎交流学习。

    测试的目的:

             现行的主流搭建MHA使用的用户是root来传递公钥以及进行一些切换、摘除、添加VIP的工作,但root用户的权限过大,在生产上存在安全漏洞的风险,可以尝试使用一个普通的用户以较小的权限角色实现MHA的各项功能。

    测试的环境:

            1、两台CentOS服务器,iptables关闭,配置为8核8G内存,系统CentOS release 6.8 (Final)。服务器IP三个分别是172.16.3.190/22、172.16.3.189/22以及VIP:172.16.3.123/22

            2、数据库实例两台,版本保持一致为5.7.18-log MySQL Community Server (GPL)。

    测试的步骤:

           1、配置MHA复制集(master-slave-manager),GTID+Semi-Sync+并行复制

    2、安装MHA及基本环境配置

    3、MHA健康检查

    4、MHA切换测试(手动+自动)

    测试摘要:

           1、传递公钥的用户都需要设置密码且与MySQL用户要同一组

           2、传递公钥的用户要有sudo权限且能通过某一端口进行文件的传递

           3、传递公钥的用户要有摘除、添加VIP的权限,且在线切换的脚本要更改root为传递公钥的用户

           4、MHA的配置文件、目录的属主属组要更改为传递公钥的用户而不是root用户

    测试的具体搭建过程:

    一、配置MHA复制集

    1、MHA各角色和IP划分

    MHA-Master:172.16.3.190/22,VIP:172.16.3.123/22
    MHA-Backup:172.16.3.189/22
    MHA-Manager:172.16.3.189/22

    2、MHA的GTID+Semi-Sync +Slave-parallel

            搭建复制集的过程省略,需要注意的问题是master必须确保所有的slave都能连接,包括切换后新主与旧主之间的同步连接。

            GRANT SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'172.16.%.%' identified by ‘repl’;
    2.1、GTID参数配置
           gtid_mode=on //开启GTID,否则就是普通的复制类型
           enforce_gtid_consistency=true //强制GTID的一致性
           log_slave_updates=true //slave更新是否记录日志
           master_info_repository=table //将日志存储为表形式,更加安全,防止日志信息破损
           relay_log_info_repository=table //将日志存储为表形式,更加安全,防止日志信息破损
    2.2、Semi-Sync配置
           1、在MHA的master上安装半同步插件并开启半同步功能
                   mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so'; 
                   mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
                   mysql> set global rpl_semi_sync_master_enabled=on ; 
          .2、在MHA的slave或者manager节点上安装插件并开启slave的半同步
                  mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so'; 
                  mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
                  mysql> set global rpl_semi_sync_slave_enabled=on ;
          3、Slave-paralle配置
                 在MySQL实例的配置文件中都添加slave_parallel_workers=N,此处根据机器的配置使用了4个应用线程

    二、安装MHA及基本环境配置

           1、在所有的节点上安装node数据包,在manager节点上安装manager数据包

           2、编辑/etc/hosts文件,添加如下几行内容,指定各机器在MHA的角色。

                  #mha config
                 172.16.3.190 mha_master
                 172.16.3.189 mha_backup
                 172.16.3.189 mha_manager

           3、给传递公钥、配置SSH登录使用的端口,编辑SSH服务的server端、client端的配置文件,分别是/etc/ssh/sshd_config、/etc/ssh/ssh_config,修改如下行的端口为22222。server端的配置文件不要修改行PermitRootLogin no为yes,区别于传统的搭建方法,不是用root账号登录。

                 Port 22222  #此处端口配置为传递互信使用的端口,预传递公钥的端口是多少这里修改为多少。

           4、给传递公钥的用户设置密码,这里我们使用的就是mysql用户,如果使用其他用户还需要将这个配置互信使用的用户加入到mysql用户组;这个用户还需要有sudo权限,因为MHA的切换过程中有VIP的摘除和添加过程,这个步骤要有类似root的权限进行操作,且每台机器上都要执行。

                 ## Allow root to run any commands anywhere

                 root    ALL=(ALL)       ALL

                 liyingxiao      ALL=NOPASSWD: ALL

                 mysql   ALL=NOPASSWD: ALL

           5、切换用户模式为mysql并配置机器之间的互信,可以通过id username判断用户行为是否是传递公钥使用的用户mysql

                 #mha_master上配置到mha_backup、mha_manager的无密码登录

                 [root@172-16-3-190 we_ops_admin]# su - mysql

                 [mysql@172-16-3-190 ~]$ ssh-keygen -t rsa

                 [mysql@172-16-3-190 home]$ cd /home/mysql/.ssh/[mysql@172-16-3-190 .ssh]$ cat id_rsa.pub >> authorized_keys  #这里角色复用,因此需要允许多角色自身登录

                 [mysql@172-16-3-190 .ssh]$ chmod 700 /home/mysql/.ssh/

                 [mysql@172-16-3-190 .ssh]$ chmod 600 /home/mysql/.ssh/authorized_keys

                 [mysql@172-16-3-190 .ssh]$ ssh-copy-id -i id_rsa.pub '-p22222 mysql@172.16.3.189'

                 #mha_backup、mha_manager配置到mha_master的无密码登录

                 [mysql@172-16-3-189 .ssh]$ id

                 uid=502(mysql) gid=502(mysql) groups=502(mysql)

                 [mysql@172-16-3-189 .ssh]$ ssh-keygen -t rsa

                 [mysql@172-16-3-189 ~]$ cd /home/mysql/.ssh/

                 [mysql@172-16-3-189 .ssh]$ cat id_rsa.pub >> authorized_keys

                 [mysql@172-16-3-189 .ssh]$ chmod 700 /home/mysql/.ssh/

                 [mysql@172-16-3-189 .ssh]$ chmod 600 /home/mysql/.ssh/authorized_keys

                 [mysql@172-16-3-189 .ssh]$ ssh-copy-id -i id_rsa.pub '-p22222 mysql@172.16.3.190'

           6、验证互信,无密码远程登录其他机器

                 #172.16.3.190验证互信

                 [mysql@172-16-3-190 .ssh]$ ssh mha_backup

                 [mysql@172-16-3-190 .ssh]$ ssh mha_manager

                 #172.16.3.189验证互信

                 [mysql@172-16-3-189 .ssh]$ ssh mha_master

                 [mysql@172-16-3-189 .ssh]$ ssh mha_backup

                 [mysql@172-16-3-189 .ssh]$ ssh mha_manager

    7、配置manager节点的服务

          7.1创建manager节点的监控用户,确保从manager节点可以连接master、slave

               mysql> grant all privileges on *.* to 'mha_monitor'@'172.16.%.%' identified by 'mha_monitor';

               Query OK, 0 rows affected, 1 warning (10.12 sec)

          7.2编辑MHA的配置文件,以及建立对应的工作目录,并将这些目录的属主属组更改为MySQL。如果不做更改SSH/同步检查不会报错,但使用其他命令和切换会报权限错误,建议更改属主属组便于后续的维护配置。

               [root@172-16-3-189 ~] mkdir ‐p /etc/masterha

                       [root@172-16-3-189 masterha]# mkdir -p /var/log/masterha/app_3306

                       [root@172-16-3-189 masterha]# mkdir /opt/shells/masterha

                       [root@172-16-3-189 we_ops_admin]# chown -R mysql:mysql /var/log/masterha/

                       [root@172-16-3-189 masterha]# chown -R mysql:mysql /etc/masterha/
                       [root@172-16-3-189 masterha]# chown -R mysql:mysql /opt/shells/masterha/

               [root@172-16-3-189 masterha]# cat /etc/masterha/app_3306.cnf   #编辑MHA的配置文件

               [root@172-16-3-189 masterha]# cat app_3306.cnf

               [server default]

               # mysql user and password

               user=mha_monitor

               password=mha_monitor

       repl_user=repl

       repl_password=repl

       ssh_user=mysql

       ssh_port=22222

       # working directory on the manager

       manager_workdir=/var/log/masterha/app_3306

       # working directory on MySQL servers

       remote_workdir=/var/log/masterha/app_3306

       ping_interval=1

       master_ip_failover_script=/opt/shells/masterha/master_ip_failover_3306

       master_ip_online_change_script=/opt/shells/masterha/master_ip_online_change_script_3306

       [server1]

       hostname=172.16.3.190

       port=3306

       master_binlog_dir=/opt/app/mysql_3306/data

       [server2]

       hostname=172.16.3.189

       port=3306

       master_binlog_dir=/opt/app/mysql_3306/data

     7.3编辑自动漂移和手动漂移的脚本文件并授予可执行权限,以及VIP漂移处给予sudo的权限,这里将用户设置为可sudo,是给予摘除和添加VIP的权限

           [root@172-16-3-189 we_ops_admin]# chmod +x /opt/shells/masterha/master_ip_failover_3306

           [root@172-16-3-189 we_ops_admin]# chmod +x /opt/shells/masterha/master_ip_online_change_script_3306

          编辑脚本文件master_ip_failover_3306,修改如下行为:

                    my $ssh_start_vip = "sudo /sbin/ifconfig eth0:$key $vip;sudo /sbin/arping -I eth0:0 -c 5 -s 172.16.3.123 172.16.0.1 >/dev/null 2>&1"

         编辑master_ip_online_change_script_3306修改如下行为:

                    my $ssh_start_vip = "sudo /sbin/ifconfig eth0:$key $vip;sudo /sbin/arping -I eth0:0 -c 5 -s 172.16.3.123 172.16.0.1 >/dev/null 2>&1"

                    `ssh mysql\@${new_master_host} \" $ssh_start_vip \"`; #将root用户替换为MySQL用户,这里会进行SSH添加VIP

                     `ssh mysql\@${orig_master_host} \" $ssh_stop_vip \"`; #讲root用户替换为MySQL用户,这里会进行SSH摘除VIP

     

    三、MHA健康检查(传递公钥的用户模式下进行检查)

           1、检查SSH免密码登录

                [mysql@172-16-3-189 ~]$ masterha_check_ssh --conf=/etc/masterha/app_3306.cnf

           2、检查同步状态

                [mysql@172-16-3-189 ~]$ masterha_check_repl --conf=/etc/masterha/app_3306.cnf

           3、检查manager自动漂移服务是否开启

                [mysql@172-16-3-189 ~]$ masterha_check_status --conf=/etc/masterha/app_3306.cnf

     

    四、切换测试(漂移过程及结果不做赘述,传递公钥的用户模式下进行漂移)

           1、手动切换,并检查同步状态是否正常

                 [mysql@172-16-3-189 ~]$ masterha_master_switch --conf=/etc/masterha/app_3306.cnf --master_state=alive  --orig_master_is_new_slave -interactive=0

            2、自动切换,并查看VIP是否成功漂移

                关闭master实例,发现VIP成功从master摘除并漂移到slave上

     

    五、遇到的问题总结

           1、MHA的工作目录公钥用户对此没有权限

            2、摘除、添加VIP需要有sudo权限

            3、在线切换的用户要使用公钥用户而不是不用的root用户

            4、手动切换的过程中,使用公钥用户进行,不必进行sudo -s给予sudo权限,否则会多余输入密码

  • 相关阅读:
    用 Java 通过串口发送手机短信(二)简单使用
    jquery.lazyload.js实现图片延迟加载——wordpress图片随滚动条渐显效果
    java的mysql连接池
    html5客户端本地存储之sessionStorage及storage事件
    flash chart(amCharts的破解)
    实现igoogle效果的两种方法比较
    “SQL Server (SQL2005) 服务因 126 (0x7E) 服务性错误而停止”的解决方法 
    一个超简单的方法验证文本框中内容的数据类型
    我的对联
    Ajax调用后类方法时报”对象未定义“错误解决方法
  • 原文地址:https://www.cnblogs.com/liyingxiao/p/9701141.html
Copyright © 2020-2023  润新知