mysql(十五)
2019-12-18 本文已影响0人
Freestyle_0f85
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 | 查看版本号 |
+----------------------------+---------------------------------------------------------+