美文网首页
mysql(十五)

mysql(十五)

作者: Freestyle_0f85 | 来源:发表于2019-12-18 13:25 被阅读0次

MHA VIP管理 前戏

image.png

管理vip的方式:keepalived

  • 1.如何保证,一定从51切到53

    • 在MHA的配置文件中,加入候选主库的参数
    candidate_master=1
    check_repl_delay=0
    
  • 2.如何保证53一定是数据最新的从库

    • 半同步
  • 3.影响主库性能,超时就恢复成异步复制

    • 买配置高的机器(磁盘性能高,内存/cpu:1核2G、2核4G、4核8G)
    • 半同步复制的从库,不提供服务
    • 费用高,花钱多

管理vip的方式:MHA自带脚本

master_ip_failover_script is not set. Skipping invalidating dead master IP address.

[root@db01 scripts]# ll
total 32
-rwxr-xr-x 1 4984 users  3648 Apr  1  2014 master_ip_failover

[root@db01 scripts]# pwd
/root/mha4mysql-manager-0.56/samples/scripts

my $vip = '10.0.0.55/24';
my $key = '0';
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

#修改配置文件
[root@db02 mha]# vim app1.cnf
master_ip_failover_script=/etc/mha/app1/master_ip_failover

#停止MHA
master_ip_failover_script=/etc/mha/app1/master_ip_failover

#启动MHA
[root@db02 app1]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/app1/manager.log 2>&1 &


#1.语法问题
#2.权限问题
[root@db02 app1]# chmod +x /etc/mha/app1/master_ip_failover
#3.格式问题
[root@db02 app1]# yum install -y dos2unix
[root@db02 app1]# dos2unix /etc/mha/app1/master_ip_failover 
dos2unix: converting file /etc/mha/app1/master_ip_failover to Unix format ...

#手动添加vip在主库上
[root@db01 scripts]# ifconfig eth0:0 10.0.0.55/24
[root@db01 scripts]# ifconfig eth0:0
eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.55  netmask 255.255.255.0  broadcast 10.0.0.255
        ether 00:0c:29:e9:87:43  txqueuelen 1000  (Ethernet)

MHA VIP管理切换测试

#修改程序连接数据库的IP
[root@db02 ~]# vim a.sh 
#!/bin/bash

num=1
while true;do
        mysql -uroot -p123 -h10.0.0.55 -e 'insert into rep.rep values('"$num"');commit;'
        let num++
        sleep 1
done

#启动程序
[root@db02 ~]# sh a.sh 

#关闭db02,多db03的IO线程
mysql> stop slave io_thread;

MHA VIP管理实现自动化恢复集群

#每台机器上放recover

#!/bin/bash

#old_master=`ssh 10.0.0.52 "sed -nr 's#^Master (.*)\(.*\!#\1#gp' /etc/mha/app1/manager.log"`
change=`ssh 10.0.0.52 "grep -i 'change master to' /etc/mha/app1/manager.log"|awk -F: '{print $NF}'|sed 's#xxx#123#g'`

/etc/init.d/mysqld start

mysql -uroot -p123 -e "$change start slave;"

ssh 10.0.0.52 '\cp /etc/mha/app1.cnf.ori /etc/mha/app1.cnf'


[root@db02 ~]# vim /etc/mha/app1/master_ip_failover
sub start_vip() {
    `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
    `ssh $ssh_user\@$orig_master_host \" /bin/sh /root/recovery_mha.sh \"`;
}

MHA binlog server

如果断电,断网,怎么办?

#添加一个binlog server
[root@db02 ~]# vim /etc/mha/app1.cnf
[binlog1]
no_master=1
hostname=10.0.0.53
master_binlog_dir=/data/mysql/binlog/

#创建实时备份binlog的目录
[root@db03 ~]#  mkdir /data/mysql/binlog/ -p

#逻辑备份工具
1.mysqldump
2.into out file
3.binlog
4.replication
---------------
5.mysqlbinlog

#实时拉取binlog
[root@db03 ~]# cd /data/mysql/binlog/

[root@db03 binlog]# mysqlbinlog  -R --host=10.0.0.52 --user=mha --password=mha --raw  --stop-never mysql-bin.000001 &

MySQL 读写分离中间件Atlas

image.png

1.set global read_only=1;

Atlas 就类似于 代理

读写分离中间件产品

1.Atlas

2.mysql-proxy(官方)

3.mycat

Atlas主要功能

  • 1.读写分离
  • 2.从库负载均衡
  • 3.IP过滤
  • 4.自动分表
  • 5.DBA可平滑上下线DB
  • 6.自动摘除宕机的DB

相对于官方的优势

  • 1.将主流程中所有Lua代码用C重写,Lua仅用于管理接口
  • 2.重写网络模型、线程模型
  • 3.实现了真正意义上的连接池
  • 4.优化了锁机制,性能提高数十倍

Atlas安装和配置

[root@db04 ~]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:Atlas-2.2.1-1                    ################################# [100%]
   
   
[root@db04 mysql-proxy]# ll
total 0
drwxr-xr-x 2 root root  75 Dec 18 11:38 bin         #工具命令
drwxr-xr-x 2 root root  22 Dec 18 11:43 conf        #配置文件
drwxr-xr-x 3 root root 331 Dec 18 11:38 lib         #库文件
drwxr-xr-x 2 root root   6 Dec 17  2014 log         #日志文件

   
#修改配置
[root@db04 ~]# vim /usr/local/mysql-proxy/conf/test.cnf 
#管理接口的用户名
admin-username = user

#管理接口的密码
admin-password = pwd

#Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:2345


#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 10.0.0.51:3306
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy-read-only-backend-addresses = 10.0.0.51:3306,10.0.0.53:3306,10.0.0.54:3306
#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你
的MySQL的用户名和加密密码!
pwds = rep:3yb5jEku5h4=,mha:O2jBXONX098=
#设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后
面不能有空格。
daemon = true
#设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启
,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
keepalive = true
#工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
event-threads = 8
#日志级别,分为message、warning、critical、error、debug五个级别
log-level = error
#日志存放的路径
log-path = /usr/local/mysql-proxy/log
#SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘
,默认为OFF
sql-log = ON
#慢日志输出设置。当设置了该参数时,则日志只输出执行时间超过sql-log-slow(单位:ms)的日志记录。不设置该参数则输出全部日志>。
sql-log-slow = 10 
#实例名称,用于同一台机器上多个Atlas实例间的区分
#instance = test
#Atlas监听的工作接口IP和端口
proxy-address = 0.0.0.0:3306
#分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项
#tables = person.mt.id.3
#默认字符集,设置该项后客户端不再需要执行SET NAMES语句
charset = utf8
#允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连>接
#client-ips = 127.0.0.1, 192.168.1
#Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置
#lvs-ips = 192.168.1.1

#启动atlas
[root@db04 conf]# /usr/local/mysql-proxy/bin/mysql-proxyd exam_study start

[root@db04 conf]# /usr/local/mysql-proxy/bin/mysql-proxyd base start


#连接管理接口
[root@db04 conf]# mysql -uuser -ppwd -h127.0.0.1 -P2345

#查看后端
mysql> SELECT * FROM backends;
+-------------+----------------+-------+------+
| backend_ndx | address        | state | type |
+-------------+----------------+-------+------+
|           1 | 10.0.0.52:3306 | up    | rw   |
|           2 | 10.0.0.51:3306 | up    | ro   |
|           3 | 10.0.0.53:3306 | up    | ro   |
|           4 | 10.0.0.54:3306 | up    | ro   |
+-------------+----------------+-------+------+
mysql> SELECT * FROM help;
+----------------------------+---------------------------------------------------------+
| command                    | description                                             |
+----------------------------+---------------------------------------------------------+
| SELECT * FROM help         | 查看帮助                                                |
| SELECT * FROM backends     | 查看后端的数据库                                        |
| SET OFFLINE $backend_id    | 平滑下线DB,set offline 3;                               |
| SET ONLINE $backend_id     | 平滑上线DB,set online 3;                               |
| ADD MASTER $backend        | 添加主库,ADD MASTER 10.0.0.55:3306;                     |
| ADD SLAVE $backend         | 添加从库,ADD SLAVE 10.0.0.54:3306                      |
| REMOVE BACKEND $backend_id | 摘除后端数据库,REMOVE BACKEND 1;                       |
| SELECT * FROM clients      | 查看可登录的客户端                                      |
| ADD CLIENT $client         | 添加客户端, ADD CLIENT 192.168.1.1;                    |
| REMOVE CLIENT $client      | 删除客户端, REMOVE CLIENT 192.168.1.1;                 |
| SELECT * FROM pwds         | 查看用户名和密码                                        |
| ADD PWD $pwd               | 添加用户和密码,ADD PWD root:123;  自动加密             |
| ADD ENPWD $pwd             | 添加用户名和密码,ADD ENPWD zls:O2jBXONX098=;  手动加密 |
| REMOVE PWD $pwd            | 删除用户名和密码,REMOVE PWD root;                      |
| SAVE CONFIG                | 保存到配置文件                                          |
| SELECT VERSION             | 查看版本号                                              |
+----------------------------+---------------------------------------------------------+

相关文章

网友评论

      本文标题:mysql(十五)

      本文链接:https://www.haomeiwen.com/subject/eytunctx.html