<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>HAProxy on F嘉阳</title><link>https://blog.fjy8018.top/tags/haproxy/</link><description>Recent content in HAProxy on F嘉阳</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 30 Dec 2019 08:46:37 +0800</lastBuildDate><atom:link href="https://blog.fjy8018.top/tags/haproxy/index.xml" rel="self" type="application/rss+xml"/><item><title>PXC系列学习笔记（四）——搭建双机热备的MyCat集群</title><link>https://blog.fjy8018.top/archives/233/</link><pubDate>Mon, 30 Dec 2019 08:46:37 +0800</pubDate><guid>https://blog.fjy8018.top/archives/233/</guid><description>&lt;img src="https://blog.fjy8018.top/images/recovered/de47efcb191c722de4a9.png" alt="Featured image of post PXC系列学习笔记（四）——搭建双机热备的MyCat集群" /&gt;&lt;h2 id="一介绍"&gt;&lt;a href="#%e4%b8%80%e4%bb%8b%e7%bb%8d" class="header-anchor"&gt;&lt;/a&gt;一、介绍&#10;&lt;/h2&gt;&lt;p&gt;目前已经搭建好了2套PXC集群，使用了单台mycat进行数据路由，在数据库层实现了高可用，但若mycat宕机，后端数据库依然无法使用，故还需要搭建多一台mycat，结合HAProxy和Keepalived实现负载均衡、双机热备。&lt;/p&gt;&#10;&lt;h2 id="二集群架构"&gt;&lt;a href="#%e4%ba%8c%e9%9b%86%e7%be%a4%e6%9e%b6%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;二、集群架构&#10;&lt;/h2&gt;&lt;p&gt;&lt;img alt="image-20191227152159478" class="gallery-image" data-flex-basis="649px" data-flex-grow="270" height="625" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20191227152159478.png" width="1692"&gt;&lt;/p&gt;&#10;&lt;h2 id="三搭建"&gt;&lt;a href="#%e4%b8%89%e6%90%ad%e5%bb%ba" class="header-anchor"&gt;&lt;/a&gt;三、搭建&#10;&lt;/h2&gt;&lt;p&gt;服务器资源规划如下&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;名称&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;IP&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;CPU&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;内存&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;磁盘&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;服务&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;pxc3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;192.168.1.33&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;40G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;mycat&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;pxc4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;192.168.1.35&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;40G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;haproxy、Keepalived&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;pxc5&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;192.168.1.36&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;40G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;mycat&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;pxc6&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;192.168.1.37&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;40G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;haproxy、Keepalived&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="1-安装mycat集群"&gt;&lt;a href="#1-%e5%ae%89%e8%a3%85mycat%e9%9b%86%e7%be%a4" class="header-anchor"&gt;&lt;/a&gt;1. 安装mycat集群&#10;&lt;/h3&gt;&lt;p&gt;用两个虚拟机实例，各自部署&lt;code&gt;MyCat&lt;/code&gt;，采用相同配置&lt;/p&gt;&#10;&lt;h3 id="2-安装haproxy集群"&gt;&lt;a href="#2-%e5%ae%89%e8%a3%85haproxy%e9%9b%86%e7%be%a4" class="header-anchor"&gt;&lt;/a&gt;2. 安装Haproxy集群&#10;&lt;/h3&gt;&lt;p&gt;用一个虚拟机实例部署&lt;code&gt;Haproxy&lt;/code&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;安装Haproxy，需要开放两个端口，3306（TCP转发），4001（监控界面）&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum install -y haproxy&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;编辑配置文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vi /etc/haproxy/haproxy.cfg&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;由于该节点同时也运行了PXC数据库，3306端口已经占用，故使用13306端口&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;global&#10; log 127.0.0.1 local2&#10;&#10; chroot /var/lib/haproxy&#10; pidfile /var/run/haproxy.pid&#10; maxconn 4000&#10; user haproxy&#10; group haproxy&#10; daemon&#10;&#10; stats socket /var/lib/haproxy/stats&#10;&#10;defaults&#10; mode http&#10; log global&#10; option httplog&#10; option dontlognull&#10; option http-server-close&#10; option forwardfor except 127.0.0.0/8&#10; option redispatch&#10; retries 3&#10; timeout http-request 10s&#10; timeout queue 1m&#10; timeout connect 10s&#10; timeout client 1m&#10; timeout server 1m&#10; timeout http-keep-alive 10s&#10; timeout check 10s&#10; maxconn 3000&#10;&#10;listen admin_stats &#10; bind 0.0.0.0:4001&#10; mode http&#10; stats uri /dbs&#10; stats realm Global\ statistics&#10; stats auth admin:Abc%6870&#10;&#10;listen proxy_mysql&#10; bind 0.0.0.0:13306 &#10; mode tcp &#10; balance roundrobin&#10; option tcplog&#10; server mycat_1 192.168.1.33:8066 check port 8066 weight 1 maxconn 2000 &#10; server mycat_2 192.168.1.36:8066 check port 8066 weight 1 maxconn 2000 &#10; option tcpka&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;启动Haproxy&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ service haproxy start&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;访问Haproxy监控画面&lt;/p&gt;&#10;&lt;p&gt;http://192.168.1.35:4001/dbs&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20191227172147428" class="gallery-image" data-flex-basis="525px" data-flex-grow="219" height="494" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20191227172147428.png" width="1082"&gt;&lt;/p&gt;&#10;&lt;p&gt;用另外一个虚拟机同样按照上述操作安装&lt;code&gt;Haproxy&lt;/code&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="3-安装keepalived集群"&gt;&lt;a href="#3-%e5%ae%89%e8%a3%85keepalived%e9%9b%86%e7%be%a4" class="header-anchor"&gt;&lt;/a&gt;3. 安装Keepalived集群&#10;&lt;/h3&gt;&lt;p&gt;在某个&lt;code&gt;Haproxy&lt;/code&gt;虚拟机实例上部署&lt;code&gt;Keepalived&lt;/code&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;开启防火墙的&lt;code&gt;VRRP&lt;/code&gt;协议&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#开启VRRP&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT &lt;span class="m"&gt;0&lt;/span&gt; --protocol vrrp -j ACCEPT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# iptable配置&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iptables -I INPUT -p vrrp -j ACCEPT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#应用设置&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firewall-cmd --reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;安装Keepalived&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum install -y keepalived&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;编辑配置文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi /etc/keepalived/keepalived.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vrrp_instance VI_1 &lt;span class="o"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; state MASTER &lt;span class="c1"&gt;# 争抢虚拟IP，若不争抢，则设置为slave&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; interface ens192&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; virtual_router_id &lt;span class="m"&gt;51&lt;/span&gt; &lt;span class="c1"&gt;# 唯一ID，范围0-255&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; priority &lt;span class="m"&gt;100&lt;/span&gt; &lt;span class="c1"&gt;# 抢占权重&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; advert_int &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;# 心跳检测间隔时间&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; authentication &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;# 心跳检测账户和密码&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; auth_type PASS&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; auth_pass &lt;span class="m"&gt;123456&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; virtual_ipaddress &lt;span class="o"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 192.168.1.9 &lt;span class="c1"&gt;# 新虚拟IP&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;启动&lt;code&gt;Keepalived&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ systemctl start keepalived&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;在两台&lt;code&gt;Keepalived&lt;/code&gt;节点上&lt;code&gt;ping&lt;/code&gt;虚拟IP，看是否已经创建并可以访问&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ping 192.168.1.9&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;在另外一个&lt;code&gt;Haproxy&lt;/code&gt;虚拟机上，按照上述方法部署&lt;code&gt;Keepalived&lt;/code&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;使用MySQL客户端连接&lt;code&gt;192.168.1.9&lt;/code&gt;，执行增删改查数据&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;</description></item></channel></rss>