MGR+keepalived+harproxy

一、MGR组复制原理

首先我们来谈谈什么叫做组复制。

组复制是一种可用于实现容错系统的技术。复制组是一个通过消息传递相互交互的Server集群。复制组由多个Server成员组成,如下图的Master1、Master2、Master3,所有成员独立完成各自的事务。

当客户端发起一个更新事务时,该事务先在本地执行,执行完成之后就要发起对事务的提交操作。在还没有真正提交之前,需要将产生的复制写集广播出去,复制到其它成员。如果冲突检测成功,组内决定该事务可以提交,其它成员可以应用,否则就回滚。

最终,所有组内成员以相同的顺序接收同一组事务。因此组内成员以相同的顺序应用相同的修改,保证组内数据强一致性。

二、Mysql安装

修改系统打开文件限制

vim /etc/security/limits.conf

* soft nofile 65535

* hard nofile 65535

2、三台机器互相做免密认证

151、152、153分别执行以下操作

ssh-keygen -t rsa -b 2048

ssh-copy-id  192.168.52.150

ssh-copy-id  192.168.52.151

ssh-copy-id  192.168.52.152

3、同时关闭防火墙(顺手关了NM,可以不关)

systemctl disable firewalld && systemctl stop firewalld && systemctl stop NetworkManager && systemctl disable NetworkManager

4、安装基础软件

yum install -y gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl  openssl-devel systemd-devel net-tools vim iotop bc iftop zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget epel-release telnet ntpdate yum-utils python-pip iostat

5、关闭selinux

vim /etc/selinux/config

修改主机名

vim /etc/hosts

192.168.52.150   m1

192.168.52.151   m2

192.168.52.152   m3

重启  shutdown -r now

6、安装mysql(centos7默认会安装mariadb,会自动替换为mysql)

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

yum -y install mysql57-community-release-el7-10.noarch.rpm

yum -y install mysql-community-server

cp  /etc/my.cnf /etc/my.cnf.bak

启动mysql

systemctl start mysqld

查看状态

systemctl status mysqld

查找mysql默认密码

grep "password" /var/log/mysqld.log

登录mysql(此时mysql不能进行任何操作,因为需要修改默认密码)

mysql -uroot -p

原因是因为MySQL有密码设置的规范,具体是与validate_password_policy的值有关:

修改密码

set password=password('KtmMGR.123');

查看密码规则

SHOW VARIABLES LIKE 'validate_password%';

修改密码规则

set global validate_password_policy=0;

set global validate_password_length=1;

如果需要可视化连接数据库,可新增账号(暂未运行此语句)

grant all on *.* to root@'%' identified by 'Gsl@MGR.123';

flush privileges;

但此时还有一个问题,就是因为安装了Yum Repository,以后每次yum操作都会自动更新,需要把这个卸载掉:

yum -y remove mysql57-community-release-el7-10.noarch.rpm

三、MGR搭建

51服务器

修改mysql配置

vim /etc/my.cnf

添加如下内容

server_id=51    #三台主机的id号不同

gtid_mode=ON

enforce_gtid_consistency=ON

master_info_repository=TABLE

relay_log_info_repository=TABLE

binlog_checksum=NONE

log_slave_updates=ON

log_bin=binlog

binlog_format=ROW

transaction_write_set_extraction=XXHASH64    

#指示Server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列

loose-group_replication_group_name="8053c671-0622-11e8-a300-525400b9c5e8"    

#表示将加入或者创建的复制组命名为8053c671-0622-11e8-a300-525400b9c5e8,可以自己指定

loose-group_replication_start_on_boot=off    

#设置为Server启动时不自动启动组复制

loose-group_replication_local_address= "192.168.52.150:33061"  

#绑定本地的192.168.10.1以及25901端口接受其他组成员的连接,IP地址必须为其他组成员可正常访问

loose-group_replication_group_seeds="192.168.52.150:33061,192.168.52.151:33061,192.168.52.152:33061"    

#本行为告诉服务器当服务器加入组时,应当连接到192.168.52.150:33061,192.168.52.151:33061,192.168.52.152:33061这些种子服务器进行配置。本设置可以不是全部的组成员服务地址

loose-group_replication_bootstrap_group= off    #配置是否自动引导组

loose-group_replication_single_primary_mode=FALSE    

#设置组自动选择一个 server 来处理读/写工作。 这个 server 是主(PRIMARY),所有其他的都是从

loose-group_replication_enforce_update_everywhere_checks=FALSE 

#多主模式下为多主更新启用或禁用严格一致性检查。

loose-group_replication_ip_whitelist="192.168.10.0/24" 

#开启白名单,认情况下只允许白名单连接到复制组,如果是其他IP则需要配置。

#group_replication_member_weight=80   

#值最高的成员被选为新的主节点,值相同的情况下,group根据数据字典中 server_uuid排序,排序在最前的被选择为主节点

loose-group_replication_unreachable_majority_timeout=5

#少数组成员由于网络中断且无法连接到多数成员的成员在离开组之前等待多长时间参数

#group_replication_compression_threshold=131072 

#复制压缩,当单个事务产生的binlog数据量大于设置的阈值GRP会启用压缩功能,在网络IO存在瓶颈时能有效减少网络占用30%-40%,但是对CPU消耗也会增加,该功能根据实际情况判定是否使用,默认该功能是超过1M的数据量就启用压缩,关闭只需设置该参数为0

#group_replication_transaction_size_limit=20971520    

#指定允许的事务大小,防止过大事务导致组同步失败,这个值允许设置的最大值为2147483647,2G,好像大于max_allowed_packet的1G,最好设置成小于1G,直接避免超过1G事务导致其他复制失败的情况。

#loose-group_replication_bootstrap_group= off

#group_replication_allow_local_disjoint_gtids_join= OFF

生产实例:

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

server_id=150    #三台主机的id号不同

gtid_mode=ON

enforce_gtid_consistency=ON

master_info_repository=TABLE

relay_log_info_repository=TABLE

binlog_checksum=NONE

log_slave_updates=ON

log_bin=binlog

binlog_format=ROW

transaction_write_set_extraction=XXHASH64    

loose-group_replication_group_name="8053c671-0622-11e8-a300-525400b9c5e8"

loose-group_replication_start_on_boot=off    

loose-group_replication_local_address= "192.168.52.150:33061"  #这个写本地IP地址

loose-group_replication_group_seeds="192.168.52.150:33061,192.168.52.151:33061,192.168.52.152:33061"   

loose-group_replication_bootstrap_group= off

loose-group_replication_single_primary_mode=FALSE   

loose-group_replication_enforce_update_everywhere_checks=FALSE

loose-group_replication_ip_whitelist="192.168.52.0/24"

重启51的mysql

systemctl restart mysqld

mysql -uroot –p

授权用户:

SET SQL_LOG_BIN=0;

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'192.168.52.%' IDENTIFIED BY 'Gsl@Rpl.123';    #创建复制用户及密码

flush privileges;

SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Gsl@Rpl.123' FOR CHANNEL 'group_replication_recovery';     

#这个复制跟普通的change master命令有区别,并不需要指定master是谁,但需要指定通道为’group_replication_recovery’

INSTALL PLUGIN group_replication SONAME 'group_replication.so';   

#安装一个group_replicaiton 的plugin

SHOW PLUGINS;

SET GLOBAL group_replication_bootstrap_group=ON; 

#此引导应仅由单个 sever 独立完成,该 server 启动组并且只启动一次。 这就是为什么引导配置选项的值不保存在配置文件中的原因。 如果将其保存在配置文件中,则在重新启动时,server 会自动引导具有相同名称的第二个组。 这将导致两个不同的组具有相同的名称

START GROUP_REPLICATION;

SET GLOBAL group_replication_bootstrap_group=OFF;

SELECT * FROM performance_schema.replication_group_members;   #查看组成员状态

52、53服务器

修改mysql配置

vim /etc/my.cnf

###同上,注意修改IP地址和server-id。###

重启52、53的mysql

systemctl restart mysqld

mysql -u root –p

SET SQL_LOG_BIN=0;

GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'Gsl@Rpl.123';

flush privileges;

SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Gsl@Rpl.123' FOR CHANNEL 'group_replication_recovery';

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

show plugins;

set global group_replication_allow_local_disjoint_gtids_join=ON;

START GROUP_REPLICATION;

SELECT * FROM performance_schema.replication_group_members;

CREATE DATABASE test;

四、Keepalived+harpoxy配置文件

1、安装keepalived、harpoxy

安装keepalived软件做高可用

Yum install keepalived haproxy -y

安装harproxy软件做负载

tar xf haproxy-1.8.14.tar.gz

cd haproxy-1.8.14

make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy

make install PREFIX=/usr/local/haproxy

cp haproxy  /usr/sbin/

vim /usr/lib/systemd/system/haproxy.service

[Unit]

Description=HAProxy Load Balancer

After=syslog.target network.target

[Service]

ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -c -q

ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf -p /run/haproxy.pid

ExecReload=/bin/kill -USR2 $MAINPID

[Install]

WantedBy=multi-user.target

------------------------------------------------------------------------------------

2、51服务器

[root@m1 conf]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

  state MASTER

  interface em1

  virtual_router_id 151

  priority 100

  advert_int 1

  unicast_src_ip 192.168.52.150

  unicast_peer {

    192.168.52.151

  }

  authentication {

    auth_type PASS

    auth_pass 123456

  }

  virtual_ipaddress {

    192.168.52.160 dev em1 label em1:0

  }

}

[root@m1 haproxy]# vim haproxy.cfg

global

maxconn 100000

chroot /usr/local/haproxy

stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin

uid 99

gid 99

daemon

nbproc 4

cpu-map 1 0

cpu-map 2 1

cpu-map 3 2

cpu-map 4 3

pidfile /usr/local/haproxy/run/haproxy.pid

log 127.0.0.1 local3 info

defaults

option http-keep-alive

option  forwardfor

maxconn 100000

mode http

timeout connect 300000ms

timeout client  300000ms

timeout server  300000ms

listen stats

 mode http

 bind 0.0.0.0:9999

 stats enable

 log global

 stats uri     /haproxy-status

 stats auth    haadmin:123456

[root@m1 conf]# vim mysql.cfg

listen  mysql-api-3306

 bind 0.0.0.0:33306

 mode tcp

 server 192.168.52.150  192.168.52.150:3306  check inter 3000 fall 3 rise 5

 server 192.168.52.151  192.168.52.151:3306  check inter 3000 fall 3 rise 5

 server 192.168.52.152  192.168.52.152:3306  check inter 3000 fall 3 rise 5

3、52服务器

[root@m2 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

  state BACKUP

  interface em1

  virtual_router_id 151

  priority 90

  advert_int 1

  unicast_src_ip 192.168.52.151

  unicast_peer {

    192.168.52.150

  }

  authentication {

    auth_type PASS

    auth_pass 123456

  }

  virtual_ipaddress {

    192.168.52.160 dev em1 label em1:0

  }

[root@m2 ~]# vim /etc/haproxy/haproxy.cfg

global

maxconn 100000

chroot /usr/local/haproxy

stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin

uid 99

gid 99

daemon

nbproc 4

cpu-map 1 0

cpu-map 2 1

cpu-map 3 2

cpu-map 4 3

pidfile /usr/local/haproxy/run/haproxy.pid

log 127.0.0.1 local3 info

defaults

option http-keep-alive

option  forwardfor

maxconn 100000

mode http

timeout connect 300000ms

timeout client  300000ms

timeout server  300000ms

listen stats

 mode http

 bind 0.0.0.0:9999

 stats enable

 log global

 stats uri     /haproxy-status

 stats auth    haadmin:123456

[root@m2 ~]# vim /etc/haproxy/conf/mysql.cfg

listen  mysql-api-3306

 bind 0.0.0.0:33306

 mode tcp

 server 192.168.52.150  192.168.52.150:3306  check inter 3000 fall 3 rise 5

 server 192.168.52.151  192.168.52.151:3306  check inter 3000 fall 3 rise 5

 server 192.168.52.152  192.168.52.152:3306  check inter 3000 fall 3 rise 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

seaskyccl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值