在MySQL的部署场景中,经常使用HAproxy和ipvs来作为读请求转发的网关.
ipvs的好处在于本身不需要daemon的方式来运行,而是直接作为kernel的服务来提供;
当ipvs和应用程序服务器在同一网段时,可以使用DR模式,这样可以避免在返回
数据时还需由网关来处理.

硬件:

ipvsadm服务器192.168.1.100,VIP虚拟ip配置为192.168.1.204

三台mysql从服务器:

192.168.1.135

192.168.1.136

192.168.1.137

一,安装ipvsadm

1,yum安装

#yum -y install ipvsadm

建立ipvsadm文件

#ipvsadm --save > /etc/sysconfig/ipvsadm

初始化配置

#ipvsadm -C

二,为ipvsadm服务器网卡配置一个虚拟IP

1,查看网卡名ip addr,记住en开头的网卡名,打开该网卡名的配置文件

#vi /etc/sysconfig/network-scripts/ifcfg-en你的网卡名

2,添加一行ip

IPADDR1=192.168.1.204

3,service network restart 重启网卡。

三,配置ipvsadm

1,ipvsadm -C清除之前的配置

2,在ipvs上新增一个服务器,使用负载平均分发到后端服务器的策略

#ipvsadm -A -t 192.168.1.204:  -s rr

3,为ipvs新增服务器增加后端真实的服务器

#ipvsadm -a -t 192.168.1.204: -r 192.168.1.135: -g
#ipvsadm -a -t 192.168.1.204: -r 192.168.1.136: -g
#ipvsadm -a -t 192.168.1.204: -r 192.168.1.137: -g #ipvsadm --save

4,查看配置情况

# ipvsadm -L
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP localhost.localdomain:mysql rr
-> 192.168.1.135:mysql Route
-> 192.168.1.136:mysql Route
-> 192.168.1.137:mysql Route

四,配置Mysql从库服务器

(☞服务器安装在windows上如何配置?)

1,在回路接口(lo网卡)上新增ipvsadm服务器的ip地址

# vi /etc/sysconfig/network-scripts/ifcfg-lo

#添加下面一行
IPADDR1=192.168.1.204

2,添加静态路由,(更多详细操作

route add -host 192.168.1.204 dev lo

3,设置网卡通讯规则(更多细节

# echo "" >/proc/sys/net/ipv4/conf/lo/arp_ignore
# echo "" >/proc/sys/net/ipv4/conf/lo/arp_announce
# echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
# echo "" >/proc/sys/net/ipv4/conf/all/arp_announce
# sysctl -p >/dev/null >&1 #/dev/null 2>&1 是什么意思?

为了使配置永久生效,建议把配置写入/etc/sysctl.conf的文件中。

每台从库服务器都需要同样的配置。

在第三台主机上通过VIP登录mysql 3次后,可以看到ipvsadm平均分发了对从库的访问。

# ipvsadm -L
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP localhost.localdomain:mysql rr
-> 192.168.1.135:mysql Route
-> 192.168.1.136:mysql Route
-> 192.168.1.137:mysql Route

最后可以使用sysbench做压力测试

本文在 使用IPVS分发MySQL读请求 的基础上根据自身的经验总结而来。

ipvsadm分发MySQL读请求的更多相关文章

  1. keepalived和lvs实现mysql读负载均衡

    keepalived+lvs实现对mysql读负载均衡 环境:redhat 6.5 real server: 172.25.254.189 172.25.254.224 lvs: 172.25.254 ...

  2. Mysql读写锁保姆级图文教程

    摘要:读锁会阻塞写,但是不会阻塞读,而写锁会把杜希俄都阻塞. 本文分享自华为云社区<Mysql保姆级读写锁图文教程丨[绽放吧!数据库]>,作者:Code皮皮虾 . 准备 创建mylock表 ...

  3. 扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群

    原 扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群 2018年12月06日 14:26:45 温故而知新666 阅读数 897   版权声明:本文为博主原创文章,遵循CC 4.0 b ...

  4. (10) 如何MySQL读压力大的问题

    如何进行读写分离 由开发人员根据所执行的SQL类型连接不同的服务器 由数据库中间层实现读写分离 读写分离时,需要注意,对于实时性要求比较高的数据,不适合在从库上查询(因为主从复制存在一定延迟(毫秒级) ...

  5. [高性能MYSQL 读后随笔] 关于事务的隔离级别(一)

    一.锁的种类 MySQL中锁的种类很多,有常见的表锁和行锁,也有新加入的Metadata Lock等等,表锁是对一整张表加锁,虽然可分为读锁和写锁,但毕竟是锁住整张表,会导致并发能力下降,一般是做dd ...

  6. nginx源代码分析--读请求主体(1)

    首先,读取请求体已进入HTTP要求11相,我们需要做的请求正文部分处理一些模块,所以这个模块需要注册功能在这个阶段,在阅读功能要求的身体ngx_http_read_client_request_bod ...

  7. rocketMQ broker 分发并处理请求

    使用 netty 监听端口 // org.apache.rocketmq.remoting.netty.NettyRemotingServer#start ServerBootstrap childH ...

  8. mysql 读写锁

    1. 表读锁 lock table tablename read; 例如: 从上图中可以看到,当给表a加了读锁之后,该进程本身对表a是可读的,但是不可写,再看在另外一个进程中: 在另外一个进程中表a也 ...

  9. 爬虫定时任务 redis 减轻 mysql 读的压力 加层

    非工作时间,定时任务爬虫大量mysq短链接,影响了其他业务的,mysql 报 too many connections  错误 将爬虫url池放入到redis中,单独的脚本维护redis url池的更 ...

随机推荐

  1. G.Longest Palindrome Substring

    链接:https://ac.nowcoder.com/acm/contest/908/G 题意: A palindrome is a symmetrical string, that is, a st ...

  2. NOI2015品酒大会 后缀数组

    自己尝试敲后缀数组,发现难看(tiao)的不行,于是抄了板子 考虑建出hei以后转化出的问题: 对于一个数组中权值大于等于k的连续部分,求取两个数的方案数和两数积的最大值 (好气啊,可以有负数) 把询 ...

  3. 063 Unique Paths II 不同路径 II

    这是“不同路径” 的进阶问题:现在考虑网格中有障碍物.那样将会有多少条不同的路径从左上角到右下角?网格中的障碍物和空位置分别用 1 和 0 来表示.例如,如下所示在 3x3 的网格中有一个障碍物.[  ...

  4. spirngmvc整合mybatis

    一.建立一张简单的User表 CREATE TABLE `users` (`id` int(20) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NUL ...

  5. 一、Postgresql的基本操作

    ---------------------------------------------------------------------------------------------------- ...

  6. I/O————对象流

    对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘 一个对象以流的形式进行传输,叫做序列化. 该对象所对应的类,必须是实现Serializable接口 对象的序列化与反序列化就是从文件 ...

  7. 网页转PDF作为邮件附件

    Nuget 引入 OpenHtmlToPdf using (WebClient wc = new WebClient()) { wc.Encoding = Encoding.UTF8; wc.UseD ...

  8. Home is where your heart is

    Home is where your heart is.心之所在即为家.

  9. Linux shell标准输入,标准输出,错误输出

    shell中可能经常能看到:1>/dev/null  2>&1  eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{prin ...

  10. 【转载】UWP应用设置和文件设置:科普

    数据有两个基本的分类,应用数据和用户数据,而用户数据则为由用户拥有的数据,如文档,音乐或电子邮件等,下面将大致的介绍一下应用数据的基本操作. 应用数据:应用数据包含APP的状态信息(如运行时状态,用户 ...