美文网首页
集群版mycat链接数据库,双主(读写),单从(只读)

集群版mycat链接数据库,双主(读写),单从(只读)

作者: CaptainWhite | 来源:发表于2019-04-16 10:42 被阅读0次

配置参考文章:https://www.cnblogs.com/kevingrace/p/9365840.html
服务器划分:
11.11.141.37 从(只读)
11.11.141.38 主(读写-主)
11.11.141.39 主(读写-备)
服务器全部安装mysql

mycat安装在38、39上,进行负载均衡操作
11.11.141.38 主(读写-主)
11.11.141.39 主(读写-备)

1、mysql安装

docker run -d
-v /home/kygl/docker/mysql/conf:/etc/mysql/conf.d:Z
-v /home/kygl/docker/mysql/data:/var/lib/mysql:z
-v /home/kygl/docker/mysql/logs:/log:z
-p 3306:3306
--name mysql
-e MYSQL_ROOT_PASSWORD=MYSQLPTRkygl@37
10.27.213.66:5000/mysql:latest

docker run -d
-v /home/kygl/docker/mysql/conf:/etc/mysql/conf.d:Z
-v /home/kygl/docker/mysql/data:/var/lib/mysql:z
-v /home/kygl/docker/mysql/logs:/log:z
-p 3306:3306
--name mysql
-e MYSQL_ROOT_PASSWORD=MYSQLPTRkygl@38
10.27.213.66:5000/mysql:latest

docker run -d
-v /home/kygl/docker/mysql/conf:/etc/mysql/conf.d:Z
-v /home/kygl/docker/mysql/data:/var/lib/mysql:z
-v /home/kygl/docker/mysql/logs:/log:z
-p 3306:3306
--name mysql
-e MYSQL_ROOT_PASSWORD=MYSQLPTRkygl@39
10.27.213.66:5000/mysql:latest

2、 my.cnf配置

37

[mysql]
default-character-set = utf8
[mysqld]
#设置server-id 必须唯一
server-id=37
read_only=1
character_set_server = utf8
lower_case_table_names = 1

gtid-mode=on
enforce-gtid-consistency=true

#避免relay.info更新不及时,SLAVE 重启后导致的主从复制出错,,在从服务器上实现事故安全功能,增加配置:
master_info_repository=TABLE
relay_log_info_repository=TABLE

[mysql.server]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[client]
default-character-set=utf8

38

[mysql]
default-character-set = utf8
[mysqld]

log-bin=mysql-bin #开启二进制日志
server-id=38 #设置server-id
gtid-mode=on
enforce-gtid-consistency=true

#步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_increment=2        

#起始值。一般填第n台主MySQL。此时为第一台主MySQL
auto_increment_offset=1     

# 不同步那些数据库
binlog-ignore-db = mysql,information_schema 

# 只同步那些数据库,除此之外,其他不同步
#binlog-do-db = test_mysql 

#要同步的数据库,默认所有库
#replicate-do-db=aa   

character_set_server = utf8
lower_case_table_names = 1
[mysql.server]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[client]
default-character-set=utf8
[mysql]
default-character-set = utf8
[mysqld]

log-bin=mysql-bin #开启二进制日志
server-id=39 #设置server-id
gtid-mode=on
enforce-gtid-consistency=true

#步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_increment=2        

#起始值。一般填第n台主MySQL。此时为第一台主MySQL
auto_increment_offset=2      

# 不同步那些数据库
binlog-ignore-db = mysql,information_schema 

# 只同步那些数据库,除此之外,其他不同步
#binlog-do-db = test_mysql 

#要同步的数据库,默认所有库
#replicate-do-db=aa   

character_set_server = utf8
lower_case_table_names = 1
[mysql.server]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[client]
default-character-set=utf8

3、主服务器创建同步账号

38

用户: kyglmaster
密码: PTRkygl@master
创建用户:
CREATE USER 'kyglmaster'@'%' IDENTIFIED BY 'PTRkygl@master';
分配权限:
GRANT REPLICATION SLAVE ON . TO 'kyglmaster'@'%';
刷新权限:
flush privileges; #刷新权限

39

用户: kyglmaster
密码: PTRkygl@master
创建用户:
CREATE USER 'kyglmaster'@'%' IDENTIFIED BY 'PTRkygl@master';
分配权限:
GRANT REPLICATION SLAVE ON . TO 'kyglmaster'@'%';
刷新权限:
flush privileges; #刷新权限

4、配置主主连接

38
mysql> show master status;
+------------------+----------+--------------+--------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin.000001 | 774 | | mysql,information_schema | |
+------------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)

CHANGE MASTER TO MASTER_HOST='11.11.141.39',MASTER_PORT=3306,MASTER_USER='kyglmaster',MASTER_PASSWORD='PTRkygl@master',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=774;

start slave;

39

mysql> show master status;
+------------------+----------+--------------+--------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin.000001 | 774 | | mysql,information_schema | |
+------------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)

CHANGE MASTER TO MASTER_HOST='11.11.141.38',MASTER_PORT=3306,MASTER_USER='kyglmaster',MASTER_PASSWORD='PTRkygl@master',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=774;

start slave;

5、配置从服务器

37

CHANGE MASTER TO MASTER_HOST='11.11.141.38',MASTER_USER='kyglmaster', MASTER_PASSWORD='PTRkygl@master',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=774 FOR CHANNEL 'master38';

CHANGE MASTER TO MASTER_HOST='11.11.141.39',MASTER_USER='kyglmaster', MASTER_PASSWORD='PTRkygl@master',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=774 FOR CHANNEL 'master39';

6.配置38上mycat

vim /usr/local/mycat/conf/server.xml 编辑user配置

        <user name="root" defaultAccount="true">
                <property name="password">MYSQLPTRkygl@59</property>
                <property name="schemas">esp_admin,esp_application,esp_food,esp_quartz,esp_config,esp_workflow</property>
        </user>

编辑/usr/local/mycat/conf/schema.xml 编辑schema数据库实体对应的mycat表,例如

<schema name="esp_config" checkSQLschema="false" sqlMaxLimit="100">

        <!-- esp_config -->
        <table name="cloud_config" primaryKey="id" dataNode="esp_config" />
        <table name="test" primaryKey="id" dataNode="esp_config" />
                <!--esp_config视图-->
                <table name="v_userinfo"  primaryKey="id"  dataNode="esp_config" />
        <!-- esp_config -->

    </schema>

然后编辑dataNode(分片信息,也就是分库相关配置)字段,添加数据库

 <!-- 连接的数据库 -->
    <dataNode name="esp_admin" dataHost="mysql_3306" database="esp_admin" />
    <dataNode name="esp_application" dataHost="mysql_3306" database="esp_application" />
    <dataNode name="esp_food" dataHost="mysql_3306" database="esp_food" />
    <dataNode name="esp_quartz" dataHost="mysql_3306" database="esp_quartz" />
    <dataNode name="esp_config" dataHost="mysql_3306" database="esp_config" />
    <dataNode name="esp_workflow" dataHost="mysql_3306" database="esp_workflow" />

编辑dataHost(物理数据库)信息

 <dataHost name="mysql_3306" maxCon="1000" minCon="10" balance="1"
                      writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <writeHost host="hostm38" url="11.11.141.38:3306" user="root" password="MYSQLPTRkygl@38">
                    <readHost host="hostm38" url="11.11.141.38:3306" user="root" password="MYSQLPTRkygl@38" />
                    <readHost host="hosts37" url="11.11.141.37:3306" user="root" password="MYSQLPTRkygl@37" />
            </writeHost>

            <writeHost host="hostm39" url="11.11.141.39:3306" user="root" password="MYSQLPTRkygl@39">
                    <readHost host="hostm39" url="11.11.141.39:3306" user="root" password="MYSQLPTRkygl@39" />
                    <readHost host="hosts37" url="11.11.141.37:3306" user="root" password="MYSQLPTRkygl@37" />
            </writeHost>

    </dataHost>
  • name属性唯一标识dataHost标签,供上层的标签使用。
  • maxCon属性指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的
  • writeHost、readHost标签都会使用这个属性的值来实例化出连接池的最大连接数。
  • minCon属性指定每个读写实例连接池的最小连接,初始化连接池的大小。
  • writeType="0" 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
  • balance : 均衡负载的方式.balance="1": 读请求随机分发到当前writeHost对应的readHost和standby的writeHost上
  • switchType="1" 第一个writehost失败后转向第二个writehost

最后启动mycat:/usr/local/mycat/bin/mycat start

39上配置和上面配置相同,用作负载均衡。

7.配置mycat高可用负载均衡

在keepalived配置文件中添加如下配置

virtual_server 11.11.141.59 8066 {
    delay_loop 1 # 设置健康检查时间,单位是秒
    lb_algo wlc # 负载均衡调度算法,一般用wrr、rr、wlc
    lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
    persistence_timeout 1    # 会话保持时间。把用户请求请求间隔在未超过保持时间时,一直分发到某个服务节点
    protocol TCP  # 转发协议 有TCP和UDP两种

    real_server 11.11.141.38 8066 {  # 指定real server1的IP地址
        weight 1   # 配置节点权值,数字越大权重越高
        TCP_CHECK {
          connect_timeout 5  #连接超时时间
          nb_get_retry 3      # 重连次数
          delay_before_retry 1   # 重连时间间隔
          connect_port 8066       #检测端口
        }
    }

    real_server 11.11.141.39 8066 {  # 指定real server1的IP地址
        weight 1   # 配置节点权值,数字越大权重越高
        TCP_CHECK {
          connect_timeout 5  #连接超时时间
          nb_get_retry 3      # 重连次数
          delay_before_retry 1   # 重连时间间隔
          connect_port 8066       #检测端口
        }
    }

 }

开启路由转发:echo "1" >/proc/sys/net/ipv4/ip_forward
脚本如下

在mycat服务器上添加lo:0路由并设置开机自启动

#!/bin/bash
VIP=11.11.141.59   #这个为你要设置的VIP
 
case $1 in
start)
    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
    /sbin/route add -host $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 $IP >/dev/null 2>&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

添加执行权限并执行该脚本添加虚拟路由:

chmod +x /home/kygl/script/vip.sh
bash /home/kygl/script/vip.sh

设置脚本开机自启动

chmod +x /etc/rc.d/rc.local
echo "bash /home/kygl/script/vip.sh start" >>/etc/rc.d/rc.local

最后我们通过11.11.141.59:8066连接mycat

相关文章

网友评论

      本文标题:集群版mycat链接数据库,双主(读写),单从(只读)

      本文链接:https://www.haomeiwen.com/subject/geuuwqtx.html