Centos 7_MySQL主主复制_Haproxy实现负载均衡

Centos 7下安装MySQL 5.5

以管理员身份进行以下操作:

删除centos预先安装的mariadb

rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
rpm -qa | grep mariadb

安装MySQL依赖

yum install -y gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel*

创建MySQL工作目录

cd ~ && mkdir mysql && cd mysql

安装cmake

wget http://www.cmake.org/files/v3.4/cmake-3.4.0.tar.gz 
tar -zxvf cmake-3.4.0.tar.gz && cd cmake-3.4.0
./configure
gmake && make install 

安装MySQL

rm -rf /etc/my.cnf && rm -rf /etc/init.d/mysqld
userdel mysql 
groupdel mysql
groupadd mysql
useradd -g mysql mysql

cd ~/mysql
wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.54.tar.gz
tar -zxvf mysql-5.5.54.tar.gz cd mysql-5.5.54

执行cmake命令

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS:STRING=utf8,gbk \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGIME=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_USER=mysql

make && make install

修改MySQL文件权限,创建软连接,复制MySQL配置文件等

chmod +w /usr/local/mysql && chown -R mysql:mysql /usr/local/mysql

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18 #软连接
cd support-files  #里面有多个my-*.cnf,large,huge,small,medium,不同的配置适用于不同的机器
cp my-large.cnf /etc/my.cnf && cp mysql.server /etc/init.d/mysqld
修改配置文件
vi /etc/my.cnf
在[mysqld]下面添加 
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
log-error = /usr/local/mysql/mysql_error.log
pid-file = /usr/local/mysql/data/mysql.pid
default-storage-engine=InnoDB
user = mysql
vi /etc/init.d/mysqld
修改路径
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
完成MySQL初始化
/usr/local/mysql/scripts/mysql_install_db \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data \
--user=mysql 

将MySQL加入开机启动

chmod +x /etc/init.d/mysqld
chkconfig --add mysqld && chkconfig --level 345 mysqld on

为MySQL配置环境变量

vi ~/.bashrc
export PATH=/usr/local/mysql/bin:$PATH
source ~/.bashrc

启动MySQL

service mysqld start
配置root密码
cd /usr/local/mysql && /usr/local/mysql/bin/mysql_secure_installation (一开始root初始密码为空)
允许MySQL远程连接
# mysql -u root -p
>use mysql;
>grant all privileges  on *.* to root@'%' identified by "password";

至此在Centos 7上完成了MySQL 5.5的安装。

MySQL 5.5的主主复制

MySQL的主主复制即为两个MySQL之间互为主从关系。通过主主复制,可以达到容灾防范,同时为后面的MySQL负载均衡做好准备。

在两台Centos虚拟机中分别安装好MySQL数据库,这两台虚拟机的地址分别被192.168.200.214与192.168.200.215,下午中分别称为214机与215机。

A) 实现214机与215机的主从复制

214机上操作:

a) 在214机的MySQL中为215机建立一个可以登录的用户

用户名:mysql12,密码:mysql12

mysql>GRANT REPLICATION SLAVE ON *.* TO 'mysql12'@'192.168.200.215' IDENTIFIED BY 'mysql12';

mysql>FLUSH PRIVILEGES;

b) 查看214机上MySQL服务器二进制文件名与位置

 mysql>SHOW MASTER STATUS;

Centos 7_MySQL主主复制_Haproxy实现负载均衡_第1张图片

c) 修改214机中MySQL的配置文件 (在215机器上做相同配置server-id=215)

vi /etc/my.cnf

server-id=214
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=1
binlog-ignore=mysql   #忽略mysql库,可以不写
binlog-ignore=information_schema   #忽略information_schema库,可以不写
replicate-do-db=test   #要同步的数据库,默认所有库,可以不写

auto_imcrement(步进值,一般有n台主MySQL就填n),auto_increment_offset(起始值。一般填第n台主MySQL。此时为第一台主MySQL)。

这两个值非常重要,如果不配置,则会导致主键重复而引起的插入冲突。

配置完成后重启MySQL服务。

d) 在215机上的MySQL中进行从属配置

 mysql>CHANGE MASTER TO
      >MASTER_HOST=’192.168.200.214’,
      >MASTER_USER=’mysql12’,
      >MASTER_PASSWORD=’mysql12’,
      >MASTER_LOG_FILE=’mysql-bin.000016’,
      >MASTER_LOG_POS=107;

在215机中开启从属复制

mysql>SLAVE START; 
mysql>SHOW SLAVE STATUS\G
Centos 7_MySQL主主复制_Haproxy实现负载均衡_第2张图片

当看见Slave_IO_Running: YES、Slave_SQL_Running: YES时,主从复制即完成。

B) 实现215机与214机的主从复制

在215机上的MySQL中对214机进行相同的主从配置操作,用户名可以为mysql21,密码为mysql21。

至此214机与215机实现了主主复制。无论在214机还是215机的MySQL中进行更新操作,均会相应的体现在另一台机器上面。

Centos 7下安装Haproxy,配置MySQL的负载均衡

Haproxy做为负载均衡的中间件,它将被安装在地址为192.168.200.216的虚拟机中。

groupadd haproxy
useradd -g haproxy haproxy
yum install haproxy

A) 关闭SELinux

如果不想配置SELinux策略,则一定要关闭SELinux。否则Haproxy和所代理的后端会出现端口连接错误。

vi /etc/selinux/config
// 修改为
SELINUX=disabled 

设置后需要重启才能生效。

B) 将Haproxy加入Centos的系统服务中

将Haproxy压缩包中(haproxy-1.5.14.tar.gz,直接用yum安装的话,压缩包需要单独下载)examples文件夹下的haproxy.init拷贝至/etc/init.d文件夹下,更名为haproxy。

chmod +x /etc/init.d/haproxy
chkconfig haproxy on

重启系统即可完成开机自动启动Haproxy服务。

C) 开启Haproxy的日志服务

创建记录日志文件

touch /var/log/haproxy.log
chown haproxy:haproxy /var/log/haproxy.log
chmod a+x /var/log/haproxy.log

开启rsyslog记录haproxy日志功能

vi /etc/rsyslog.conf 
(打开如下配置项)
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

(在RULES块中添加)
#### RULES ####
# save haproxy.log
local0.* /var/log/haproxy.log

修改/etc/sysconfig/rsyslog文件,内容如下:

vi /etc/sysconfig/rsyslog

# Options for rsyslogd
# Syslogd options are deprecated since rsyslog v3.
# If you want to use them, switch to compatibility mode 2 by "-c 2"
# See rsyslogd(8) for more details
SYSLOGD_OPTIONS="-r -m 0 -c 2"

配置Haproxy打开日志服务

vi /etc/haproxy/haproxy.cfg

global
log         127.0.0.1 local0

重启rsyslog与Haproxy服务

service rsyslog restart
service haproxy restart

查看Haproxy日志文件

tail -f /var/log/haproxy.log

D) Haproxy基础配置

vi /etc/haproxy/haproxy.cfg 
global
global    
    log         127.0.0.1 local0
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

defaults

defaults
    mode                    tcp
    log                     global
    option                  dontlognull // 不记录健康检查日志
    option                  httpclose
    option                  httplog
    option                  redispatch // serverId对应的服务器挂掉后,强制定向到其他健康的服务器
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
E) 开启Haproxy监控页面

在/etc/haproxy/haproxy.cfg中进行配置:

vi /etc/haproxy/haproxy.cfg

listen admin_stats
        mode    http
        stats   enable
        bind    *:8080  // 监听端口
        stats   refresh 30s
        stats   uri /admin // 统计页面访问的url
        stats   realm haproxy
        stats   auth root:root // 认证用户与密码
        stats   hide-version

在主机浏览器地址栏中输入192.168.200.216:8080/admin即可访问统计页面。

Centos 7_MySQL主主复制_Haproxy实现负载均衡_第3张图片

D) 进行MySQL负载均衡配置

在/etc/haproxy/haproxy.cfg中进行配置:

vi /etc/haproxy/haproxy.cfg

frontend  main *:5000 // Haproxy对外部访问MySQL请求的监听端口
    default_backend             mysql_backend

backend mysql_backend
    balance  leastconn // 最小连接数为筛选的负载均衡原则   
    server mysql1 192.168.200.214:3306 check port 3306 maxconn 300 // 一定要加check,否则Haproxy会认为该server一直是可用状态
    server mysql2 192.168.200.215:3306 check port 3306 maxconn 300

至此重新启动Haproxy,在监控页面中就可以看见mysql1与mysql2两个可用的数据库。

在数据库连接工具(如MySQL workbench)中,配置新的MySQL连接时,地址不再是214或者215,而是Haproxy所在的216虚拟机。同时端口需要输入Haproxy所监听的5000端口。

在验证过程中,我们任意停止214机,或者215机,均可以在数据库客户端保持正常的数据访问操作。同时214机或者215机一旦恢复启动,会通过主主复制,把想要的数据复制到数据库中。







你可能感兴趣的:(MySQL,Haproxy,架构)