Haproxy、mysql读写分离、python读写分离

HAproxy

源代码软件,提供负载均衡,基于TCP和HTTP代理

官网 https://www.haproxy.co m/

安装、设置时间同步

[root@haproxy ~]# yum -y install haproxy
                # yum -y install ntpdate.x86_64
                # yum -y install ntp
                # ntpdate cn.ntp.org.cn

启动服务

# systemctl start ntpd
# systemctl enable ntpd

查配置文件的地址

# rpm -ql haproxy

修改配置文件,添加统计页面

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
backend web
        balance           roundrobin
        server   weba     192.168.1.17:80 check
        server   webb     192.168.1.18:80 check

#定义监听端口
listen statistics
       bind   *:9090       #定义监听端口
       mode   http        #默认使用协议
       stats   enable    #启用stats
       stats   uri /hadmin?stats   #自定义统计页面的url
       stats   auth admin:admin   #统计页面的账号密码       
       stats  hide-version #隐藏在统计页面上的haproxy版本信息
       stats   refresh 30s #统计页面自动刷新时间
       stats   admin if TRUE  #如果认证通过就做管理功能,可以
管理后端服务器
       stats   realm hapadmin #统计页面密码框上提示文件,默认
为haproxy\statistics

启动、设置开机自启

# systemctl restart haproxy
# systemctl enable haproxy

测试、浏览器访问

mysql读写分离

(主从环境搭建好)

1、在生产中,查询和修改的比例大概为7:3,查询压力大,可以分出多的主机做查询,

slave也是可以被查询的,所以,可以将mysql做成高可用主从复制

2、用户发送请求服务器响应压力,(nginx,lvs,haproxy),但是web服务器需要提供服务,

需要从数据库中读写数据,随着业务量并发量的提高,单点mysql已经无法满足需求,所以

需要配置主从复制,一主一从或者一主多从

3、对数据库的从服务器是不允许修改,否则M-S生效

4、读写分离

5、代码级别读写分离,另外一种是中间件读写分析

mysql的主从复制

1、master

--rm -rf /etc/my.cnf

--glibc,下载解压

--将解压后的文件移动到指定的 /usr/local/mysql

--mkdir  /usr/local/mysq/mysql-files

--useradd -r -s /sbin/nologin mysql

--chown mysql:mysql  /usr/local/mysql/mysql-files

--chmod 750 /usr/local/mysql/mysql-files

--初始化

/usr/local/mysql/bin/mysqld  --initialize  --user=mysql  --basedir=/usr/local/mysql/

--查看data目录和初始密码

--/usr/local/mysql/bin/mysql_ssl_rsa_setup  --datadir=/usr/local/mysql/data

--添加配置文件

#vim /usr/local/mysql/my.cnf

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/usr/local/mysql/data/db01-master.err
log-bin=/usr/local/mysql/data/binlog
server-id=10
character_set_server=utf8mb4

 --复制

cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysql8  (名字随便起)

 --启动

service   mysql8 start

--bin目录加到系统变量PATH中

--sed -i '$aexport PATH=$PATH:/usr/local/mysql/bin'

--source /etc/profile

--mysql -hIP地址  -P3306  -u账户  -p密码     (登录)

--create user 'aaaa'%'aaaa'  identified by 'sn'

--赋权限

grant all on . to'aaaa'

2、slave

--rm -rf /etc/my.cnf

--glibc,下载解压

--将解压后的文件移动到指定的 /usr/local/mysql

--mkdir  /usr/local/mysq/mysql-files

--useradd -r -s /sbin/nologin mysql

--chown mysql:mysql  /usr/local/mysql/mysql-files

--chmod 750 /usr/local/mysql/mysql-files

--添加配置文件

#vim /usr/local/mysql/my.cnf

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/usr/local/mysql/data/mysql1.log #名字随便
relay-log=/usr/local/mysql/data/relaylog  #relaylog中继日志,并不是实时的
server-id=11  #不能与主服务器相同
character_set_server=utf8mb4

 --复制

cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysql8  (名字随便起)

同步数据

--yum -y install rsync

--停用数据库

service mysql8 stop

--在master里,

rm -rf  /usr/local/mysql/data/auto.cnf

--rsync  -av  /usr/local/mysql/data  root@salveIP地址:/usr/local/mysql

--启动从服务

service mysql8 start

设置主数据库

--创建远程slave账号

create  user 'slave'@'%'  identified by 'slave';

grant replication slave on *.* to  'slave'@'%';

flush priviledge

--锁表

flush  tables  with  read lock;

--show master status\G;

 文件名称

 文件位置

设置从数据库  

--help  change  master to

change master to
MASTER_HOST ='IP',
MASTER_USER='SLAVE',
MASTER_PASSWORD='slave'
MASTER_PORT=3306
MASTER_LOG_FILE='binlog000006'
MASTER_LOG_POS=873
GET_MASTER_PLBLIC_KET=0|1;

--启动slave并且查看状态

python代码的读写分离

1、安装pymysql是python管理mysql的驱动,或者成为连接器

pip3  install pymysql

2、在python3的命令行界面引入pymysql

import pymysql

3、创建两个connenction对象,一个指向master mysql,一个指向slave mysql

master_conn=pymysql.connect(host="ip",user="zhanghu",password="mima",
port=3306,database="test");


slave_conn=pymysql.connect(host="ip",user="zhanghu",password="mima",
port=3310,database="test");

4、获得数据游标

master_cursor=master_conn.cursor()

5、执行查询

select_sql="select * from user";
master_cursor.execute(select_sql);
rs=cursor.ferchall()

6、执行修改

update_sql="update user set password='000' where username='aaaa'"
master_cursor.execute(update_sql)
master_conn.commit()

7、执行删除

delete_sql="delete from user where username='aaaa'"
master_cursor.execute(delete_sql)
master_conn.commit()

8、执行新增

insert_sql="insert into user values (1004,'ddddd','dddddd')"
master-cursor.execute(insert_sql)
master_conn.commit()

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值