MyCAT中間件服務實作讀寫分離
第一步:完成Mariadb (Mysql)主從複制
建立主從資料庫
A配置master伺服器
- 配置my.cnf設定server-id
[[email protected] ~]#yum install mariadb-server -y
[[email protected]~]#vim /etc/my.cnf
[mysqld]
server-id=8
log-bin
- 啟動資料庫
[[email protected] ~]#systemctl start mariadb
2.建立複制使用者
[[email protected] ~]#mysql
MariaDB [(none)]> grant replication slave on *.* to repluser@'10.0.0.%' identified by 'replpass';
MariaDB [(none)]> show master status;

---------------------------------------------------------------------------------
B配置slave伺服器
- 配置my.cnf設定server-id
[[email protected] ~]#yum install mariadb-server -y
[[email protected] ~]#vim /etc/my.cnf
[mysqld]
server-id=17
2.修改主節點備份檔案
[[email protected] ~]#mysql
MariaDB [(none)]> show slave status;
看到資料庫已經複制成功。(注意配置資訊一定要和master伺服器資訊一緻!)
第二步搭建MYCAT伺服器
1、安裝Java Mariadb
[[email protected] ~]# yum -y install jave mariadb
[[email protected] ~]# java -version
[[email protected]~]#wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
[[email protected] ~]# mkdir /apps
[[email protected] ~]# tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps/
[[email protected] ~]# vim /apps/mycat/conf/server.xml
第三步安裝client伺服器
[[email protected] ~]# yum -y install mariadb
第四步将Mycat和後端Mariadb關聯
Mycat伺服器配置
[[email protected] ~]# vim /apps/mycat/conf/schema.xml
重新開機mycat
[[email protected] ~]# mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
主從資料庫建立mycat賬戶授權
通過通用日志确認實作讀寫分離(general_log)
測試mycat自動排程讀請求至主節點
####################################################################
ansible常用子產品總結
2.1Command子產品
功能:在遠端主機執行指令,此為預設子產品,可忽略-m選項
作用:執行系統指令(linux windows),不支援變量,"<",">","|",";","&"等符号
這個批量處理裝置相同操作很友善!注意顔色!
2.2Shell子產品
shell子產品增強版Command子產品
功能:執行複雜的指令
2.3 script子產品
功能:作用:将本地腳本複制到遠端主機,并執行。(不需要給腳本添加執行權限)
2.4copy子產品
拷貝, 修改檔案或目錄, 修改已經存在的目錄的權限
使用content可以直接在遠端建立檔案,同時指定檔案内容
使用backup=yes備份配置檔案,可以實作配置檔案的修改或復原
該子產品可以直接拷貝連結
[[email protected] ~]# ansible-doc copy #檢視copy子產品用法
src: #源檔案或目錄,要複制到遠端主機的檔案在本地的位址,可以是絕對路徑,也可以是相對路徑。如果路徑是一個目錄,它将遞歸複制。在這種情況下,如果路徑使用"/"來結尾,則隻複制目錄裡的内容,如果沒有使用"/"來結尾,則包含目錄在内的整個内容全部複制,類似于rsync(#)。(src為空目錄是時候是不會拷貝的,一緻顯示綠色)
content:用于替代"src",可以在指令行直接設定指定檔案的值
dest: #目标目錄
owner: foo #屬主
group: foo #屬組(不能使用gid指定)
mode: '0644' #權限,數字(3位|4位),字母,UGO
backup: yes #當出現同名的檔案,直接覆寫,因為預設是no,指定yes後(檔案内容不同會以目前時間戳備份該檔案)
force:如果目标主機包含該檔案,但内容不同,如果設定為yes,則強制覆寫,如果為no,則隻有當目标主機的目标位置不存在該檔案時,才複制。預設為yes(force=no和state=backup可以二選一)
remote_src:
yes #受控端自己玩(可以做批量復原)
no #預設
--------------------------------------------------
#遠端批量拷貝,相當于scp,rsync
目标目錄下檔案存在的話會報錯,被控端主機使用者不存在會報錯(但是它把能做的都做了)
2.5.fetch子產品
與copy相反,copy是把本機檔案發到所有node節點,用fetch可以比如從node節點抓取日志資訊
隻能抓取單個檔案,抓多個需要把那些檔案打包再抓
2.6file子產品
功能:建立檔案或目錄,修改已經存在的目錄的權限,建立軟硬連接配接
file:
path: /etc/foo.conf #指定建立的目錄或檔案
state:
touch #建立檔案
directory #建立目錄
absent #删除目錄或檔案
link #做軟連結
owner: foo #屬主
group: foo #屬組
mode: '0644' #權限
recurse #遞歸
1 force:需要在兩種情況下強制建立軟連結,一種是源檔案不存在但之後會建立的情況下;另一種是目标軟連結已存在,需要先取消之前的軟鍊,然後建立新的軟鍊,有兩個選項:yes|no
2 group:定義檔案/目錄的屬組
3 mode:定義檔案/目錄的權限( 1.一次建立多個目錄的時候才會遞歸授權, 2.recurse=yes也會遞歸授權)
4 owner:定義檔案/目錄的屬主
5 path:必選項,定義檔案/目錄的路徑(不存在的話可以直接建立)#
6 recurse:'遞歸'的設定檔案的屬性,隻對'目錄'有效(指定recurce的話,可以修改已經存在的檔案或者目錄的權限,預設關閉)(需要配合mode owner group一起使用)
7 src:要被連結的源檔案的路徑,隻應用于state=link的情況
8 dest:被連結到的路徑,隻應用于state=link的情況
9 state:
directory:如果目錄不存在,建立目錄
file:隻能修改檔案或目錄的時間 (配合modification_time access_time)
link:建立軟連結
2.7unarchive子產品
功能:解壓縮
1、解壓ansible管理機上的壓縮檔案到遠端主機:
ansible all -m unarchive -a "src=/tmp/install/zabbix-3.0.4.tar.gz dest=/tmp/ mode=0755 copy=yes"
2、解壓遠端主機上的檔案到目錄:
ansible all -m unarchive -a "src=/tmp/install/zabbix-3.0.4.tar.gz dest=/tmp/ mode=0755 copy=no"
copy:預設為yes,當copy=yes,那麼拷貝的檔案是從ansible主機複制到遠端主機上的,如果設定為copy=no,那麼會在遠端主機上尋找src源檔案
src:源路徑,可以是ansible主機上的路徑,也可以是遠端主機上的路徑,如果是遠端主機上的路徑,則需要設定copy=no
dest:遠端主機上的目标路徑
2.8hostname子產品
會修改配置檔案,不是臨時更改
[[email protected] ~]# ansible 10.0.0.8 -m hostname -a 'name=node8.wutongweng.com'
2.9cron子產品
功能:添加定時任務
#使用crontab之前最好同步時間(注意單引号和雙引号的作用)(*有時候需要加'')
[[email protected] ~]# ansible '*' -m cron -a "name=同步時間 minute=*/5 job='/usr/sbin/ntpdate time1.aliyun.com &>/dev/null'"
ansible-doc cron
ansible db -m cron -a 'minute="" hour="" day="" month="" weekday="" job="" name="(必須填寫)" state='
1、定時設定指定值的寫入即可,沒有設定的要删除
2、name必須寫(建立定時任務或者删除定時任務的 标志,不能修改注釋)(這一點和yum倉庫名一樣)
3、state有兩個狀态:present(添加(預設值))or absent(移除)
#添加定時任務
ansible db -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state="present"'
檢視定時任務
ansible db -a "crontab -l"
#修改定時任務
ansible db -m cron -a 'minute="*/5" job="/bin/echo hello" name="test cron job" state="present"'
#移除定時任務(根據name來删除)
ansible db -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state="absent"'
ansible all -m cron -a "name=test state=absent"
檢視定時任務
ansible db -a "crontab -l"
# 注釋相應定時任務,使定時任務失效
ansible web_group -m cron -a "name='ansible cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh' disabled=yes"
2.10yum子產品
功能:遠端下載下傳
name #包名,用等于号表示(指定要安裝的軟體包的名稱)
file:// #指定本地安裝路徑,=yum localinstall -y
http:// #指定yum倉庫
state #指定動作,用等于号表示
present #安裝軟體包(預設)(=install)
absent #删除軟體包(=remove)
latest #安裝最新版本的軟體包或,更新
disable_gpg_check #預設值為 no,表示不禁用驗證,設定為 yes 表示禁用驗證,即不驗證包,直接安裝。
enablerepo #臨時啟用源(無論此源是否開啟)
disablerepo #臨時禁用某個源,這樣設定後,在安裝軟體包時則不會從對應的源中選擇安裝包。
download_only=true #隻下載下傳不安裝 yum install [d]
-------------------------------------------------------------
#下載下傳安裝,使用被控端的源安裝軟體包
[[email protected] ~]# ansible 'web_group' -m yum -a 'name=vsftpd'
[[email protected] ~]# ansible 'web_group' -m yum -a 'name=vsftpd state=present'
#下載下傳安裝,指定源的rpm包,相當于wget+localinstall,可以指定包名和協定
[[email protected] ~]# ansible 'web_group' -m yum -a 'name=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.0-1.el7.x86_64.rpm state=present'
#安裝,前提是用戶端指定目錄下有這個rpm包(相當于yum localinstall)
[[email protected] ~]# ansible 'web_group' -m yum -a 'name=/root/zabbix-agent-5.0.0-1.el7.x86_64.rpm state=present'
--------------------------------------------------------------
#解除安裝
[[email protected] ~]# ansible 'web_group' -m yum -a 'name=zabbix-agent-5.0.0-1.el7.x86_64 state=absent'
[[email protected] ~]# ansible 'web_group' -m yum -a 'name=zabbix state=absent'
-----------------------------------------------------------------------
#擴充
[[email protected] ~]# ansible all -m yum -a "name=httpd state=latest disable_gpg_check=yes enablerepo=epel"
#更新所有軟體包,排除httpd
[[email protected] ~]# ansible all -m yum -a "state=latest name='*' exclude='httpd'"
2.11service子產品
遠端啟停,重載服務
service子產品(可以跨平台,跨系統) 與systemd子產品作用類似,使用指令類似
1 arguments:給指令行提供一些選項 #
2 enabled:是否開機啟動 yes|no(預設是no)
3 name:必選項,服務名稱
4 pattern:定義一個模式,如果通過status指令來檢視服務的狀态時,沒有響應,就會通過ps指令在程序中根據該模式進行查找,如果比對到,則認為該服務依然在運作 #
5 runlevel:運作級别 #
6 sleep:如果執行了restarted,在則stop和start之間沉睡幾秒鐘
7 state:對目前服務執行啟動,停止、重新開機、重新加載等操作(started,stopped,restarted,reloaded)
#保持服務啟動并設定為開機自啟
ansible web_group -m service -a 'enabled=yes name=httpd state=started'
2.12user子產品
使用yml文法修改使用者密碼
多種加密方式擷取加密密碼
功能:管理遠端主機上的使用者,比如建立使用者、修改使用者、删除使用者、為使用者建立密鑰對等操作
user子產品是請求的是useradd, userdel, usermod三個指令,goup子產品請求的是groupadd, groupdel, groupmod 三個指令。
groups: #修改附加組為
append=no #預設,覆寫(相當于usermod -G)
append=yes #追加(相當于usermod -aG)
uid: 指定用的uid
group: #指定主組
password: #明文密碼進行哈希後的字元串,你可以在 python 的指令提示符下輸入如下指令,生成明文密碼對應的加密字元串 "import crypt; crypt.crypt('666666')"
update_password:
always: 隻有當密碼不相同時才會生效,即修改密碼(預設) #
on_create: 隻為新使用者設定密碼
name: 指定使用者名
system: 是否為系統使用者 yes|no(預設是no)
remove: 當state=absent時,remove=yes則表示連同家目錄,郵件目錄一起删除,等價于userdel -r(預設是no)
state:
absent #删除使用者
remove=no #預設,删除使用者時,不會删除使用者的家目錄等資訊
remove=yes #删除使用者的同時,會删除使用者的家目錄,郵件目錄
present #建立使用者(預設)
shell: 指定使用者的shell環境(預設是/bin/bash)
expires: 設定使用者的過期時間,值是一個時間戳(轉化指令:date -d 2018-12-31 +%s,指令行設定 expires=)
comment: #建立使用者的時候添加一段注釋
generate_ssh_key: yes #建立公鑰(預設)
ssh_key_bits: 2048 #指定公鑰長度
ssh_key_file: .ssh/id_rsa #建立私鑰(建立使用者的家目錄下)
create_home=false #是否建立家目錄(預設建立true)
------------------------------------------------------------------------
#建立使用者,修改使用者
ansible 'web_group' -m user -a ' '
name=ll
name=hh comment="zhushi" uid=1040 group=adm #該組必須存在
name=hh shell=/bin/bash groups=adm,lp append=yes
name=hh state=absent remove=yes
name=hh expires=1422403387
name=hh generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa
name="testops" password="$6$0lwTSmqKOkL.ktgl$OnBexXC7haBf0FRHVMIZM2edDeFWBbpKJ2r9cxVwNvY.vh3IIUzwFz8n7jFglc0CrtQSY12ziDonVL6e71Og2."
--------------------------------------------------------------
#生成密鑰時,隻會生成公鑰檔案和私鑰檔案,和直接使用ssh-keygen指令效果相同,不會生成authorized_keys檔案。複制id_rsa.pub粘貼為authorized_keys檔案即可使用
name=test generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=~/.ssh/id_rsa
-----------------------------------------------------------------------
#指定password參數時,不能使用後面這一串密碼會被直接傳送到被管理主機的/etc/shadow檔案中,是以需要先将密碼字元串進行加密處理。然後将得到的字元串放到password中即可。
1.加密
[[email protected] ~]# python
>>> import crypt;crypt.crypt('666666')
'$6$ziT/sb5KRtUaxoq7$ulfHVLqVgXfmfFUYY7FppzqBQMUYd.2GLDyQwmKv4dYAd0zpgtt5JDheoO/OvvTvY53x9UShX.PtHykJEvsmG0'
2.建立使用者指定密碼 或 修改使用者密碼
------------------------------------------------------------------
#删除使用者
注意該使用者下不能有任何程序,否則會報錯(但是能删除的都删除了)
ansible 'web_group' -m user -a ' '
name=ll state=absent remove=yes
2.13group子產品
功能:建立使用者組
[[email protected] ~]# ansible-doc group
name: somegroup #指定組名
state: present #建立(預設,課省略)
state: absent #删除
gid #指定建立的組的gid
#遠端建立組
[[email protected] ~]# ansible 'web_group' -m group -a 'name=dd gid=233 state=present'
#遠端删除組
[[email protected] ~]# ansible 'web_group' -m group -a 'name=dd gid=233 state=absent'
參考網頁:https://www.cnblogs.com/syy1757528181/p/13069043.html
#####################################################################
ansible-playbook批量安裝httpd,按主機名提供不同的index.html(如node1的index.html歡迎頁面為welcome node1)
删掉所有websrvs 下安裝的的httpd
編寫install_httpd.yml
Ansible Playbook測試并釋出劇本執行安裝
測試
(index.html的擷取主機變量好像沒有成功,有空再試試編寫部分)
###################################################################
編譯安裝redis
[[email protected] ~] wget http://download.redis.io/releases/redis-5.0.9.tar.gz
[[email protected] ~]yum -y install gcc jemalloc-devel
[[email protected] ~]tar xvf redis-5.0.9.tar.gz
[[email protected] ~]cd redis-5.0.9/
[[email protected] redis-5.0.9]make PREFIX=/apps/redis install
[[email protected] redis-5.0.9]tree /apps/redis/
[[email protected] redis-5.0.9]#ln -s /apps/redis/bin/* /usr/bin/
[[email protected] redis-5.0.9] #mkdir /apps/redis/{etc,log,data,run}
[[email protected] redis-5.0.9]#useradd -r -s /sbin/nologin redis
[[email protected] redis-5.0.9]#chown redis.redis /apps/redis -R
修改啟動三個報錯:
[[email protected] redis-5.0.9]# vim /etc/sysctl.conf
[[email protected] redis-5.0.9]# sysctl -p
net.core.somaxconn = 1024
vm.overcommit_memory = 1
[[email protected] redis-5.0.9]# echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
[[email protected] redis-5.0.9]# chmod +x /etc/rc.d/rc.local
[[email protected] redis-5.0.9]# cp redis.conf /apps/redis/etc/
[[email protected] redis-5.0.9]# chown -R redis.redis /apps/redis/
[[email protected] redis-5.0.9]# vim /apps/redis/etc/redis.conf
[[email protected] redis-5.0.9]# redis-server /apps/redis/etc/redis.conf
[[email protected] redis-5.0.9]# vim /apps/redis/etc/redis.conf
Bind0.0.0.0
daemonize yes
[[email protected] redis-5.0.9]# redis-server /apps/redis/etc/redis.conf