欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL高可用方案几种方案 snsdb2算法linuxflex 

程序员文章站 2022-05-05 19:54:26
...
转载于:http://www.itxuexiwang.com/a/shujukujishu/2016/0221/155.html?1456383602

Mysql-mmm就是mysql主主复制管理器,实现的功能有:
高可用性(类似keepalived的vip浮动技术)
同个时间只提供一台数据库写操作,保证数据库的一致性。
提升slave为master,延续双主的架构

首先先搭建好数据库主主,主从架构:类似图:(不再叙述)
在每台数据库中为monitor的机器来监控当前的同步情况:
Grant replivation client to ‘user@’ip’ identified by ‘password’  创建一个mmm-monitor的账户,主要用于监控和同步
Grant super, replication client ,process on *.* to  ‘user’@’ip’ identified by ‘password’
创建一个mmm-agent的账户,用于客户端的各种操作

Mysql-mmm的下载地址为

------------------------------------------分割线------------------------------------------

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /2016年资料/2月/20日/MySQL高可用方案几种方案/

下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm

------------------------------------------分割线------------------------------------------

由于使用的是epel的方式需要把/etc/yum.repos.d/epel.repo中的mirrorlist换为baseurl

===========================================================================

配置mmm_common.conf的文件:所有节点的配置都是一样的包括监控端

active_master_role      writer

<host default>
    cluster_interface       eth0
    pid_path                /var/run/mysql-mmm/mmm_agentd.pid
    bin_path                /usr/libexec/mysql-mmm/
    replication_user        ccd      //同步的账户
    replication_password    ccd
    agent_user              ccd       //大一点的权限
    agent_password          ccd
</host>
<host db1>
     ip 172.20.138.212
     mode master
     peer db2
</host>
<host db2>
  ip  172.20.138.209
  mode  master
  peer  db1
</host>
<role writer>
    hostsdb1,db2
    ips  172.20.138.100
    mode exclusive    //exclusive为单写
</role>

<role reader>
    Hosts b1,db2
    ips 172.20.138.250  //可以有多个ip,每个数据库可以单独有一个vip
    mode balanced    //读取为负载均衡
</role>
============================================================================
修改mmm_agent.conf文件中不同的db值

最后配置一下mmm_mon.conf
主要修改的地方有:
Ping_ips 为监控的主机的真实ip,
Monitor 修改为数据库赋予的账户
Monitor_assword  密码

在/etc/init.d/中启动服务,在监控服务器中输入命令:
Mmm_control checks 检查所有的数据库同步情况和运行情况
Mmm_control show 查看vip绑定情况,类似ipvsadm

Mysql-mmm不适合用于mysql主从的高负载
验证vip均可以跳转,但是发现读ip也具有写入数据的功能。。。。如果加上读写分离的话就可以实现读取的vip不具备写入的功能

Mysql-proxy实现负载均衡和读写分离
目前的mysql-proxy的版本为0.8.5aplha

在安装mysql-proxy之前需要安装lua
到官网下载lua的源文件
yum -y install readline-devel ncurses-devel
安装readline-devel和ncurses-devel  否则安装会出现readline寻找不到的问题
tar zxvf luaxxxxx
make linux
make install
这时候输入lua可以进入编译模式表示lua安装成功

安装所需要的依赖包
yum install gcc* gcc-c++* autoconf*automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*

到mysql-proxy官网下载最新的mysql-proxy源文件
安装十分简单解压之后即可使用
将mysql-proxy添加到相对应的环境变量中
export PATH =$PATH:/usr/local/mysql-proxy
source /etc/profile


修改mysql-proxy的配置文件
常用的命令参数如下:
--daemon 以daemon的模式启动
--admin-address=:4401  默认端口为4401
-help查看所有命令
-default-file 可以配置启动的配置文件
--proxy-backend-addresses=$host:$port  多个以逗号隔开
--proxy-address=:3307
--proxy-backend-addresses=:3306  mysql主机的端口
--proxy-read-only-backend-address=xxx13306  只读mysql主机的端口
-- proxy-read-only-backend-address=xxx23306  可以指定多个只读mysql主机的端口
--proxy-lua-script=/usr/local/xxx/rw-splitting.lua  使用系统只带的lua脚本实现读写分离的功能

使用系统自带的rw.split.lua脚本需要修改两个参数
min_idle_connections=1
max_idle_connections = 3

启动脚本:
#!/bin/bash
mode=$1
if [ -z "$mode" ] ;then
  mode="start"
fi
case $mode in
'start')
  mysql-proxy --daemon --proxy-address=:3307 --proxy-backend-addresses=172.20.138.209:3306;172.20.138.212:3306 --proxy-read-only-backend-addresses=172.20.138.212:3306  --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
  ;;
'stop')
  killall mysql-proxy
  ;;
esac
exit 0

或者使用配置方式的方法来启动
Vim /etc/mysql-proxy.cnf
admin-username = ccd
admin-password = ccd
daemon = true
keepalive = true
proxy-backend-addresses =172.20.138.209:3306;172.20.138.212:3306
proxy-read-only-backend-addresses =172.20.138.212:3306
proxy-lua-script =/usr/local/proxy-mysql/share/doc/mysql-proxy/rw-splitting.lua
admin-lua-script =/usr/local/proxy-mysql/share/doc/mysql-proxy/admin-sql.lua
log-file = /usr/local/proxy-mysql/cn.log
log-level = debug
修改相对应的脚本即可:
Mysql-proxy –defaults-file =/etc/mysql-proxy.cnf

对于数据库的测试可以使用sysbench工具来进行测试

利用keepalived实现对mysql主主/主从的高可用
配置keepalived.conf文件:
Vrrp_instatance  HA_1{
State BACKUP  #配置为slave,也可以是master
Interface eth0
Virtual_router_id 80  //主从配置的虚拟路由标识需要一样
Priority 100  #配置不同的优先级
Advert_int 1  #配置主备之间同步检查的周期
Authenication{
Auth_type PASS
Auth_pass 1111
}
Virtual_ipaddress {
    vip/24 dev eth0
}
}
Virtual_server  xxxxxx  3306{
Delay_loop 2
lb_algo wrr        //lvs算法为加权轮询
lb_kind DR    //lvs的模式为DR模式
protocol TCP
reall_server  xxxx 3306 {
weight  1
TCP_CHECK {
Connect_timeout  3
nb_get_retry    3
delay_before_retry  3
connect_port  3306
}

Real  server xxxx  3306{
  同上
}
}

DR的real serverloop端口需要绑定vip的地址脚本为:
#!/bin/bash
SNS_VIP=172.138.20.244
./etc/rc.d/init.d/functions
case"$1" in
start)
      ifconfig lo:0 $SNS_VIP netmask255.255.255.255 broadcast $SNS_VIP

      /sbin/route add -host $SNS_VIP dev lo:0

      echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore

      echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce

      echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

      echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

      sysctl -p >/dev/null 2>&1

      echo "RealServer Start OK"



      ;;

stop)

      ifconfig lo:0 down

      route del $SNS_VIP >/dev/null2>&1

      echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore

      echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce

      echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore

      echo "0">/proc/sys/net/ipv4/conf/all/arp_announce

      echo "RealServer Stoped"

      ;;

*)

      echo "Usage: $0 {start|stop}"

      exit 1

esac

exit 0

授权远程主机可以通过vip来连接登录vip
Grant allprivileges to  on *.* to xxxx identifiedby xxxxx
    Flushprivileges
由此可以实现mysql数据库的高可用

使用keepalived的方式有两种 一种为keepalived加脚本实现vip的切换,另外一种是keepalived+lvs的方式来实现数据库的高可用